Как изменить rel="canonical" в "Человекопонятной навигации", выполненной по инструкции pdoPage?
        Подскажите, как исправить следующее.
Воспользовался инструкцией "Человекопонятная навигация"
В результате при переходе на страницу отличную от первой в исходном коде страницы meta тег rel=«canonical» ведет не на каноническую страницу (как было до изменений без параметров page-№), а на текущую, и выглядит следующим образом:
Немного переделал под свои нужды URLы страниц пагинации, но сути не меняет, rel=«canonical» все равно ведет на текущую страницу:
Подскажите, как сделать, чтобы rel=«canonical» при нахождении на любой странице пагинации вел на первую страницу пагинации, вот так:
Вот мой код шаблона:
Заранее, благодарю!
    
    
                                                                                
            Воспользовался инструкцией "Человекопонятная навигация"
В результате при переходе на страницу отличную от первой в исходном коде страницы meta тег rel=«canonical» ведет не на каноническую страницу (как было до изменений без параметров page-№), а на текущую, и выглядит следующим образом:
<link rel="canonical" href="https://mysite.ru/category/page-2"/>
<link rel="canonical" href="https://mysite.ru/category/page-3"/>Немного переделал под свои нужды URLы страниц пагинации, но сути не меняет, rel=«canonical» все равно ведет на текущую страницу:
<link rel="canonical" href="https://mysite.ru/category/page/2/"/>
<link rel="canonical" href="https://mysite.ru/category/page/3/"/>Подскажите, как сделать, чтобы rel=«canonical» при нахождении на любой странице пагинации вел на первую страницу пагинации, вот так:
<link rel="canonical" href="https://mysite.ru/category/"/>Вот мой код шаблона:
[[!pdoPage@MyPagination?
&element=`pdoResources`
&limit=`3`
&parents=`{$_modx->resource.id}`
&hideContainers=`1`
&fastMode=`1`
&sortby=`publishedon`
&sortdir=`ASK`
&pageLinkScheme=`[[+pageVarKey]]/[[+page]]/`
&includeTVs=`img_sh,alt_img_sh`
&tpl=`@FILE chunks/sh/sh.tpl` 
]]	  
	  
[[!+page.nav]]Код плагина:<?php
// Реагируем только на событие OnPageNotFound
if ($modx->event->name == 'OnPageNotFound') {
    // Определяем ключ запроса из настроек
    $req = $modx->getOption('request_param_alias');
    // Ловим нужный ключ страницы
    $pageVarKey = 'page';
    // Если в запросе повторяется наш шаблон "pageVarKey-page", то работаем дальше
    if (preg_match("#.*?(/{$pageVarKey}/(\d+))/#", $_REQUEST[$req], $matches)) {
        // Отрезаем ЧПУ строку и получаем точный адрес текущей страницы
        $uri = str_replace($matches[1], '', $matches[0]);
        // Ищем страницу по этому адресу
        $id = 0;
        // Сначала как есть, со слешем на конце
        if (!$id = $modx->findResource($uri)) {
            // Если не находим - то пробуем отрезать слэш и ищем повторно
            $id = $modx->findResource(rtrim($uri, '/'));
        }
        // Если ресурс найден
        if ($id) {
            // Добавляем номер страницы в глобальные массивы, чтобы pdoPage их там увидел
            $_GET[$pageVarKey] = $_REQUEST[$pageVarKey] = $matches[2];
            // И загружаем эту страницу
            $modx->sendForward($id);
        }
        // Если ресурс не был найден - ничего не делаем, возможно запрос поймает другой плагин
    }
}Заранее, благодарю!
Комментарии: 21
                Неужели нет решения?            
                    
                Здравствуйте!
Пробывали установить в шаблоне адрес, а в вызове снипета установить &setMeta=0?
Добавить в head —
                    Пробывали установить в шаблоне адрес, а в вызове снипета установить &setMeta=0?
