Запрос пейджера D7 - Слишком много страниц в пейджере

У меня есть 3 узла типа контента «mycontenttype». Я пытаюсь настроить сортируемую/страничную таблицу с ограничением в 10 элементов на странице.

В этом коде $nids возвращает только 3 узла. На самом деле я запускаю node_load_multiple($nids), а затем перебираю эти узлы, чтобы создать переменную $rows. Появляются только 3.

Проблема: пейджер отображает 4 страницы.

Ожидание: не должно быть рендеринга пейджера, потому что у меня нет 10 узлов в запросе или запросе подсчета.

Мы будем очень признательны за любое понимание.

<?php
function mymodule_create_a_pager_table() {

  $query = db_select('node', 'n')->extend('PagerDefault')->extend('TableSort')->element('my_custom_id');
  $query->fields('n', array('nid'));

  $query->condition('n.type', 'mycontenttype');
  $query->condition('n.status', 1);

  $count_query = clone $query;
  $query->setCountQuery($count_query);

  $query->limit(10);

  $header = array(array('data' => 'Title', 'sort' => 'asc', 'field' => 'n.title'), 'column 2', 'column 3');
  $query->orderByHeader($header);

  $nids = $query->execute()->fetchCol();

  // ... building $rows array for display only here

  $output = theme('table', array('header'=> $header, 'rows' => $rows));
  $output .= theme('pager', array('element' => 'my_custom_id', 'quantity' => 10));

  return $output;
}
?>

Вывод

Узел 1 Название | col2 значение | столбец3 знач.

Узел 2 Заголовок | col2 значение | столбец3 знач.

Узел 3 Заголовок | col2 значение | столбец3 знач.

1 2 3 4 следующая › последняя »


person Coder1    schedule 22.04.2011    source источник


Ответы (1)


Я думаю, что элемент должен быть целым числом.

Постарайтесь не использовать как вызов ->element(), так и любые аргументы для theme('pager').

Кроме того, ваш запрос на подсчет неверен. Только не определяйте это, это будет сделано автоматически для вас. Вероятно, это настоящая причина вашей проблемы, а не элемент.

Выполняется запрос на подсчет, и предполагается, что первое возвращаемое значение (fetchField()) является количеством элементов. Ваш запрос, вероятно, возвращает nid, который ошибочно принимается за число. Так что просто оставьте это, и Drupal автоматически создаст для вас правильный запрос на подсчет.

person Berdir    schedule 22.04.2011
comment
Спасибо Бердир. В примерах, которые я видел, был запрос count, и это то, что отбрасывало его. Не уверен, что элемент имеет какое-то отношение к этому, поскольку он отлично работает с этим, но я добавил это только потому, что думал, что получаю неправильный пейджер. Я ценю помощь! - person Coder1; 22.04.2011
comment
Вам нужно определить собственный запрос только в том случае, если запрос по умолчанию не работает. А в Drupal 7 он может работать даже с условиями GROUP BY. Однако в этом случае он просто выполняет SELECT COUNT(*) FROM ($the_normal_query). Это всегда работает, но излишне медленно, если есть, например, функции агрегации и т.д. Таким образом, для этих случаев вы можете определить собственный запрос подсчета. Если вы сделаете это, вам нужно будет убедиться, что он возвращает только один результат — общее количество строк для фактического запроса. - person Berdir; 22.04.2011