[Решено] Views 3 pager. 404 когда ?page= больше количества страниц

Главные вкладки

Аватар пользователя SKIT54 SKIT54 23 июля 2012 в 20:42

Всем привет!
Ситуация следующая: Есть раздел новостей, на каждой странице по 5 нод. Всё выводиться норм. Всего получается 4 страницы. Адрес последней страницы: /news?page=3.
Но вот если подставить значение page больше чем всего нод показывается пустая страница с пейджером активной последней страницы.

Т.е. по адресу /news?page=4 | /news?page=5 | /news?page=6 и т.д. я вижу пустую активную 4ю страницу.

Вопрос: как сделать что бы по этим адресам была страница 404 not found??

Весь гугл уже перерыл, ничего похожего не нашел...( Может кто сталкивался?

Drupal 7.14, Views 7.x-3.3

Комментарии

Аватар пользователя xxandeadxx xxandeadxx 23 июля 2012 в 21:11

делал так:

<?php
/**
 * Implements hook_views_pre_render()
 */
function modulename_views_pre_render(&$view) {
  if (
$view->total_rows && $view->query->offset && $view->query->offset $view->total_rows) {
    
drupal_not_found();
  }
}
?>
Аватар пользователя Skeptik Skeptik 9 октября 2015 в 12:47

В таком виде друпал после загрузки страницы ошибки 404 продолжает грузить пустую страницу. Поэтому, полагаю, правильнее будет так:
<?php
/**
* Implements hook_views_pre_render()
*/
function modulename_views_pre_render(&$view) {
if ($view->total_rows && $view->query->offset && $view->query->offset > $view->total_rows) {
drupal_not_found();
exit;
}
}
?>

Аватар пользователя Skeptik Skeptik 11 октября 2015 в 12:11

Нашел косяк в этом хуке. Если на последней странице количество материалов равно максимальному числу для страницы, то при попытке открыть следующую за последней страницу, открывается пустая страница с пагинатором - таким, как как на последней странице. Есть идеи, как это можно исправить?

Аватар пользователя Skeptik Skeptik 11 октября 2015 в 12:20

Вроде бы так работает правильно:
<?php
/**
* Implements hook_views_pre_render()
*/
function modulename_views_pre_render(&$view) {
if ($view->total_rows && $view->query->offset && $view->query->offset >= $view->total_rows) {
drupal_not_found();
exit;
}
}
?>