Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /*
- result_modifier:
- --------------------------------------
- */
- // Ввожу признак CUSTOM_AJAX_MODE в параметрах (можно указывать в параметрах вызова компонента, можно нет, так как без указания режим будет включен, по сути в параметрах его можно только выключить)
- $arResult['CUSTOM_AJAX_MODE'] = $this->__component->arParams['CUSTOM_AJAX_MODE'] = isset($arParams['CUSTOM_AJAX_MODE']) ? $arParams['CUSTOM_AJAX_MODE'] : 'Y';
- // Определяю ключ доступа к компоненту по ajax (кодирую массив параметров и название шаблона)
- $arResult['PARAMS_HASH'] = md5($arParams.$this->GetName());
- // Сохраняю в инстанс компонента ключ
- $this->__component->arResult['PARAMS_HASH'] = $arResult['PARAMS_HASH'];
- // Сохраняю ключ в кеше инстанса
- $this->__component->SetResultCacheKeys(array('PARAMS_HASH'));
- // Определяю текущий вызов - это ajax?
- $arResult['AJAX'] = (isset($_REQUEST['AJAX']) && isset($_REQUEST['KEY']) && $_REQUEST['KEY'] == $arResult['PARAMS_HASH']) ? true : false;
- /*
- template:
- --------------------------------------
- */
- // в начале файла объявляю переменную булева типа с признаком ajax запроса, если собираемся использовать разные выводы при обычном и аякс запросе
- $isAjaxRequest = $arResult['CUSTOM_AJAX_MODE'] == 'Y' && $arResult['AJAX'] ? true : false;
- ?>
- // в нужном месте добавляю html в начале предполагаемой отдачи ajax
- <!--template-name-ajax-stack-->
- *тут выполняется цикл или прочие конструкторы html, можно использовать if($isAjaxRequest)... для модификации
- <!--template-name-ajax-stack-->
- // и в конце ^
- // в итоге у нас то, что должно отдаваться аяксом обернуто в определенный html комментарий
- // для реализации динамической навигации внутри ajax комментариев вставляю:
- <input type="hidden" class="js-template-name-ajax-key" value="<?=$arResult['PARAMS_HASH']?>">
- // это инпут, в котором будет ключ для доступа к компоненту по ajax
- // так же размещаю там кнопку для "показать ещё":
- <div class="template-name__show-more js-template-name-show-more">
- <?if($arResult['NAV_RESULT']->NavPageNomer < $arResult['NAV_RESULT']->NavPageCount):?>
- <button type="button" class="template-name__ajax-pagen js-template-name-nav-ajax" data-nav="<?=$arResult['NAV_RESULT']->NavNum?>" data-page="<?=$arResult['NAV_RESULT']->NavPageNomer+1?>">
- <span>Показать ещё</span>
- </button>
- <?endif?>
- </div>
- // классы js-... для контроллера у нас
- // в целом в этой конструкции мы проверяем, что есть ещё следующие страницы, и если они есть, то выводим кнопку "Показать ещё", в data-атрибутах которой будут указаны значения кода навигации на странице и значение номера следующей страницы.
- <?php
- /*
- component_epilog:
- ----------------------------------------
- */
- // Определяем метод выполнения шаблона (Это аякс запрос?)
- $isAjaxRequest = (isset($_REQUEST['AJAX']) && isset($_REQUEST['KEY']) && $_REQUEST['KEY'] == $this->arResult['PARAMS_HASH']) ? true : false;
- // Если это аякс
- if ($ajaxRequest && $this->arParams['CUSTOM_AJAX_MODE']) {
- // забираем вывод в переменную
- $content = ob_get_contents();
- // закрываем стек буфферизации
- ob_end_clean();
- // перезапускаем буффер
- $APPLICATION->RestartBuffer();
- // забираем данные из обозначенного стека
- list(, $content_html) = explode('<!--template-name-ajax-stack-->', $content);
- // отправляем данные
- echo $content_html;
- // служебный эпилог
- require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_after.php");
- // выход
- exit();
- }
Add Comment
Please, Sign In to add comment