【问题标题】:D7 Pager Query - Too many pages in the pagerD7 寻呼机查询 - 寻呼机中的页面过多
【发布时间】:2011-04-22 04:40:02
【问题描述】:

我有 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 值 | col3 值

节点 2 标题 | col2 值 | col3 值

节点 3 标题 | col2 值 | col3 值

1 2 3 4 下一个 › 最后一个 »

【问题讨论】:

    标签: drupal drupal-7


    【解决方案1】:

    我认为元素应该是一个整数。

    尽量让 ->element() 调用和 theme('pager') 的任何参数都离开。

    另外,您的计数查询是错误的。也不要定义它,它会自动为您完成。这可能是您的问题的实际原因,而不是元素问题。

    count 查询被执行,第一个返回值 (fetchField()) 被假定为元素的数量。您的查询可能返回一个 nid 并且被误认为是数字。所以不要管它,Drupal 会自动为你构建一个正确的计数查询。

    【讨论】:

    • 谢谢伯迪尔。我见过的例子中有 count 查询,这就是它被抛弃的原因。不确定元素与它有什么关系,因为它可以正常工作,但我只添加了这些东西,因为我认为我得到了错误的寻呼机。感谢您的帮助!
    • 如果默认查询不起作用,您只需要定义一个自定义查询。而在 Drupal 7 中,它甚至可以处理 GROUP BY 条件。但是,在这种情况下,它只是执行 SELECT COUNT(*) FROM ($the_normal_query)。这总是有效的,但如果有聚合函数等,它会变得非常慢。因此,对于这些情况,您可以定义自定义计数查询。如果你这样做,你必须确保它只返回一个结果——实际查询的总行数。
    猜你喜欢
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-03
    相关资源
    最近更新 更多