Возник вопрос "оптимизации" - при изменении списка служб доставки на странице "Способы доставки" так же менялись системой. При этом на той самой странице должно быть так: юзер выбирает из списка нужный город, в зависимости от выбора динамически без обновления страницы генерируется список доступных для города служб (как на странице оформления заказа).
В Битриксе и PHP новичек. Но поискав, часть вопроса решил:
- на странице разместил sale.location.selector.search, из него извлёк ID города через глобальную переменную (находил разные способы, но получилось только так)
- через CSaleDelivery::GetList получил список нужных служб
- вывел список
Вроде бы работает, !НО! при выборе другого города - изменение списка не происходит, т.е. работает только для того города, который я поставил по умолчанию в селекторе.
Смотрел компоненты оформления заказа - не очень помогло, только запутался.
Код на странице способов доставки |
|---|
| Код |
|---|
<?
GLOBAL $locResult;
$APPLICATION->IncludeComponent(
"custom_components:sale.location.selector.search",
"",
Array(
"COMPONENT_TEMPLATE" => ".default",
"ID" => "1680",
"CODE" => "",
"INPUT_NAME" => "LOCATION",
"PROVIDE_LINK_BY" => "id",
"JSCONTROL_GLOBAL_ID" => "",
"JS_CALLBACK" => "",
"SEARCH_BY_PRIMARY" => "Y",
"EXCLUDE_SUBTREE" => "",
"FILTER_BY_SITE" => "Y",
"SHOW_DEFAULT_LOCATIONS" => "Y",
"CACHE_TYPE" => "A",
"CACHE_TIME" => "36000000",
"FILTER_SITE_ID" => "s1"
)
);
$db_dtype = CSaleDelivery::GetList(
$arOrder = array(
"DESCRIPTION" => "ASC",
"NAME" => "ASC"
),
$arFilter = array(
"LOCATION" => $locResult,
"LID" => SITE_ID,
"+<=WEIGHT_FROM" => 0,
"ACTIVE" => "Y"
),
$arGroupBy = false,
$arNavStartParams = false,
$arSelectFields = array()
);
if ($ar_dtype = $db_dtype->Fetch())
{
echo "Способы доставки:<br><br>";
do
{
if ($ar_dtype["PRICE"] == 0) {
echo $ar_dtype["NAME"].". ".$ar_dtype[DESCRIPTION]."<br>Cтоимость: бесплатно<br><br>";
}
else {
echo $ar_dtype["NAME"].". ".$ar_dtype[DESCRIPTION]."<br>Cтоимость: от ".$ar_dtype["PRICE"]."р.<br>";
}
}
while ($ar_dtype = $db_dtype->Fetch());
}
else
{
echo "Способов доставки не найдено.<br>";
}
//unset($locResult);
?>
|
|
Вопрос, что я делаю не так? В каком направлении копать?