Всем привет.
Кто ни будь задавался вопросом, как реализовать постраничность в убывающем порядке? Чтобы страницы шли не по возрастанию (1, 2, 3, 4,...,500), а по убыванию (500, 499, 498, 497,...,1).
С точки зрения ценности страниц пагинации для поисковых систем, постраничность в убывающем порядке является более удачной, так как в таком случае на страницах будет не меняющийся, статичный контент.
Также интересует, если получится это реализовать, как внедрить новый тип пагинации в отдельный плагин, либо сделать её отдельными плагином, чтобы при помощи него, пагинацию можно было наследовать в других плагинах, не внося изменений в файл движка Viewer.class.php, дабы не усложнять себе жизнь при будущем обновлении.
Вот код из \engine\modules\viewer\Viewer.class.php:
/**
* Формирует постраничный вывод
*
* @param int $iCount Общее количество элементов
* @param int $iCurrentPage Текущая страница
* @param int $iCountPerPage Количество элементов на одну страницу
* @param int $iCountPageLine Количество ссылок на другие страницы
* @param string $sBaseUrl Базовый URL, к нему будет добавлять постикс /pageN/ и GET параметры
* @param array $aGetParamsList Список GET параметров, которые необходимо передавать при постраничном переходе
* @return array
*/
public function MakePaging($iCount,$iCurrentPage,$iCountPerPage,$iCountPageLine,$sBaseUrl,$aGetParamsList=array()) {
if ($iCount==0) {
return false;
}
$iCountPage=ceil($iCount/$iCountPerPage);
if (!preg_match("/^[1-9]\d*$/i",$iCurrentPage)) {
$iCurrentPage=1;
}
if ($iCurrentPage>$iCountPage) {
$iCurrentPage=$iCountPage;
}
$aPagesLeft=array();
$iTemp=$iCurrentPage-$iCountPageLine;
$iTemp = $iTemp<1 ? 1 : $iTemp;
for ($i=$iTemp;$i<$iCurrentPage;$i++) {
$aPagesLeft[]=$i;
}
$aPagesRight=array();
for ($i=$iCurrentPage+1;$i<=$iCurrentPage+$iCountPageLine and $i<=$iCountPage;$i++) {
$aPagesRight[]=$i;
}
$iNextPage = $iCurrentPage<$iCountPage ? $iCurrentPage+1 : false;
$iPrevPage = $iCurrentPage>1 ? $iCurrentPage-1 : false;
$sGetParams='';
if (is_string($aGetParamsList) or count($aGetParamsList)){
$sGetParams='?'.(is_array($aGetParamsList) ? http_build_query($aGetParamsList,'','&') : $aGetParamsList);
}
$aPaging=array(
'aPagesLeft' => $aPagesLeft,
'aPagesRight' => $aPagesRight,
'iCount' => $iCount,
'iCountPage' => $iCountPage,
'iCurrentPage' => $iCurrentPage,
'iNextPage' => $iNextPage,
'iPrevPage' => $iPrevPage,
'sBaseUrl' => rtrim($this->Tools_Urlspecialchars($sBaseUrl),'/'),
'sGetParams' => $sGetParams,
);
/**
* Избавляемся от дублирования страниц с page=1
*/
if ($aPaging['iCurrentPage']==1) {
$this->SetHtmlCanonical($aPaging['sBaseUrl'].'/'.$aPaging['sGetParams']);
}
return $aPaging;
}