В нашей компании уже длительное время при разработке сайтов используются так называемые "некешируемые области" — штука, позволяющая исполнять код в любом месте шаблона компонента вне зависимости от кеша. Применяются они, в основном, в интернет-магазинах и корпоративных сайтах для следующих задач:
Отображение актуального количества товара на складе;
Изменение поведения блока "Добавить в корзину" в зависимости от наличия товара в корзине;
Какие-нибудь рейтинги-голосовалки у элементов каталога;
Реализация была довольно простенькая — глобальная переменная, несколько функций и всё. Скопировал файл, подключил и пользуйся. Но пришло время что-то менять! И я решил сделать модуль в маркетплейс для внутренних нужд. А потом ещё раз подумал — и решил сделать его доступным всем. Собственно, вот модуль "Некешируемая область", а тут небольшая документация с примером использования. Внимание. Модуль требует для работы PHP 5.3, хотя в свете выхода будущей версии битрикса это не страшно.
Здравствуйте, установил ваш продукт, но что-то не так, не пойму в чем проблема. это пример стр. на которой установлен модуль http://chudes-shop.ru/catalog/bryzgalki_1/ первый раз товар добавляется хорошо, но если добавлять больше двух раз подряд не перегружая стр. то выдает число добавленного товара и все я пробовал посмотреть что за данные приходят в скрипт и выяснил что var is_in_basket приходит пустая почему то можете помочь?
Привет Андрей. Установил модуль и сделал как в документации пример. Но вот почему-то когда авторизирован - то работает замена в области. А когда неавторизирован - то нет.
Глянул так в клас одним глазом processAreas(&$pageContent) и сразу же кидается в глаза что когда неавторизирован то $pageContent = пустой строке, а когда авторизирован - то там страница.
Ну и замену видимо оно хочет сделать в $pageContent - а там ничего не находит
Kurochka Artem, а страница при этом отображается для гостя? Если в метод приходит пустая строка, скорее всего, её какой-то ранее установленный обработчик очистил - но при этом пользователю должна отдаваться белая страница.
Страница есть, и даже есть на ней комментарий (который должен подмениться). Я в четверг смотрел что функция неавторизированному пользователю $pageContent = ""; А вот где ты её $pageContent эту получаешь я не увидел
Kurochka Artem, это обработчик на OnEndBufferContent. Соответственно, если в него приходит пустой контент, надо смотреть выше него. Я бы начал диагностику со всех других обработчиков на это событие - залез прямо в ядро и логировал хендлеры и результаты их работы.
Попробовал этот модуль с композитным режимом, запрашиваю страницу с помощью ajax (добавление в корзину) и там где были некешируемые области отдается такой контент:
А можно ли вашим компонентом вставлять другие компоненты в кешируемую область? Например мне нужно модуль Комментарии вставить в каталог детальной карточки товара. Можете подсказать? Спасибо.
Панчук Сергей, В месте, где надо показать компонент, пишите <?\itc\UncachedArea::show('comments');?> А в любом другом месте (в element.php или component_epilog.php, которые отрабатывают без кеша) вставляете вызов компонента комментариев в обёртку: <?\itc\UncachedArea::startCapture('comments');?> <?$APPLICATION->IncludeComponent(...);?> <?\itc\UncachedArea::endCapture();?>
Нейман Андрей, заметил такую особенность - если в компоненте вписано "AJAX_MODE" => "Y" - компонент выводится вверху шаблона. Т.е. оно как бы игнорирует то место где прописано <?\itc\UncachedArea::show('comments');?> Что скажите? Можно это побороть?
Панчук Сергей, модуль для аякса смысла не имеет в принципе, т.к. вы самостоятельно можете подменять данные. Сама проблема связана с нарушением последовательности останова буферизации (там по принципу стека старт и окончание должны быть).
Андрей Нейман,Огромная благодарность за пример с выводом в некешируемую область другого компонента (ну или в моем случае - самостоятельного куска кода:)) Добавьте, плиз, его в общую документацию по проекту - для полноты данных:)
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».