cakephp - как изменить условие нумерации страниц? - PullRequest
2 голосов
/ 07 марта 2011

в нескольких местах в одном контроллере, у меня есть такой код:

$publications = $this->paginate('Publication', $conditions);

... где $условия - это массив условий, какие поля выбирать и как (используя LIKE в mysql).

каждый из них имеет различное утверждение "Order by".

как я могу достичь этого и определить другой «порядок по» части sql?

ОБНОВЛЕНИЕ (2011-03-11): это часть, как я определил нумерацию страниц:

$this->paginate = array(
        'limit' => 1, 
        'fields' => array('`Publication`.*, PublicationNumeration.*, Collection.*, Publisher.*, Publication.title as PublicationTitle'), 
        'joins' => array( array('table' => 'publication_numerations', 'alias' => 'PublicationNumeration', 'type' => 'LEFT', 'conditions' => array( 'Publication.id = PublicationNumeration.publication_id' ) ) ) 
        , 'order' => array('PublicationTitle desc')
      );

            $publications = $this->paginate('Publication', $conditions);
            $this->set(compact('publications', 'urlArgs'));

часть с 'limit' работает, но 'order' не работает и вообще не отображается в режиме отладки.

Ответы [ 3 ]

2 голосов
/ 07 марта 2011

Вы можете переопределить функцию разбиения на страницы для каждого ее применения в каждом отдельном действии. Например:

function list_recipes() {
    $this->paginate = array(
        'limit' => 10,
        'order' => array(
            'Recipe.title' => 'asc'
        )
    );
    $data = $this->paginate('Recipe');
    $this->set(compact('data'));
}

В вашем случае вы, возможно, захотите повторно использовать массив $conditions, но измените значение 'order' для каждой отдельной реализации.

Дополнительная информация: Документация по нумерации страниц

1 голос
/ 05 июня 2014

Попробуйте это:
echo $ this-> Paginator-> link ('5', array ('limit' => '5')) echo $ this-> Paginator-> link ('10', array('limit' => '10'));echo $ this-> Paginator-> link ('10', массив ('limit' => '25'));

1 голос
/ 23 сентября 2011

Я использовал эту идею для создания пользовательского выбора элементов на странице.
Моя стандартная нумерация страниц:

var $paginate = array( 'order' => array('User.id' => 'asc') );

Я добавил это в свой контроллер, чтобы изменить предел на 25 (также добавил 1 для 5 и 10, просто чтобы посмотреть, как он пойдет, и соответственно изменил предельное значение):

function list25() {
//fetches with different limit than default

    $this->paginate = array(
        'limit' => 25,
        'order' => array(
            'User.id' => 'asc'
        )
    );
    $data = $this->paginate('User');
    $this->set('users', $data); 
}

Затем в главном окне (index.ctp) я добавил это в нижней части списка данных:

<span style="float:right;">
<?php echo "&nbsp;&nbsp;<span style='vertical-align:top;font-size:12px;'>Show:</span>";
      echo $html->link(' 5', array('controller'=>'users', 'action' => 'list5'));
      echo $html->link(' 10', array('controller'=>'users', 'action' => 'list10'));
      echo $html->link(' 25', array('controller'=>'users', 'action' => 'list25'));
    ?>
</span>
<span style="float:right;margin-right:10px;"><?php  echo $paginator->numbers(); ?></span>   

... который показывает следующий текст в нижней части дисплея: Показать: 5 10 25
Числа, по нажатию на которые, связаны с действием контроллера и, таким образом, сбрасывают лимит (и обновляет страницу с новым установленным лимитом).

Возможно, есть лучший способ достичь той же функциональности, что и мне, для создания представления для каждой опции: list5.ctp, list10.ctp и list25.ctp. В любом случае, это дает пользователю возможность выбрать, сколько данных они хотят видеть на странице. Комментарии?

.... пользователь noob cakePHP ...

...