Pull to refresh

Отложенные функции в 1С-Битрикс

Reading time 2 min
Views 18K
Снова заметка на тему 1С-Битрикс, поэтому просьба: хаброчеловеки которые уже потянули свои мышки, чтобы поставить минус, просто закройте страницу и не мешайте остальным получить полезную (я надеюсь) информацию.

Я давно занимаюсь разработкой сайтов на основе Битрикс, и за это время скопилось несколько полезных советов, одним из них я сейчас и поделюсь.

Отложенные функции
Много раз натыкался на упоминание в <a href=” www.1c-bitrix.ru/api_help”>документации отложенных функций, было ясно, что это что-то интересное, но как известно лучше один раз попробовать, чем семь раз прочитать об этом. Что же это такое? Вот какое определение можно найти на страничке официальной документации по этой технологии:
Отложенные функции — это технология позволяющая задавать заголовок страницы, пункты навигационной цепочки, CSS стили, дополнительные кнопки в панель управления, мета-теги и т.п. с помощью функций используемых непосредственно в теле страницы, а соответствующие результаты работы этих функций выводить в прологе, т.е. выводить их выше по коду, чем они были заданы.
Пригодились мне эти функции при создании интернет магазина, а именно для работы с корзиной. В шапке магазина, на самом видном месте висела корзина, в ней отображалась сумма покупки и количество товаров. Но при добавлении понравившегося товара в корзину, эта надпись не менялась, ведь header формируется и выводиться раньше чем в компоненте происходит обработка добавления товара в корзину, а затем обновление ее содержимого. Тогда я стал смотреть в сторону LocalRedirect, чтобы после успешного завершения операции добавления перегрузить страницу. Но выручили те самые отложенные функции. А сделать можно вот как.
В header, там, где и выводиться наша корзина пишем такой код:
<? $APPLICATION->ShowProperty("basket", "Ваша корзина пуста"); ?>

В footer добавляем следующие строки:
if (CModule::IncludeModule("sale")){
$arItems = GetBasketList();
$price = 0;
for ($i = 0; $i<count($arItems); $i++){
$num_prodcts += $arItems[$i]["QUANTITY"];
$price += $arItems[$i]["PRICE"]*$arItems[$i]["QUANTITY"];
}
$res = $num_prodcts.' (шт.): '.number_format($price, 0, ".", " ").' Руб.
}
else{
$res = "Ваша корзина пуста";
}
$APPLICATION->SetPageProperty("basket", $res);
}

Теперь после обработки добавления товаров в теле странички, мы проверяем состояние текущей корзины и выводим через отложенную функцию ShowProperty в шапку.
Tags:
Hubs:
-5
Comments 20
Comments Comments 20

Articles