cakephp分页下一个和之前没有显示

时间:2012-02-25 06:34:28

标签: cakephp pagination cakephp-1.3

我正在使用cakephp 1.3并且我正在接受奇怪的分页问题。我已经为我在多个控制器中处理分页代码而增加了分页。但我的其余控制器没有显示下一个和上一个按钮和分页数字是工作正常 我在我的视图中使用此代码

<?php 
   if(!empty($zipcodes)){   
        echo "<div class='pagination'>";
        echo @$this->Paginator->prev('« Previous', null, null, array('class' => 'disabled')); 
        echo @$this->Paginator->numbers();
        echo @$this->Paginator->next('Next »', null, null, array('class' => 'disabled')); 
        echo '<div style="float:right;padding:5px;color:#000">'.$this->Paginator->counter().'</div>';
        echo "<div class='clear'></div>";
        echo "</div>";
    }
?>

在我的控制器中,我使用了分页控制器,因为我正在对自定义查询结果进行分页。我在app_model.php中包含了分页代码。 我的ontroller代码是

var $paginate = array(
                         'Zipcode' => array('limit' => 5,
                                        'order' => array('id' => 'desc'),                                        


                    )
                    );   

我的查询和操作

        $tsql = " SELECT Zipcode.* ".
                    " FROM zipcodes AS Zipcode ".
                    " WHERE  Zipcode.region_id=0 ";
               $conditions = array(
                                'tsql'=>$tsql,
                            );
                $tmp =  $this->paginate('Zipcode',$conditions); 
                $this->set('zipcodes', $tmp);

任何人都可以指出我做错了什么。?为什么分页只适用于某些控制器。???提前谢谢

1 个答案:

答案 0 :(得分:1)

首先,更改控制器顶部的分页。从中删除Zipcode。它应该只是:

var $paginate = array(
   'limit' => 5,
   'order' => array('Zipcode.id' => 'desc'),                                        
);  

其次,我不确定你要用$ tsql完成什么,但据我所知,你不能将SELECT语句作为条件传递。你需要编写像这样的ORM特定条件:

$this->paginate = array(
  'conditions' => array('Zipcode.region_id' => 0),
);

然后设置zipcodes就可以了:

$this->set('zipcodes', $this->paginate('Zipcode'));

或者

$data = $this->paginate('Zipcode');
$this->set(compact('data'));

作为旁注,echo @$this->Paginator->prev应为echo $this->Paginator->prev,并且应从这些行中删除所有@。这是糟糕的编码实践。我不确定你是否因为某种原因而忽略了这一点,但这很糟糕。