Добрый день!
Обновил сайт с 6 на 7.34. По большей степени все прошло гладко кроме пагинации.
Есть одна единственная запись в блоге, а пейджер показывает 18 пунктов перехода (т. е. последняя страница 18).
Та же петрушка и на страницах таксономии - в некоторых разделах материала на страниц 5, а показывает все те же 18.
Такое ощущение, что это где-то твердо прописано, но в теме пусто. Все модули и движок чистые.
Кто сталкивался, подскажите как решить или в какую сторону копать?
P.S. если выводить через виевс (например включить базовое представление вывода таксономии), все работает правильно.
Комментарии
Скорей всего из-за разницы в pager_query
и ->pagerDefault (7) . По разному рассчитывает page
А где это можно подправить?
Смотрю отчет запросов Devel, все правильно
PagerDefault::execute SELECT COUNT(*) AS expression FROM (SELECT 1 AS expression FROM node n WHERE (type = 'blog') AND (status = '1') ) subquery
PagerDefault::execute SELECT n.nid AS nid, n.sticky AS sticky, n.created AS created FROM node n WHERE (type = 'blog') AND (status = '1') ORDER BY sticky DESC, created DESC LIMIT 5 OFFSET 0
В функции pager_default_initialize (pager.inc) $pager_total = 1;
В функцию темизации theme_pager приходит $pager_total =18;
Где-то по пути меняется эта глобальная переменная $pager_total.
Если в views_plugin_pager_full.inc (modules/views/plugins) закомментировать
global $pager_page_array, $pager_total, $pager_total_items, $pager_limits; - строка 350
Работает правильно, но не отображается пейджер на страницах которые выводятся через views.
Выходит как-то конфликтует.
Попробуйте использовать для запроса count_query, например как здесь
$query = db_select('comment', 'c')->extend('PagerDefault');
$query->addField('c', 'cid');
$query
->condition('c.nid', $node->nid)
->addTag('node_access')
->addTag('comment_filter')
->addMetaData('node', $node)
->limit($comments_per_page);
$count_query = db_select('comment', 'c');
$count_query->addExpression('COUNT(*)');
$count_query
->condition('c.nid', $node->nid)
->addTag('node_access')
->addTag('comment_filter')
->addMetaData('node', $node);
if (!user_access('administer comments')) {
$query->condition('c.status', COMMENT_PUBLISHED);
$count_query->condition('c.status', COMMENT_PUBLISHED);
}
if ($mode === COMMENT_MODE_FLAT) {
$query->orderBy('c.cid', 'ASC');
}
else {
// See comment above. Analysis reveals that this doesn't cost too
// much. It scales much much better than having the whole comment
// structure.
$query->addExpression('SUBSTRING(c.thread, 1, (LENGTH(c.thread) - 1))', 'torder');
$query->orderBy('torder', 'ASC');
}
$query->setCountQuery($count_query);
$cids = $query->execute()->fetchCol();
return $cids;
}
Пока не знаю где это поправить.
Пейджер с 18 страницами показывается везде на всех страницах + страницы администрирования, кроме вывода views.
Алексей, спасибо за помощь. Решилось, хотя почему так работало, не могу понять.
Есть два региона, которые выводятся только на главной в шаблоне page--front. В настройках условий отображения блоков, которые выводятся в этом регионе, ничего не стояло. Предполагалось, что кроме главной они нигде и не выводятся. Поставил условие отображать только на главной, все наладилось.