CakePHP и разбиение на страницы

Одна из самых удобных и нужных возможностей кейка — готовые классы для рутины, например класс разбиения на страницы (pagination). Про инициализацию и первые шаги можно почитать на основном сайте, а я попробую рассказать о том, чего там нет)

Заданный в начале контроллера массив параметров можно и нужно менять на лету в случае необходимости, например мы можем перед вызовом разбиения добавить еще что-нибудь в него, например еще одну модель.

<?php
$this->paginate['contain'][] = 'Category';
$this->paginate('Article');
?>

В условия можно дописывать условия по модели, например порядок внутри связывающей модели Статьи-Разделы. Заметим, что для этого модель статей должна быть связана уже не с моделью категорий, а с «псевдомоделью» статьи-категория, и не как-нибудь, а как «принадлежит-к или один-одни» для срабатывания условий

<?php
class Article extends AppModel{
	var $name     = 'Article';
	var $useTable = 'articles';
	var $actsAs   = array('Containable');
	var $hasAndBelongsToMany = array('Category');
	var $hasOne = array('ArticlesCategory' => array(
		'className'  => 'ArticlesCategory',
		'foreignKey' => 'article_id'
	));
}
<?php
$this->paginate['contain'] = array('ArticlesCategory');
$this->paginate['order']   = array('Articles.Category.order');
$this->paginate('Article', array('ArticlesCategory.category_id'=>2));
?>

Использовать базовый хелпер вывода страниц — не обязательно, главное сделать передачу параметра page в роуте и из хелпера вынуть основные значения (количества страниц и тд) — и можно самому делать нужные страницы, например /раздел/1 или /раздел/страница-1 — как вам нравится.

Оставить комментарий

XHTML: Вы можете использовать такие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">