Добавить в head —
<link rel="canonical" href="[[~[[*id]]? &scheme=`full`]]" />А в вызов pdoPage добавить параметр — &setMeta=0Надеюсь был полезен)))            
                Сейчас попробую.            
                    [[!pdoPage?
&любые параметры вызова
&setMeta=`0`
]]Ну а тег head редактируете руками…            
                Этот вариант отключает, например, если находишься на второй странице отключаются мета теги:
                    <link rel="prev" href="https://mysite.ru/category/"/>
<link rel="next" href="https://mysite.ru/category/page/3/"/>И <link rel="canonical" href="[[~[[*id]]? &scheme=`full`]]" />будет висеть на каждой странице шаблона, даже там, где нет пагинации.            
                Так ведь 
Так понимаю должно получиться:
                    <link rel="canonical" href="[[~[[*id]]? &scheme=`full`]]" />дает Вам каноничную ссылку на всех страницах категории. Ведь Вы этого хотели?Так понимаю должно получиться:
<link rel="canonical" href="https://mysite.ru/category/"/>на всех страницах…            
                Да, но при такой реализации следующие мета-теги не регистрируются в head:
                    <link rel="prev" href="https://mysite.ru/category/"/>
<link rel="next" href="https://mysite.ru/category/page/3/"/>            
                Так Вам что нужно видить в head?
Не очень Вас понимаю…
                    <link rel="prev" href="https://mysite.ru/category/"/>
<link rel="next" href="https://mysite.ru/category/page/3/"/>или<link rel="canonical" href="https://mysite.ru/category/"/>?Не очень Вас понимаю…
                pdoPage (БЕЗ ПЕРЕДЕЛКИ ПО ВЫШЕУКАЗАННОЙ ИНСТРУКЦИИ) регистрирует в head если находиться, например, на 2 странице:
Надо сделать, чтобы было как до переделки, чтобы rel=«canonical» указывал на страницу категории без page№
Где-то в коде плагина надо внести изменения, но к сожалению не особо силен в php, конечно если «долго мучиться, что нибудь получится», по крайней мере всегда получалось если ответа не находилось.
                    <link rel="canonical" href="https://mysite.ru/category/"/>
<link rel="prev" href="https://mysite.ru/category/"/>
<link rel="next" href="https://mysite.ru/category/?page=3"/>Я переделал по инструкции, с rel=«prev» и rel=«next» все нормально, выводит правильно, а rel=«canonical» выводится таким образом, что на какой бы странице не находился, канонический адрес указывает на текущую страницу, а не на главную страницу категории.Надо сделать, чтобы было как до переделки, чтобы rel=«canonical» указывал на страницу категории без page№
Где-то в коде плагина надо внести изменения, но к сожалению не особо силен в php, конечно если «долго мучиться, что нибудь получится», по крайней мере всегда получалось если ответа не находилось.
                Странно. Я ведь не просил запутать еще больще)))
Покажите что у Вас сейчас и что Вы хотите видить…
После будем разбираться. И думаю php нам не понадобится)
                    Покажите что у Вас сейчас и что Вы хотите видить…
После будем разбираться. И думаю php нам не понадобится)
                Если я верно представляю Вашу проблему, то можно поковыряться с такой конструкцией:
Подробнее:
                    [[*id:is=`8`:or:is=`9`:then=``:else=`<link rel="canonical" href="[[~[[*id]]? &scheme=`full`]]" />`]]Ее изменить как нужно и добавить зависимости…Подробнее:
https://docs.modx.pro/sistema/osnovyi/filtryi-vvoda-i-vyivoda            
                У меня сейчас:
Хочу чтобы было:
Если делать по Вашему варианту, отключить регистрацию мета-тегов — &setMeta=`0` и в head прописать:
                    <link rel="canonical" href="https://mysite.ru/category/page/2/"/>
