Иногда бывает необходимость показать над списком элементов и под списком элементов абсолютно разных шаблонов постраничной нумерации. В настройках компонента списка элементов можно передать только один шаблон, но это не проблема. Всегда можно передать второй (и более) шаблон в компонент.
Необходимо внести правки в результирующем массиве шаблона компонента, выводящего список элементов (catalog.section или news.list). Для этого открываем файл result_modifier.php и в нем пишем:
$arResult['NAV_STRING_TOP'] = $arResult['NAV_RESULT']->GetPageNavStringEx( $navComponentObject, $arParams['PAGER_TITLE'], "catalog_pagenavigation_top", $arParams['PAGER_SHOW_ALWAYS'], $this->__component, $arResult['NAV_PARAM'] );
Таким образом, добавляем в результирующий массив ключ для хранения верхней навигационной панели, с нужным нам шаблоном пагинации (catalog_pagenavigation_top, в данном случае). Передаем в компонент заданный в настройках заголовок для пагинации, нужный шаблон, параметры и привязку к родительскому компоненту.
Остается только проработать шаблоны пагинации и можно радоваться!
P.S. Если хотите сделать пагинацию вида /page-#/ вместо стандартного убожества в виде ?PAGEN_1=#, нужно настроить корректный отлов полученной страницы.
Самая простая часть - это в шаблоне компонента пагинации настроить вывод url в нужном формате. Вот так, к примеру, получаются ссылки на предыдущую и следующую страницы:
$curPage = $arResult['NavPageNomer']; $arResult['sUrlPath'] = str_replace('/page='.$curPage,'',$arResult['sUrlPath']); // удаляем параметр со страницей, если он уже есть $arResult['NavQueryString'] = str_replace('filter=Y','',$arResult['NavQueryString']); // тут, если нужно, убираем неугодные параметры // строим ссылки на предыдущую и следующую страницы: if($curPage==1){ $arResult['PREV_PAGE_NUM'] = false; $arResult['PREV_PAGE_URL'] = false; } elseif ($curPage==2){ $arResult['PREV_PAGE_NUM'] = 1; $arResult['PREV_PAGE_URL'] = $arResult["sUrlPath"]; } else { $arResult['PREV_PAGE_NUM'] = $curPage - 1; $arResult['PREV_PAGE_URL'] = $arResult["sUrlPath"].'page='.$arResult["PREV_PAGE_NUM"].'/'; } if($curPage>=$arResult['NavPageCount']){ $arResult['NEXT_PAGE_NUM'] = false; $arResult['NEXT_PAGE_URL'] = false; } else { $arResult['NEXT_PAGE_NUM'] = $curPage + 1; $arResult['NEXT_PAGE_URL'] = $arResult["sUrlPath"].'page='.$arResult["NEXT_PAGE_NUM"].'/'; } if(strlen($arResult['NavQueryString'])>0){ if($arResult['PREV_PAGE_URL']) $arResult['PREV_PAGE_URL'] .= '?'.$arResult['NavQueryString']; else if($arResult['NEXT_PAGE_URL']) $arResult['NEXT_PAGE_URL'] .= '?'.$arResult['NavQueryString']; }
Сложнее дело обстоит с определением того, какая сейчас страница перед выводом списка элементов. Вся сложность связана с тем, что параметр, в котором хранится текущий номер страницы может быть PAGEN_1, PAGEN_2 ... и так до бесконечности - сколько компонентов со списком выведено на странице уже, столько и будет. Для того, чтобы определить, в какой переменной хранится текущий номер пагинации, можно воспользоваться следующим кодом:
global $NavNum; // номер пагинации предыдущего списка элементов $NextNavNum = (int)$NavNum + 1; // это номер пагинации следующего списка (нашего) $NavName = 'PAGEN_'.$NextNavNum; global ${$NavName}; // глобальная переменная, в которую нужно положить номер страницы ${$NavName} = (int)$pageNum;
Таким образом, мы передадим в компоненты значение номера пагинации, хранящегося в переменной $pageNum (считывание данного значения из url оставлю вам на самостоятельный разбор - универсального варианта пока не придумал).
P.P.S. Если на странице выводятся две выборки, например, по инфоблокам (3 компонента) и при этом постраничный контент для каждого блока загружается отдельно Аяксом, то возникает проблема с переменной PAGEN_(N), где (N) - номер постраничной навигации на общей странице. В первом случае это, ну скажем, - 3 (третий компонент на странице), а в частном случае - это 1 (первый и единственный компонент на отдельной странице).
Для решения этой задачи можно модифицировать глобальную переменную $GLOBALS["NavNum"]. Как один из вариантов, при условии что AJAX подгружается методом POST и на странице 2 компонента, в файле с вызовом второго компонента пишем:
if ($_SERVER['REQUEST_METHOD'] == "POST") { $GLOBALS["NavNum"]++; }
Подайте заявку на разработку сайта на базе готового решения от компании 1С-Битрикс или одного из партнеров компании. Максимально подробно опишите, чему будет посвящен сайт, если это интернет-магазин - что он будет продавать, нужна ли мультиязычность, будут ли разные типы цен (розница, опт, крупный опт), будет ли интеграция с 1С, будет ли выгрузка товаров на различные торговые площадки...
Вы можете подать заявку на сопровождение вашего сайта на базе 1С-Битрикс. Сопровождение включает в себя: проверка актуальности обновлений сайта, проверка актуальности резервной копии, консультации по сайту. Опишите в заявке, какие еще объемы планируются на сопровождении и на какой срок вы планируете заключить договор на сопровождение - мы подберем подходящий вам бюджет на сопровождение
Вы можете подать заявку на выполнение определенного объема работ по сайту. Опишите в заявке объем работ. Это может быть разработка какого-то нового функционала, доработки по имеющемуся функционалу, доработки под требования сео-специалистов. На основании заявки вам будет сформирован бюджет работ, а также названы сроки на выполнение тех или иных работ.