Вопрос — ОтветРубрика: JavascriptРеализация кнопки "показать ещё" AJAX'ом для результатов поиска
0 +1 -1
Никита спросил 5 месяцев назад

Добрый день. В Битриксе совсем ещё новичок. 
Потребовалось заменить стандартный вывод поиска кнопкой "показать ещё". Готовое решение приобрести возможности нет, закончилась т/п. Собственно разместил такой шаблон в /bitrix/templates/.default/components/bitrix/system.pagenavigation: 

<?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die(); 

$this->setFrameMode(true); 

if (!$arResult["NavShowAlways"]) { 
   if ($arResult["NavRecordCount"] == 0 || ($arResult["NavPageCount"] == 1 && $arResult["NavShowAll"] == false)) 
   { 
       return; 
   } 

$strNavQueryString = ($arResult["NavQueryString"] != "" ? $arResult["NavQueryString"] . "&" : ""); ?> 
<? if ($arResult["bDescPageNumbering"] === true): ?> 
   <? if ($arResult["NavPageNomer"] > 1): ?> 
       <a href="<?= $arResult["sUrlPath"] ?>?<?= $strNavQueryString ?>PAGEN_<?= $arResult["NavNum"] ?>=<?= ($arResult["NavPageNomer"] - 1) ?>" 
          id="infinity-next-page">показать еще</a> 
   <? endif ?> 
<? else: ?> 
   <? if ($arResult["NavPageNomer"] < $arResult["NavPageCount"]): ?> 
       <a href="<?= $arResult["sUrlPath"] ?>?<?= $strNavQueryString ?>PAGEN_<?= $arResult["NavNum"] ?>=<?= ($arResult["NavPageNomer"] + 1) ?>" 
          id="infinity-next-page">показать еще</a> 
   <? endif ?> 
<?endif ?> 

В result_modifier.php шаблона Bitrix:search.page добавил код на сброс буфера страницы: 

if (array_key_exists('is_ajax', $_REQUEST) && $_REQUEST['is_ajax']=='y') { 
   $APPLICATION->RestartBuffer(); 

И в шаблон компонента: 

if (array_key_exists('is_ajax', $_REQUEST) && $_REQUEST['is_ajax']=='y') { 
   die(); 

В конце в скрипты шаблона сайта добавил JS-код: 

$(document).on('ready', function(){ 
   var loading = false; 
   $(window).scroll(function() { 
       if ($('#infinity-next-page').size() && !loading) { 
           if ($(window).scrollTop()+100 >= $(document).height()-$(window).height()) { 
               loading = true; 
               $.get($('#infinity-next-page').attr('href'), {is_ajax: 'y'}, function(data){ 
                   $('#infinity-next-page').after(data); 
                   $('#infinity-next-page').remove(); 
                   loading = false; 
               }); 
           } 
       } 
   }); 
}); 

Но в результате пагинация отрабатывается стандартная. Подскажите, вообще можно ли реализовать этот функционал без загрузки готового решения из магазина, или напрасный труд? И правильно ли я размещал коды? 

(Visited 1 times, 1 visits today)