2011-04-22 147 views
1

我有3个节点的内容类型'mycontenttype'。我试图设置一个可排序/可分页的表,每个页面限制为10个项目。D7寻呼机查询 - 寻呼机页面太多

在这段代码中,$ 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 val | col3 val

节点2标题| col2 val | col3 val

节点3标题| col2 val | COL3 VAL

1 2 3 4下一个>最后»

回答

2

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

尝试将 - > element()调用和任何参数都留给主题('pager')。

此外,您的计数查询是错误的。只是不要定义它,这将自动为你完成。这可能是你问题的真正原因,而不是元素。

计数查询get被执行,并且第一个返回值(fetchField())被假定为元素的数量。您的查询可能会返回一个nid,这被误认为是数字。因此,只需将其丢弃,Drupal就会自动为您创建正确的计数查询。

+0

谢谢贝尔迪尔。我见过的例子在那里有数据查询,这就是抛弃它的原因。不确定的元素与它有什么关系,因为它可以正常工作,但我只是添加了这些东西,因为我以为我得到了一个错误的寻呼机。我感谢帮助! – Coder1 2011-04-22 16:06:10

+0

如果默认的查询不起作用,您只需定义一个自定义查询。在Drupal 7中,它甚至可以处理GROUP BY条件。但是,在这种情况下,它只是执行SELECT COUNT(*)FROM($ the_normal_query)。这总是有效的,但如果它是例如聚合函数等,则它是不必要的慢。因此,对于这些情况,您可以定义自定义计数查询。如果你这样做,你将不得不确保它只返回一个结果 - 实际查询的总行数。 – Berdir 2011-04-22 18:54:11