Уникализация пагинации в DocLister

Доброго времени суток.
Требуется придумать универсальное решение, для возможности изменения названия пагинации в DocLister, с ссылки в папку.
Сейчас пагинация выводиться вот такого вида:
/catalog/?catalog_page=2
или
/catalog/?page=3

А требуется, чтоб была возможность привести ссылку пагинации вот к такому виду:
/catalog/page-3/
/catalog/page-2/
/catalog/page4/
/catalog/index2/
/catalog/index3/

Также необходимо чтоб была возможность название урла менять. Например не page а index

Кто готов решить задачу за денежку?

— Задача решена.
Спасибо за быструю помощь Pathologic.
Вот решение, может кому пригодиться, для уникализации под сео.

1.
Создаем для «prepareWrap», сниппет «unique_pagination».


<?php
$paginate = $_DocLister->getCFGDef('paginate');
$tpl = $_DocLister->getCFGDef('customPageTpl','index-[+num+]/');
if (!empty($paginate)) {
	$paramName = $paginate == 'offset' ? 'start' : 'page';
	$placeholderName = 'pages';
	$dlId = $_DocLister->getCFGDef('id', '');
	if ($dlId !== '') {
		$paramName = $dlId . '_' . $paramName;
		$placeholderName = $dlId . '.' . $placeholderName;
	}
	$pages = $modx->getPlaceholder($placeholderName);
	if (!empty($pages) && preg_match_all('/href="(.+?)"/', $pages, $urls) !== false) {
		foreach($urls[1] as $url) {
			$params = parse_url($url, PHP_URL_QUERY);
			parse_str(html_entity_decode($params), $params);
			if (empty($params[$paramName])) continue;
			$_url = strtok($url, '?');
			$page = $params[$paramName];
			unset($params[$paramName]);
			$params = http_build_query($params);
			$_url .= str_replace('[+num+]', $page, $tpl);
			if ($params) {
				$_url .= '?' . $params;
			}
			$pages = str_replace($url, $_url, $pages);
		}
		$modx->setPlaceholder($placeholderName, $pages);
	}
}



2.
Добавляем в Doclister.
&prepareWrap=`unique_pagination`

3.
Вид ссылки для пагинации указан в коде, по умолчанию.
('customPageTpl','index-[+num+]/');
Ссылки пагинации будут иметь вид: /index-1/ | /index-2/ |…
Нужный вид ссылки, можем указать в коде, либо указать это в параметре шаблона «customPageTpl»

4.
Плагин.
Unique_Pagination
Устанавливаем событие — OnPageNotFound


//OnPageNotFound
$url = $_REQUEST['q'];
if (preg_match_all('/\/index-(\d+?)\/$/', $url, $pages) === 1) {
  $url = str_replace($pages[0][0], '', $url);
  $page = $pages[1][0];
  if ($id = $modx->getIdFromAlias($url)) {
    $_GET['page'] = $page;
    $modx->sendForward($id);
  }
}


Выявленные ошибки:
— Для плагина нужно добавить событие OnWebPageInit, иначе иногда возникает ошибка 404 при переходе по ссылки в пагинации.

6 комментариев

avatar
Я готов.
avatar
Спасибо!
avatar
попробуйте погуглить про .htaccess
avatar
А Вы точно уверены что это решение хорошее для СЕО?! Да на первый взгляд у сайта появится куча новых страниц. Вот только на сколько они будут уникальными? И возьмет их яндекс в индекс, а если возьмет — потом не выкинет? Сейчас гугл и яндекс очень (до тупости) умные. Если затупят — фиг докажешь что ты не верблюд.
avatar
Отлично работает для seo. Надо просто правильно готовить )), не забывать что надо еще уникализировать title + прописать canonical
avatar
Если прописать canonical — то все эти страницы не будут иметь для поисковой системы никакого значения. Она будет воспринимать только ту, адрес которой записан в canonical.
Комментарий отредактирован 2019-07-24 08:27:43 пользователем Aharito
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.