<link rel="prev" href="https://mysite.ru/category/"/>
<link rel="next" href="https://mysite.ru/category/page/3/"/>Хочу чтобы было:
<link rel="canonical" href="https://mysite.ru/category/"/>
<link rel="prev" href="https://mysite.ru/category/"/>
<link rel="next" href="https://mysite.ru/category/page/3/"/>Если делать по Вашему варианту, отключить регистрацию мета-тегов — &setMeta=`0` и в head прописать:
<link rel="canonical" href="[[~[[*id]]? &scheme=`full`]]" />то останется только:<link rel="canonical" href="https://mysite.ru/category/"/>            
                Попробуйте что то типа:
Остальные 2 по аналогии)
                    <link rel="canonical" href="[[~[[*id]]? &scheme=`full`]]" />
<link rel="prev" href="[[~[[*id]]? &scheme=`full`]][[+page:ne=`1`:then=`/page/[[+page:add]]`/]]">
<link rel="next" href="[[~[[*id]]? &scheme=`full`]][[+page:ne=`1`:then=`/page/[[+page:decr]]`]]">Ну и соответственно отключите setMeta в основном вызове…Остальные 2 по аналогии)
                По крайнему Вашему варианту на любой странице в коде вот это:
Спасибо за участие, но думаю предложенная концепция не подойдет, так как 3 эти мета-тега постоянно будут в исходном коде. В то время как при нахождении на первой и последней странице должно быть 2 мета-тега.
То есть,
если находиться на 1 странице должно быть:
Поэтому без правки php кода, думаю, не обойтись.
                    <link rel="canonical" href="https://mysite.ru/uslugi/" />
<link rel="prev" href="https://rmysite.ru/uslugi/">
<link rel="next" href="https://mysite.ru/uslugi//page/-1">Спасибо за участие, но думаю предложенная концепция не подойдет, так как 3 эти мета-тега постоянно будут в исходном коде. В то время как при нахождении на первой и последней странице должно быть 2 мета-тега.
То есть,
если находиться на 1 странице должно быть:
<link rel="canonical" href="https://rmysite.ru/uslugi/"/>
<link rel="next" href="https://rmysite.ru/uslugi/page/2/"/>Если находиться на последней (3-последняя страница), то должно быть:<link rel="canonical" href="https://rmysite.ru/uslugi/"/>
<link rel="prev" href="https://rmysite.ru/uslugi/page/2/"/>Поэтому без правки php кода, думаю, не обойтись.
                Ну тут смотрите сами, как удобно…
Просто к примеру можно один из тегов можно не выводить при нахождении к примеру на первой или второй странице… Проблема только в настройке ведь…
                    Просто к примеру можно один из тегов можно не выводить при нахождении к примеру на первой или второй странице… Проблема только в настройке ведь…
                Проблема в том, что у разных категорий могут быть свои шаблоны, это придется там где пагинация, прописывать каждый раз в шаблоне.
Хочется сделать в одном месте и там где пагинация, чтобы это включалось.
Думаю, как-то в плагине надо прописать условие, что если это rel=«canonical» то не применять /page/№/
                    Хочется сделать в одном месте и там где пагинация, чтобы это включалось.
Думаю, как-то в плагине надо прописать условие, что если это rel=«canonical» то не применять /page/№/
                или хотя бы один раз прописать в шаблоне по вашему варианту, но с условиями, что если ресурс с пагинацией, то выводить нужное…            
                    Думаю, как-то в плагине надо прописать условие, что если это rel=«canonical» то не применять /page/№/Так в статье, которую я указывал Выше и есть такие примеры вывода…
                Добрый день!
Удалось найти решение?
Также столкнулся с проблемой неправильного формирования canonical при включение «человекопонятной навигации» в pdoPage
                    Удалось найти решение?
Также столкнулся с проблемой неправильного формирования canonical при включение «человекопонятной навигации» в pdoPage
                Работает, если только в сиппете PdoPage заменить строку 244:
                    $modx->regClientStartupHTMLBlock('<link rel="canonical" href="' . $canurl . '"/>');на$modx->regClientStartupHTMLBlock('<link rel="canonical" href="' . $pdoPage->makePageLink($canurl) . '"/>');но при очередном обновлении это все слетит =(            
                Спасибо большое)
Все чудесным образом получилось!)
                    Все чудесным образом получилось!)
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.