Как создать несколько экземпляров нумерации страниц для одной модели / контроллера в CakePHP - PullRequest
0 голосов
/ 02 ноября 2010

У меня есть представление с двумя различными действиями одной и той же модели (список элементов, отсортированный по самым последним, и один и тот же список, отсортированный по самым популярным). Один список я хочу разбить на страницы по 8 элементов за раз, а другой - за 12 элементов. Я использую AJAX для странички в предметах. Как мне настроить контроллер для выполнения этой задачи? Кажется, проблема в том, что я не могу создать два разных экземпляра нумерации страниц, поэтому я могу разбивать на страницы только одинаковое количество элементов независимо от действия.

Заранее спасибо за помощь.

Что я пробовал до сих пор

Обычно пытается установить ограничения, специфичные для каждого действия, а не начального помощника по нумерации страниц:

var $paginate = array('order'=>array('Category.name'), 'limit'=>'8');

Вот как выглядит помощник, и он подает любой предел. Даже если я уберу это ограничение и попытаюсь применить его так:

var $paginate = array('order'=>array('Item.name'));

function discover_list(){    
    $this->set('d_ajax_items', $this->paginate('Item', array('Item.discover_order' => null, 'Item.moderated' => 1), null, 'Item.id DESC', null, 8));
}

function trend_paging(){
    $this->set('trend_items', $this->paginate('Item', array('Item.moderated' => 1),NULL,  'rank DESC', NULL, 12));  
}

Предел в конце действия игнорируется, и он подает не менее 20 элементов по умолчанию за раз

Ответы [ 3 ]

3 голосов
/ 02 ноября 2010

Я неправильно понял ваш первоначальный вопрос. Если вы хотите установить различные ограничения для каждого действия, вы можете сделать это

function discover_list() {    
    $this->paginate['limit'] = 8;
    $this->paginate['conditions'] = array('Item.discover_order' => null, 'Item.moderated' => 1);
    $this->set('d_ajax_items', $this->paginate('Item'));
}

Редактировать

Немного приятного способа

$this->paginate = array(
    'limit' => 8,
    'conditions' => array('Item.discover_order' => null, 'Item.moderated' => 1),
);
$this->set('d_ajax_items', $this->paginate('Item'));
1 голос
/ 02 ноября 2010

Я делал это раньше и хотел бы, чтобы я этого не делал.Синхронизация этих двух элементов вводит в заблуждение конечного пользователя и создает кошмар для разработчика.

Что вы уже пробовали?Я уверен, что у вас может быть два экземпляра, но вам нужно будет передать параметры непосредственно в функцию paginate(), а не устанавливать их в переменной класса paginate.

Редактировать

Чтобы избежать путаницы, я почти всегда определяю параметры разбивки на страницы в самом вызове.

Во втором примере вы передаете paginate () шесть параметров, но для этого требуется только три:

function paginate($object = null, $scope = array(), $whitelist = array())

Если вы опустите $ object и передадите массив в качестве первого аргумента, последние два аргумента переместятся влево.

Вы пытались ввести порядок и предельные значения в виде массива в третьемпозиция ($ белый список)?

http://api13.cakephp.org/class/controller#method-Controllerpaginate

http://api13.cakephp.org/view_source/controller/#line-1056

0 голосов
/ 02 ноября 2010

Вы можете начать свою страницу с 2 пустых div и вызывать через ajax 2 разных URL, привязанных к контроллеру / действию. Тогда вам нужно только беспокоиться о разбиении на страницы Ajax, но у вас не будет проблем с CakePHP, потому что каждая нумерация страниц выполняет свои собственные действия.

Это не очень хороший подход, если вы хотите неброский javascript , но если все ваше приложение требует javascript, оно будет работать.

...