CakePHP нумерация страниц следующего и предыдущего не отображается - PullRequest
0 голосов
/ 25 февраля 2012

Я использую 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. Мой код контролера

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 Ответ

1 голос
/ 25 февраля 2012

Во-первых, измените ваш paginate в верхней части контроллера.Удалите из него почтовый индекс.Это должно быть просто:

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

Во-вторых, я не уверен, чего вы пытаетесь достичь с помощью $ tsql, но, насколько я знаю, вы не можете передать оператор SELECT как условие.Вам необходимо написать конкретные условия ORM, например:

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

Затем, чтобы установить почтовые индексы, вы можете сделать это:

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

или это

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

КакПримечание: echo @$this->Paginator->prev должно быть echo $this->Paginator->prev, и все @ должны быть удалены из этих строк.Это плохая практика кодирования.Я не уверен, что у вас есть причина игнорирования, но это плохо.

...