Почему в ModX 3 при формировании блока постраничного вывода через pdoPage генерируются некорректные ссылки?
Пытаюсь сделать вывод новостей на сайте (через Collections).
<div class="container">
<div class="row">
[[!pdoPage?
&tpl=`listItem`
&parents=`[[*id]]`
&limit=`10`
&pageLinkScheme=`/[[+pageVarKey]]-[[+page]]`
]]
</div>
<div class="row mt-3">
<div class="col">
[[!+page.nav]]
</div>
</div>
</div>
Пагинация выводится правильно, но вот ссылки на страницы из Пагинации почему-то формируются некорректно. Они формируются не относительно родителя, а относительно текущий страницы. Например, если открыть страницу page-3, то ссылка на страницу 2 будет иметь вид novosti/page-3/page-2. В чём может быть причина? Комментарии: 7
Может следуют тут прописать полную ссылку:
&pageLinkScheme=`/[[+uri]]/[[+pageVarKey]]-[[+page]]`
[[+uri]] — пустая переменная
Ну так, опечатался:
[[*uri]]
При использовании &pageLinkScheme=`/[[*uri]]/[[+pageVarKey]]-[[+page]]` дублируется алиас родителя: novosti/novosti/page-3
Проблема вообще странная: каждый новый переход по ссылкам пагинации подставляет page-N к текущему адресу, а не к родительском. В итоге URL получается novosti/page-3/page-2/page-4/page-5 и т.д.
Проблема вообще странная: каждый новый переход по ссылкам пагинации подставляет page-N к текущему адресу, а не к родительском. В итоге URL получается novosti/page-3/page-2/page-4/page-5 и т.д.
Уберите вообще pageLinkScheme
Нельзя, т.к. используется ЧПУ
Решается добавлением в плагин обработки OnPageNotFound костыля:
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, '/'));
}
$_REQUEST[$req] = str_replace('/', '', $uri); // КОСТЫЛЬ
if ($id) {
$_GET[$pageVarKey] = $_REQUEST[$pageVarKey] = $matches[2];
$modx->sendForward($id);
}
}
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, '/'));
}
$_REQUEST[$req] = str_replace('/', '', $uri); // КОСТЫЛЬ
if ($id) {
$_GET[$pageVarKey] = $_REQUEST[$pageVarKey] = $matches[2];
$modx->sendForward($id);
}
}
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.