я использую 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 для неизвестных страниц. А также убедитесь, что первая страница не последняя !!
Надеюсь, мои данные имеют смысл!
Я не смог найти ответа ни на одном форуме / документе. Пожалуйста, ведите меня или укажите мне, если это дубликат любого.
Вам не нужно (и не может *) получить доступ к помощнику в контроллере.
Взгляни на исходный код для 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 для каждого типа. Также см этот связанный вопрос, для получения дополнительной информации о реализации страниц типа бесконечной прокрутки.
* Почти все возможно, вам, конечно, не нужно использовать помощник в контроллере, хотя.
$ 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) { /*... */ }