Наверх

Решаем проблему с getPage и несуществующими страницами

Недавно в блоге bezumkin'а подняли тему генерации страниц сниппетом getPage:
подскажите по поводу пагинации. допустим имею две страницы: page 1, page 2.
но если в адресную строку ввести несуществующий адрес/?page=N то открывается пустая страница, а не 404?
кто нибудь решал этот вопрос?

На самом деле проблема надуманная, но порой проще сделать так, как хочет SEO-шник, чем убеждать его в своей правоте.

Эта проблема решается довольно просто средствами MODX'а:

Создадим сниппет sendError404:
<?php
$_GET['page'] = 1;
$modx->sendForward($modx->resource->id, 'HTTP/1.1 404 Not Found');

И на странице с вызовом getPage поместим результаты вывода в плейсхолдер и будем проверять номер страницы. Если номер страницы больше, чем всего страниц, будем запускать наш сниппет, который выдаст заголовок 404:
[[!getPage?
    &toPlaceholder=`resList`
    &element=`getResources`
    &tpl=`tpl.News.list.row`
]]

[[[[!+page:gt=`[[+pageCount]]`:then=`sendError404`:else=`+resList`]]]]

[[!+page.nav]]

Посмотреть в работе вы можете здесь: ilyaut.ru/news/?page=6 (страница выдает код ошибки 404).


4 комментария

  1. Владимир Гришин 30 июля 2013, 15:31(Комментарий был изменён) # 0
    тогда уж наверно лучше &toPlaceholder=`resList`, а :notempty=`` вообще убрать
    щас еще потестю)
    Спасибо за решение! просто и работает!
    1. Илья Уткин 30 июля 2013, 15:32(Комментарий был изменён) # 0
      Ну да, или так)
    2. Владимир Гришин 30 июля 2013, 15:44(Комментарий был изменён) # 0
      чет все пропало Илюх или ты отредактировал?
      1. Илья Уткин 30 июля 2013, 15:46(Комментарий был изменён) # 0
        Да, правлю пока) нашел еще проблемку — как вывести первую страницу списка вместо пустой страницы

      Авторизация

      через сервис Loginza:

      Подписка или RSS

      Буду присылать новые статьи — никакого спама



      Шаблоны MODX

      1 2 Дальше »

      Объектная
      модель
      MODX