Наверх

Решаем проблему с 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).


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

  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
        Да, правлю пока) нашел еще проблемку — как вывести первую страницу списка вместо пустой страницы
        1. Александр Фоменко 07 декабря 2018, 11:23 # 0
          Конструкция приводит к 502 гет эвей. Не подскажите в чем дело?
          1. Илья Уткин 07 декабря 2018, 11:24 # 0
            Используйте pdoPage — в нём эта проблема решена по умолчанию, без танцев с бубном.
            1. Александр Фоменко 07 декабря 2018, 11:28(Комментарий был изменён) # 0
              Так я его и использую. По умолчанию он перекидывает на первую страницу пагинации, а мне надо что бы 404 выдавал

              Я так понимаю проблема конкретно в сниппете сендЕррор404, если его убрать из кода, то отрабатывается все нормально
              1. Илья Уткин 07 декабря 2018, 11:31 # 0
                Попробуй такой код сниппета:
                <?php
                $modx->sendErrorPage();
                1. Александр Фоменко 07 декабря 2018, 11:41 # 0
                  Загружает, но на любой странице портфолио выдает 404 ))
                  1. Илья Уткин 07 декабря 2018, 11:41 # 0
                    Значит, этот способ теперь не работает)
                    1. Александр Фоменко 07 декабря 2018, 12:11 # 0
                      :(
                      1. Александр Фоменко 07 декабря 2018, 16:16 # 0
                        если что ))
                        modx.pro/help/17037

        Авторизация

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


        Шаблоны MODX

        1 2 Дальше »

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