Доступ к объекту Paginator в контроллере

я использую cakePHP 2.5 и я хочу получить доступ $this->Paginator->hasNext() в контроллере, но это через исключение.

    $type = array('featured', 'newest', 'trending');

foreach($type as $each)
{
$conditions = array('Product.status'=>'1', "is_$each" => '1');
$this->Product->recursive = 1;

//retrieve and set final result set
$this->paginate = array(
'fields' => array('Product.*'),
'conditions' => $conditions,
'limit' => $page_limit,
'page' => $page,
'order' => "$order_by $order_by_sort",
);
$products[$each] = $this->paginate('Product');
}

На моей странице я хочу отобразить 3 типа товара featured/trending/newest, Сначала я загружаю первую страницу по умолчанию, затем, когда пользователь прокручивает страницу вниз, я вызываю ajax и добавляю следующую страницу, как мудрый. Но если последняя страница достигнута, то я хочу остановить вызов ajax (потому что неизвестная страница 404 not found error).

Чтобы преодолеть это, я предотвращаю вызов AJAX для неизвестных страниц. А также убедитесь, что первая страница не последняя !!

Надеюсь, мои данные имеют смысл!

Я не смог найти ответа ни на одном форуме / документе. Пожалуйста, ведите меня или укажите мне, если это дубликат любого.

0

Решение

Вам не нужно (и не может *) получить доступ к помощнику в контроллере.

Взгляни на исходный код для hasNext который просто звонит вспомогательная функция _hasPage, который просто проверяет массив параметров.

Параметры пагинатора все доступно в контроллере:

$paging = array(
'page' => $page,
'current' => count($results),
'count' => $count,
'prevPage' => ($page > 1),
'nextPage' => ($count > ($page * $limit)),
'pageCount' => $pageCount,
'order' => $order,
'limit' => $limit,
'options' => Hash::diff($options, $defaults),
'paramType' => $options['paramType']
);

Итак, из кода в вопросе:

 $this->request['paging']['Product']['nextPage']

Является ли информация, которую вы ищете (она будет перезаписываться каждый раз, когда вы звоните paginate,

Рассмотрим дизайн вашего приложения.

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

* Почти все возможно, вам, конечно, не нужно использовать помощник в контроллере, хотя.

0

Другие решения

Нарушение MVC

$ This-> paginator-> hasNext ()

Это метод помощник. Помощники не Считается, что используется в контроллерах, потому что это нарушение шаблона MVC и плохая практика. если ты считать ты должен ошибаться: исправь свою архитектуру, она сломана по замыслу.

Правильное решение

Возвращает состояние нумерации страниц вместе с данными в ответе AJAX:

$this->set('pagination', $this->request->paging['Product']);
$this->set('products', $result);
$this->set('_serialize', ['products', 'pagination']);

Вы можете изменить состояние вашего представления в зависимости от данных:

if (pagination.Product.nextPage == true) { /*... */ }
-1

По вопросам рекламы [email protected]