Несколько мелких доработок для весьма полезного плагина SEO pagination

Я думаю, что практически каждый MODX разработчик знаком с замечательным плагином SEO pagination, за авторством Temus, который позволяет приводить ссылки генерируемых Ditto страниц пагинации в человекопонятный вид. В данной статье вы найдете немного измененный вариант.

Отличия от оригинала:

  • Изменен вид генерации страницы с http://site.url/ditto_id/page-2.html на http://site.url/ditto_idpage-2.html (при одном Ditto – http://site.url/page-2.html)однако необходимо проверить возможность размещения более одного статического пейджинга для Ditto (если не получится, то как вариант – использовать подгрузку пагинации через Ajax для других блоков);
  • При генерации страницы пагинации в мета-тег canonical также генерируется текущий URL;
  • При генерации страницы пагинации в мета-тег robots записывается директива noindex, follow для исключения повторного индексирования текста (если таковой имеется);
  • Прописаны правила для нормальной работы SVG в режиме inline вставки в html код;
  • Ссылка на первую страницу обрезается до вида ссылки на категорию.

 

/*<?php*/
/**
* SEO pagination
*
* Create SEO pagination for Ditto
*
* @category plugin
* @version 1.1.1
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License (GPL)
* @author Temus
* @internal @properties &dittoID=Ditto ID;text; &display=Display;text;10;
* @internal @events OnPageNotFound,OnWebPagePrerender
*/

$dittoID = !empty($dittoID) ? array_map(create_function('$v','return $v."_";'),explode(',',$dittoID)) : array('');
$display = !empty($display) ? array_combine($dittoID,explode(',',$display)) : array(''=>10);
$suffix = $modx->config['friendly_url_suffix'];
$scp_array = array($modx->getConfig("site_start"), $modx->getConfig("error_page"));

$e = &$modx->Event;
switch($e->name) {
case 'OnPageNotFound':
if (preg_match('/(.*)\/(.*?)page-([\d]+)'. (($suffix=='/') ? '\/' : $suffix) .'$/', $_SERVER['REQUEST_URI'], $res)) {
$alias = $res[1] ? substr($res[1], strlen(MODX_BASE_URL)) : array_search($modx->config['site_start'],$modx->documentListing);
if (isset($modx->documentListing[$alias])) {
$docid = $modx->documentListing[$alias];
if ($res[3]==1) {
$url = $modx->makeUrl($docid);
$modx->sendRedirect($url,0,'REDIRECT_HEADER','HTTP/1.1 301 Moved Permanently');
}
else {
$id=(count($dittoID)>1) ? $res[2] : $dittoID[0];
if (!isset($display[$id])) break;
$_GET[$id.'start'] = $display[$id]*($res[3]-1);
$modx->sendForward($docid);
}
}
}
break;
case 'OnWebPagePrerender':
foreach ($dittoID as $id) {
$prefix=(count($dittoID)>1) ? $id : '';
preg_match_all('/href(?:.*?)\?(.*?)'.$id.'start=([\d]+)[\"\']/',$modx->documentOutput,$res);
for ($i=0; $i<count($res[0]); $i++) {
$tmp = $res[0][$i];
$page=$res[2][$i]/$display[$id]+1;
$tmp = str_replace('?'.$res[1][$i].$id.'start=','/'.$prefix.'page-',$tmp);
if ($suffix) $tmp = str_replace($suffix.'/','/',$tmp);
$tmp = str_replace('//','/',$tmp);
$tmp = str_replace($res[2][$i],$page.$suffix,$tmp);
$modx->documentOutput = str_replace($res[0][$i],$tmp,$modx->documentOutput);
}
if (isset($_GET[$id.'start'])) {
$page=intval($_GET[$id.'start'])/$display[$id]+1;
$modx->documentOutput = preg_replace("/<title>(.*?)<\/title>/si","<title>\\1 - страница $page</title>", $modx->documentOutput);
/* Заменяем canonical */
$modx->documentOutput = preg_replace("/<link rel=\"canonical\" href=\"(.*?)\" \/>/si","<link rel=\"canonical\" href=\"".$modx->makeUrl($modx->documentIdentifier, '', '', 'full')."page-".$page.".html\"/>", $modx->documentOutput);
/* Заменяем robots */
$modx->documentOutput = preg_replace("/<meta name=\"robots\" content=\"(.*?)\" \/>/si","<meta name=\"robots\" content=\"noindex, follow\" />", $modx->documentOutput);
/* Заменяем в path inline-SVG (кроме 404 и главной) */
if (in_array($modx->documentIdentifier, $scp_array)) {
$modx->documentOutput = preg_replace("/fill=\"url\((.*?)#/si","fill=\"url(".$modx->makeUrl($modx->documentIdentifier, '', '', 'full')."page-".$page.".html#", $modx->documentOutput);
$modx->documentOutput = preg_replace("/filter=\"url\((.*?)#/si","filter=\"url(".$modx->makeUrl($modx->documentIdentifier, '', '', 'full')."page-".$page.".html#", $modx->documentOutput);
}
/* Обрезаем ссылку на первую страницу */
$modx->documentOutput = str_replace("page-1.html","", $modx->documentOutput);
}
}
break;
}

 

Юмор: Заходит как-то сеошник в ресторан, купить алкогольные напитки, клубы, лучшие бары в Минске, заказать банкет в ресторан…

×
Предложите тему или интересную задачу для следующей статьи:
×

Ждем входящих данных...