Необходимо внести правки в результирующем массиве шаблона компонента, выводящего список элементов (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"]++;
} 
