<?xml version="1.0" encoding="windows-1251"?>
<rss version="2.0">
<channel>
<title>CakePHP - Manual/Pagination</title>
<link>http://cake-php.ru/wiki/Manual/Pagination</link>
<description>History/revisions of CakePHP/Manual/Pagination</description>
<language>en-us</language>
<item>
<title>2008-01-05 11:38:50</title>
<link>http://cake-php.ru/wiki/Manual/Pagination/show?time=2008-01-05+11%3A38%3A50</link>
<description>&lt;div class="pageBefore">&lt;img src="http://cake-php.ru/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a name=".manual.pagination" href="http://cake-php.ru/wiki/Manual/Pagination" class="">/Manual&amp;nbsp;/&amp;nbsp;Pagination&lt;/a> за &lt;a href="http://cake-php.ru/wiki/Manual/Pagination?time=2008-01-05+11%3A38%3A50">2008-01-05 11:38:50&lt;/a> и &lt;a href="http://cake-php.ru/wiki/Manual/Pagination">2008-01-05 17:15:57&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;div class="indent">var $paginate = array(&lt;br />
&lt;div class="indent">'limit' =&amp;gt; 5, &lt;br />
'order' =&amp;gt; array(&lt;br />
&lt;div class="indent">'&lt;span class="missingpage">Post.title&lt;/span>&lt;a href="http://cake-php.ru/wiki/Post/title/edit?add=1" title="Создать эту страницу">?&lt;/a>' =&amp;gt; 'asc'&lt;br />
&lt;/div>)&lt;br />
&lt;/div>);&lt;/div>&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">'limit' =&amp;gt; 25, &lt;br />
‘order' =&amp;gt; array(&lt;br />
&lt;div class="indent">&lt;div class="indent">'&lt;span class="missingpage">Post.title&lt;/span>&lt;a href="http://cake-php.ru/wiki/Post/title/edit?add=1" title="Создать эту страницу">?&lt;/a>' =&amp;gt; 'asc'&lt;br />
&lt;/div>&lt;/div>)&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2008-01-05 11:23:35</title>
<link>http://cake-php.ru/wiki/Manual/Pagination/show?time=2008-01-05+11%3A23%3A35</link>
<description>&lt;div class="pageBefore">&lt;img src="http://cake-php.ru/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://cake-php.ru/wiki/Manual/Pagination" class="">/Manual&amp;nbsp;/&amp;nbsp;Pagination&lt;/a> за &lt;a href="http://cake-php.ru/wiki/Manual/Pagination?time=2008-01-05+11%3A23%3A35">2008-01-05 11:23:35&lt;/a> и &lt;a href="http://cake-php.ru/wiki/Manual/Pagination?time=2008-01-05+11%3A38%3A50">2008-01-05 11:38:50&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">Обратите внимание: если ключ &lt;tt>'update'&lt;/tt> не&amp;nbsp;задан, &lt;tt>PaginationHelper&lt;/tt> будет выводить обычные (не-ajax) ссылки.&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">Обратите внимание: если ключ 'update' не&amp;nbsp;задан, &lt;tt>&lt;span class="missingpage">Pagination&amp;nbsp;Helper&lt;/span>&lt;a href="http://cake-php.ru/wiki/PaginationHelper/edit?add=1" title="Создать эту страницу">?&lt;/a>&lt;/tt> будет выводить обычные (не-ajax) ссылки.&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2008-01-05 11:22:46</title>
<link>http://cake-php.ru/wiki/Manual/Pagination/show?time=2008-01-05+11%3A22%3A46</link>
<description>&lt;div class="pageBefore">&lt;img src="http://cake-php.ru/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://cake-php.ru/wiki/Manual/Pagination" class="">/Manual&amp;nbsp;/&amp;nbsp;Pagination&lt;/a> за &lt;a href="http://cake-php.ru/wiki/Manual/Pagination?time=2008-01-05+11%3A22%3A46">2008-01-05 11:22:46&lt;/a> и &lt;a href="http://cake-php.ru/wiki/Manual/Pagination?time=2008-01-05+11%3A23%3A35">2008-01-05 11:23:35&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;!--notypo-->&lt;fieldset class="table_of_contents">&lt;legend>&lt;strong> Оглавление документа   &lt;/strong>&lt;/legend>&lt;div class="toc1">&lt;a href="#h127-2"> Настройка контроллера &lt;/a>&lt;/div>&lt;div class="toc1">&lt;a href="#h127-3"> Разбиение на&amp;nbsp;страницы в&amp;nbsp;отображениях &lt;/a>&lt;/div>&lt;div class="toc1">&lt;a href="#h127-4"> Разбиение на&amp;nbsp;страницы с&amp;nbsp;использованием ajax &lt;/a>&lt;/div>&lt;div class="toc2">&lt;a href="#h127-5"> Изменения в&amp;nbsp;верстке &lt;/a>&lt;/div>&lt;div class="toc2">&lt;a href="#h127-6"> Изменения в&amp;nbsp;отображении &lt;/a>&lt;/div>&lt;/fieldset>&lt;!--/notypo-->&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2008-01-02 14:15:22</title>
<link>http://cake-php.ru/wiki/Manual/Pagination/show?time=2008-01-02+14%3A15%3A22</link>
<description>&lt;div class="pageBefore">&lt;img src="http://cake-php.ru/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://cake-php.ru/wiki/Manual/Pagination" class="">/Manual&amp;nbsp;/&amp;nbsp;Pagination&lt;/a> за &lt;a href="http://cake-php.ru/wiki/Manual/Pagination?time=2008-01-02+14%3A15%3A22">2008-01-02 14:15:22&lt;/a> и &lt;a href="http://cake-php.ru/wiki/Manual/Pagination?time=2008-01-05+11%3A22%3A46">2008-01-05 11:22:46&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">Одним из&amp;nbsp;основных препятствий при&amp;nbsp;создании гибких и&amp;nbsp;дружественных к&amp;nbsp;пользователю веб-приложений является создание интуитивно-понятного интерфейса. Большинство приложений очень быстро разрастаются и&amp;nbsp;разработчики обнаруживают, что&amp;nbsp;они не&amp;nbsp;в состоянии справиться с&amp;nbsp;отображением сотен или&amp;nbsp;даже тысяч записей. &lt;a href="http://ru.wikipedia.org/wiki/Рефакторинг" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://cake-php.ru/wiki/themes/cake/icons/web.gif" alt="" border="0" />Рефакторинг&lt;/a> долог, а&amp;nbsp;производительность и&amp;nbsp;удовлетворение пользователя могут пострадать.&lt;br />
Отображение разумного количества записей на&amp;nbsp;странице всегда было важной частью любого приложения и&amp;nbsp;доставляло множество забот разработчикам. CakePHP облегчает участь разработчика, предоставляя ему&amp;nbsp;быстрый и&amp;nbsp;легкий путь разбиения данных по&amp;nbsp;страницам.&lt;br />
&lt;tt>PaginatorHelper&lt;/tt> является отличным решением, потому что&amp;nbsp;его легко использовать. Кроме собственно разбиения на&amp;nbsp;страницы, он&amp;nbsp;включает в&amp;nbsp;себя несколько возможностей сортировки. Также поддерживается ajax-сортировка и&amp;nbsp;разбиение на&amp;nbsp;страницы.&lt;br />
В&amp;nbsp;контроллере мы&amp;nbsp;установим параметры разбиения в&amp;nbsp;переменной &lt;tt>$paginate&lt;/tt>. Здесь следует упомянуть, что&amp;nbsp;ключ сортировки (&lt;tt>order&lt;/tt>) должен быть задан в&amp;nbsp;виде массива.&lt;br />
&lt;!--notypo-->&lt;div class="code">&lt;code>&lt;span style="color: #000000">
&lt;/span>
&lt;/code>&lt;/div>&lt;!--/notypo-->&lt;br />
Другие ключи, которые могут быть включены в&amp;nbsp;массив &lt;tt>$paginate&lt;/tt>, соответствуют параметрам метода  &lt;tt>Model-&amp;gt;findAll()&lt;/tt> (&lt;tt>conditions&lt;/tt>, &lt;tt>fields&lt;/tt>, &lt;tt>order&lt;/tt>, &lt;tt>limit&lt;/tt>, &lt;tt>page&lt;/tt> и&amp;nbsp;&lt;tt>recursive&lt;/tt>). Можно определить несколько наборов параметров в&amp;nbsp;контроллере, достаточно просто разместить их&amp;nbsp;после модели, которую необходимо настроить. &lt;br />
&lt;!--notypo-->&lt;div class="code">&lt;code>&lt;span style="color: #000000">
'Recipe'&amp;nbsp;=&amp;gt;&amp;nbsp;array&amp;nbsp;(...),&lt;/span>
&lt;/code>&lt;/div>&lt;!--/notypo-->&lt;br />
После того, как&amp;nbsp;переменная &lt;tt>$paginate&lt;/tt> определена, можно вызвать метод &lt;tt>paginate()&lt;/tt> в&amp;nbsp;действиях контроллера. Он&amp;nbsp;вернет результаты вызова &lt;tt>findAll()&lt;/tt>, разбитые на&amp;nbsp;страницы, а&amp;nbsp;также передаст дополнительную статистику в&amp;nbsp;отображение. Этот метод также добавляет &lt;tt>PaginatorHelper&lt;/tt> в&amp;nbsp;список хелперов контроллера, если это&amp;nbsp;еще не&amp;nbsp;было сделано.&lt;br />
&lt;!--notypo-->&lt;div class="code">&lt;code>&lt;span style="color: #000000">
function&amp;nbsp;list_recipes()&amp;nbsp;{&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;аналогично&amp;nbsp;findAll(),&amp;nbsp;но&amp;nbsp;результат&amp;nbsp;разбит&amp;nbsp;на&amp;nbsp;страницы&lt;/span>
&lt;/code>&lt;/div>&lt;!--/notypo-->&lt;br />
Ваше дело решать, как&amp;nbsp;показывать данные пользователю, но&amp;nbsp;чаще всего они&amp;nbsp;отображаются в&amp;nbsp;HTML таблицах. Пример ниже предполагает размещение в&amp;nbsp;таблице, но&amp;nbsp;&lt;tt>PaginatorHelper&lt;/tt>, доступный в&amp;nbsp;отображениях не&amp;nbsp;всегда должен быть так&amp;nbsp;ограничен.&lt;br />
Как&amp;nbsp;упоминалось, &lt;tt>PaginatorHelper&lt;/tt> предоставляет возможности сортировки, которые могут быть интегрированы в&amp;nbsp;заголовки таблицы:&lt;br />
app/views/recipes/list_recipes.ctp&lt;br />
&lt;!--notypo-->&lt;div class="code">&lt;code>&lt;span style="color: #000000">
&amp;lt;/table&amp;gt;&lt;/span>
&lt;/code>&lt;/div>&lt;!--/notypo-->&lt;br />
Ссылки, которые создает метод &lt;tt>PaginatorHelper-&amp;gt;sort()&lt;/tt>, позволяют пользователю сортировать данные по&amp;nbsp;определенному полю, щелкнув на&amp;nbsp;заголовке столбца таблицы.&lt;br />
И&amp;nbsp;последний ингредиент разбиения на&amp;nbsp;страницы в&amp;nbsp;отображениях –- навигация по&amp;nbsp;страницам, также генерируемая &lt;tt>PaginatorHelper&lt;/tt>.&lt;br />
&lt;!--notypo-->&lt;div class="code">&lt;code>&lt;span style="color: #000000">
&amp;lt;!--&amp;nbsp;Отображает&amp;nbsp;ссылки&amp;nbsp;на&amp;nbsp;предыдущую&amp;nbsp;и&amp;nbsp;следующую&amp;nbsp;страницы--&amp;gt;&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo&amp;nbsp;$paginator-&amp;gt;prev('&amp;lt;&amp;lt;&amp;nbsp;Previous&amp;nbsp;',&amp;nbsp;null,&amp;nbsp;null,&amp;nbsp;array('class'&amp;nbsp;=&amp;gt;&amp;nbsp;'disabled'));&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo&amp;nbsp;$paginator-&amp;gt;next('&amp;nbsp;Next&amp;nbsp;&amp;gt;&amp;gt;',&amp;nbsp;null,&amp;nbsp;null,&amp;nbsp;array('class'&amp;nbsp;=&amp;gt;&amp;nbsp;'disabled'));&lt;br />&lt;span style="color: #0000BB">&amp;lt;?php&amp;nbsp;&lt;/span>&lt;span style="color: #007700">echo&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$paginator&lt;/span>&lt;span style="color: #007700">-&amp;gt;&lt;/span>&lt;span style="color: #0000BB">counter&lt;/span>&lt;span style="color: #007700">()&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">?&amp;gt;&lt;/span>
&lt;/span>
&lt;/code>&lt;/div>&lt;!--/notypo-->&lt;br />
Вывод метода &lt;tt>counter()&lt;/tt> может быть настроен с&amp;nbsp;помощью специальных маркеров:&lt;br />
&lt;!--notypo-->&lt;div class="code">&lt;code>&lt;span style="color: #000000">
echo&amp;nbsp;$paginator-&amp;gt;counter(&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;array(&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'format'&amp;nbsp;=&amp;gt;&amp;nbsp;'Страница&amp;nbsp;%page%&amp;nbsp;из&amp;nbsp;%pages%,&amp;nbsp;просматривается&amp;nbsp;%current%&amp;nbsp;записей&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;из&amp;nbsp;%count%&amp;nbsp;всего,&amp;nbsp;начиная&amp;nbsp;с&amp;nbsp;%start%и&amp;nbsp;заканчивая&amp;nbsp;на&amp;nbsp;%end%'&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)&lt;br />);&lt;/span>
&lt;/code>&lt;/div>&lt;!--/notypo-->&lt;br />
В&amp;nbsp;разбиение страниц легко добавить ajax-функциональность. Единственное, что&amp;nbsp;потребуется –- это&amp;nbsp;подключить js-библиотеку Prototype, установить индикатор (иконка загрузки внутри DIV’а) и&amp;nbsp;указать DIV, который будет обновляться вместо перезагрузки страницы.&lt;br />
В&amp;nbsp;заголовке подключаем Prototype, устанавливаем индикатор (spinner.gif), и&amp;nbsp;определяем DIV&amp;nbsp;с&amp;nbsp;содержимым (&amp;laquo;content&amp;raquo;).&lt;br />
&lt;!--notypo-->&lt;div class="code">&lt;code>&lt;span style="color: #000000">
&amp;lt;html&amp;gt;&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;head&amp;gt;&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;title&amp;gt;&lt;span style="color: #0000BB">&amp;lt;?php&amp;nbsp;&lt;/span>&lt;span style="color: #007700">echo&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$title_for_layout&lt;/span>&lt;span style="color: #007700">;&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">?&amp;gt;&lt;/span>&amp;lt;/title&amp;gt;&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000BB">&amp;lt;?php&amp;nbsp;&lt;/span>&lt;span style="color: #007700">echo&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$javascript&lt;/span>&lt;span style="color: #007700">-&amp;gt;&lt;/span>&lt;span style="color: #0000BB">link&lt;/span>&lt;span style="color: #007700">(array(&lt;/span>&lt;span style="color: #DD0000">'prototype'&lt;/span>&lt;span style="color: #007700">));&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">?&amp;gt;&lt;br />&lt;/span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;style&amp;nbsp;type="text/css"&amp;gt;&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;div.disabled&amp;nbsp;{&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;display:&amp;nbsp;inline;&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;float:&amp;nbsp;none;&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;clear:&amp;nbsp;none;&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;color:&amp;nbsp;#C0C0C0;&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/style&amp;gt;&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/head&amp;gt;&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;body&amp;gt;&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;div&amp;nbsp;id="main"&amp;gt;&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;div&amp;nbsp;id="spinner"&amp;nbsp;style="display:&amp;nbsp;none;&amp;nbsp;float:&amp;nbsp;right;"&amp;gt;&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000BB">&amp;lt;?php&amp;nbsp;&lt;/span>&lt;span style="color: #007700">echo&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$html&lt;/span>&lt;span style="color: #007700">-&amp;gt;&lt;/span>&lt;span style="color: #0000BB">image&lt;/span>&lt;span style="color: #007700">(&lt;/span>&lt;span style="color: #DD0000">'spinner.gif'&lt;/span>&lt;span style="color: #007700">);&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">?&amp;gt;&lt;br />&lt;/span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/div&amp;gt;&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;div&amp;nbsp;id="content"&amp;gt;&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000BB">&amp;lt;?php&amp;nbsp;&lt;/span>&lt;span style="color: #007700">echo&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$content_for_layout&lt;/span>&lt;span style="color: #007700">;&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">?&amp;gt;&lt;br />&lt;/span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/div&amp;gt;&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/div&amp;gt;&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/body&amp;gt;&lt;br />&amp;lt;/html&amp;gt;&lt;/span>
&lt;/code>&lt;/div>&lt;!--/notypo-->&lt;br />
Единственная дополнительная настройка для&amp;nbsp;разбиения на&amp;nbsp;страницы с&amp;nbsp;использованием ajax производится с&amp;nbsp;помощью метода &lt;tt>PaginationHelper::options()&lt;/tt>, который определяет необходимые параметры ajax. В&amp;nbsp;данном случае, мы&amp;nbsp;определяем, что&amp;nbsp;все ссылки должны обновлять элемент, ID&amp;nbsp;которого равен &lt;tt>&amp;#147;content&amp;#148;&lt;/tt>, данными и&amp;nbsp;во время загрузки будет отображаться &lt;tt>&amp;#147;spinner&amp;#148;&lt;/tt>.&lt;br />
Обратите внимание: если ключ 'update' не&amp;nbsp;задан, &lt;tt>&lt;span class="missingpage">Pagination&amp;nbsp;Helper&lt;/span>&lt;a href="http://cake-php.ru/wiki/PaginationHelper/edit?add=1" title="Создать эту страницу">?&lt;/a>&lt;/tt> будет выводить обычные (не-ajax) ссылки.&lt;br />
&lt;!--notypo-->&lt;div class="code">&lt;code>&lt;span style="color: #000000">
&lt;span style="color: #0000BB">&amp;lt;?php&amp;nbsp;&lt;/span>&lt;span style="color: #007700">echo&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$paginator&lt;/span>&lt;span style="color: #007700">-&amp;gt;&lt;/span>&lt;span style="color: #0000BB">counter&lt;/span>&lt;span style="color: #007700">();&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">?&amp;gt;&lt;/span>
&lt;/span>
&lt;/code>&lt;/div>&lt;!--/notypo-->&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">Одним из&amp;nbsp;основных препятствий при&amp;nbsp;создании гибких и&amp;nbsp;дружественных к&amp;nbsp;пользователю веб-приложений является создание интуитивно-понятного интерфейса. Большинство приложений очень быстро разрастаются и&amp;nbsp;разработчики обнаруживают, что&amp;nbsp;они не&amp;nbsp;в состоянии справиться с&amp;nbsp;отображением сотен или&amp;nbsp;даже тысяч записей. Рефакторинг долог, а&amp;nbsp;производительность и&amp;nbsp;удовлетворение пользователя могут пострадать.&lt;br />
Отображение разумного количества записей на&amp;nbsp;странице всегда было важной частью любого приложения и&amp;nbsp;доставляло множество забот разработчикам. &lt;a name="cakephp" href="http://cake-php.ru/wiki/CakePHP" class="">Cake&amp;nbsp;PHP&lt;/a> облегчает участь разработчика, предоставляя ему&amp;nbsp;быстрый и&amp;nbsp;легкий путь разбиения данных по&amp;nbsp;страницам.&lt;br />
&lt;span class="missingpage">Paginator&amp;nbsp;Helper&lt;/span>&lt;a href="http://cake-php.ru/wiki/PaginatorHelper/edit?add=1" title="Создать эту страницу">?&lt;/a> является отличным решением, потому что&amp;nbsp;его легко использовать. Кроме собственно разбиения на&amp;nbsp;страницы, он&amp;nbsp;включает в&amp;nbsp;себя несколько возможностей сортировки. Также поддерживается ajax сортировка и&amp;nbsp;разбиение на&amp;nbsp;страницы.&lt;br />
В&amp;nbsp;контроллере мы&amp;nbsp;установим параметры разбиения в&amp;nbsp;переменной $paginate контроллера. Здесь следует упомянуть, что&amp;nbsp;ключ сортировки должен быть задан в&amp;nbsp;виде массива.&lt;br />
&lt;!--notypo-->&lt;div class="code">&lt;code>&lt;span style="color: #000000">
&lt;span style="color: #0000BB">&amp;lt;?php&lt;br />?&amp;gt;&lt;/span>
&lt;/span>
&lt;/code>&lt;/div>&lt;!--/notypo-->&lt;br />
Другие ключи, которые могут быть включены в&amp;nbsp;массив $paginate, соответствуют параметрам метода  Model-&amp;gt;findAll() (conditions, fields, order, limit, page и&amp;nbsp;recursive). Можно определить несколько наборов параметров в&amp;nbsp;контроллере, достаточно просто разместить их&amp;nbsp;после модели, которую необходимо настроить. &lt;br />
&lt;!--notypo-->&lt;div class="code">&lt;code>&lt;span style="color: #000000">
&lt;span style="color: #0000BB">&amp;lt;?php&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #DD0000">'Recipe'&amp;nbsp;&lt;/span>&lt;span style="color: #007700">=&amp;gt;&amp;nbsp;array&amp;nbsp;(...)&amp;nbsp;,&lt;br />&lt;/span>&lt;span style="color: #0000BB">?&amp;gt;&lt;/span>
&lt;/span>
&lt;/code>&lt;/div>&lt;!--/notypo-->&lt;br />
После того, как&amp;nbsp;переменная $paginate определена, можно вызвать метод paginate() в&amp;nbsp;действиях контроллера. Он&amp;nbsp;вернет результаты вызова findAll(), разбитые на&amp;nbsp;страницы, а&amp;nbsp;также передаст дополнительную статистику в&amp;nbsp;отображение. Этот метод также добавляет &lt;span class="missingpage">Paginator&amp;nbsp;Helper&lt;/span>&lt;a href="http://cake-php.ru/wiki/PaginatorHelper/edit?add=1" title="Создать эту страницу">?&lt;/a> в&amp;nbsp;список хелперов контроллера, если это&amp;nbsp;еще не&amp;nbsp;было сделано.&lt;br />
&lt;!--notypo-->&lt;div class="code">&lt;code>&lt;span style="color: #000000">
function&amp;nbsp;list_recipes()&amp;nbsp;{&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;similar&amp;nbsp;to&amp;nbsp;findAll(),&amp;nbsp;but&amp;nbsp;fetches&amp;nbsp;paged&amp;nbsp;results&lt;br />}&lt;/span>
&lt;/code>&lt;/div>&lt;!--/notypo-->&lt;br />
Ваше дело решать, как&amp;nbsp;показывать данные пользователю, но&amp;nbsp;чаще всего они&amp;nbsp;отображаются в&amp;nbsp;HTML таблицах. Пример ниже предполагает размещение в&amp;nbsp;таблице, но&amp;nbsp;&lt;span class="missingpage">Paginator&amp;nbsp;Helper&lt;/span>&lt;a href="http://cake-php.ru/wiki/PaginatorHelper/edit?add=1" title="Создать эту страницу">?&lt;/a>, доступный в&amp;nbsp;отображениях не&amp;nbsp;всегда должен быть так&amp;nbsp;ограничен.&lt;br />
Как&amp;nbsp;упоминалось, &lt;span class="missingpage">Paginator&amp;nbsp;Helper&lt;/span>&lt;a href="http://cake-php.ru/wiki/PaginatorHelper/edit?add=1" title="Создать эту страницу">?&lt;/a> предоставляет возможности сортировки, которые могут быть интегрированы в&amp;nbsp;заголовки таблицы:&lt;br />
&lt;!--notypo-->&lt;div class="code">&lt;code>&lt;span style="color: #000000">
//&amp;nbsp;app/views/recipes/list_recipes.ctp&lt;br />&amp;lt;/table&amp;gt;&lt;/span>
&lt;/code>&lt;/div>&lt;!--/notypo-->&lt;br />
Ссылки, которые создает метод &lt;span class="missingpage">Paginator&amp;nbsp;Helper&lt;/span>&lt;a href="http://cake-php.ru/wiki/PaginatorHelper/edit?add=1" title="Создать эту страницу">?&lt;/a>-&amp;gt;sort(), позволяют пользователю сортировать данные по&amp;nbsp;определенному полю, щелкнув на&amp;nbsp;заголовке столбца таблицы.&lt;br />
И&amp;nbsp;последний ингредиент разбиения на&amp;nbsp;страницы в&amp;nbsp;отображениях – навигация по&amp;nbsp;страницам, также генерируемая  &lt;span class="missingpage">Paginator&amp;nbsp;Helper&lt;/span>&lt;a href="http://cake-php.ru/wiki/PaginatorHelper/edit?add=1" title="Создать эту страницу">?&lt;/a>’ом.&lt;br />
&lt;!--notypo-->&lt;div class="code">&lt;code>&lt;span style="color: #000000">
&amp;lt;!--&amp;nbsp;Отображает&amp;nbsp;ссылки&amp;nbsp;на&amp;nbsp;предыдущую&amp;nbsp;и&amp;nbsp;следующую&amp;nbsp;страницы--&amp;gt;&lt;br />echo&amp;nbsp;$paginator-&amp;gt;prev('&amp;lt;&amp;lt;&amp;nbsp;Previous&amp;nbsp;',&amp;nbsp;null,&amp;nbsp;null,&amp;nbsp;array('class'&amp;nbsp;=&amp;gt;&amp;nbsp;'disabled'));&lt;br />echo&amp;nbsp;$paginator-&amp;gt;next('&amp;nbsp;Next&amp;nbsp;&amp;gt;&amp;gt;',&amp;nbsp;null,&amp;nbsp;null,&amp;nbsp;array('class'&amp;nbsp;=&amp;gt;&amp;nbsp;'disabled'));&lt;br />&lt;span style="color: #0000BB">&amp;lt;?php&amp;nbsp;&lt;/span>&lt;span style="color: #007700">echo&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$paginator&lt;/span>&lt;span style="color: #007700">-&amp;gt;&lt;/span>&lt;span style="color: #0000BB">counter&lt;/span>&lt;span style="color: #007700">();&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">?&amp;gt;&lt;/span>
&lt;/span>
&lt;/code>&lt;/div>&lt;!--/notypo-->&lt;br />
Вывод метода counter() может быть настроен с&amp;nbsp;помощью специальных маркеров:&lt;br />
&lt;!--notypo-->&lt;div class="code">&lt;code>&lt;span style="color: #000000">
&lt;span style="color: #0000BB">&amp;lt;?php&lt;br />&lt;/span>&lt;span style="color: #007700">echo&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$paginator&lt;/span>&lt;span style="color: #007700">-&amp;gt;&lt;/span>&lt;span style="color: #0000BB">counter&lt;/span>&lt;span style="color: #007700">(array(&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #DD0000">'format'&amp;nbsp;&lt;/span>&lt;span style="color: #007700">=&amp;gt;&amp;nbsp;&lt;/span>&lt;span style="color: #DD0000">'Page&amp;nbsp;%page%&amp;nbsp;of&amp;nbsp;%pages%,&amp;nbsp;showing&amp;nbsp;%current%&amp;nbsp;records&amp;nbsp;out&amp;nbsp;of&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;%count%&amp;nbsp;total,&amp;nbsp;starting&amp;nbsp;on&amp;nbsp;record&amp;nbsp;%start%,&amp;nbsp;ending&amp;nbsp;on&amp;nbsp;%end%'&lt;br />&lt;/span>&lt;span style="color: #007700">));&amp;nbsp;&lt;br />&lt;/span>&lt;span style="color: #0000BB">?&amp;gt;&lt;/span>
&lt;/span>
&lt;/code>&lt;/div>&lt;!--/notypo-->&lt;br />
В&amp;nbsp;разбиение страниц легко добавить ajax-функциональность. Единственное, что&amp;nbsp;потребуется – это&amp;nbsp;подключить js-библиотеку Prototype, установить индикатор (иконка загрузки внутри DIV’а) и&amp;nbsp;указать DIV, который будет обновляться вместо перезагрузки страницы.&lt;br />
В&amp;nbsp;заголовке подключаем Prototype, устанавливаем индикатор (spinner.gif), и&amp;nbsp;определяем DIV&amp;nbsp;с&amp;nbsp;содержимым (“content”).&lt;br />
&lt;!--notypo-->&lt;div class="code">&lt;code>&lt;span style="color: #000000">
&amp;lt;head&amp;gt;&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;title&amp;gt;&lt;span style="color: #0000BB">&amp;lt;?php&amp;nbsp;&lt;/span>&lt;span style="color: #007700">echo&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$title_for_layout&lt;/span>&lt;span style="color: #007700">;&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">?&amp;gt;&lt;/span>&amp;lt;/title&amp;gt;&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000BB">&amp;lt;?php&amp;nbsp;&lt;/span>&lt;span style="color: #007700">echo&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$javascript&lt;/span>&lt;span style="color: #007700">-&amp;gt;&lt;/span>&lt;span style="color: #0000BB">link&lt;/span>&lt;span style="color: #007700">(array(&lt;/span>&lt;span style="color: #DD0000">'prototype'&lt;/span>&lt;span style="color: #007700">));&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">?&amp;gt;&lt;br />&lt;/span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;style&amp;nbsp;type="text/css"&amp;gt;&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;div.disabled&amp;nbsp;{&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;display:&amp;nbsp;inline;&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;float:&amp;nbsp;none;&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;clear:&amp;nbsp;none;&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;color:&amp;nbsp;#C0C0C0;&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/style&amp;gt;&lt;br />&amp;lt;/head&amp;gt;&lt;br />&amp;lt;body&amp;gt;&lt;br />&amp;lt;div&amp;nbsp;id="main"&amp;gt;&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;div&amp;nbsp;id="spinner"&amp;nbsp;style="display:&amp;nbsp;none;&amp;nbsp;float:&amp;nbsp;right;"&amp;gt;&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000BB">&amp;lt;?php&amp;nbsp;&lt;/span>&lt;span style="color: #007700">echo&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$html&lt;/span>&lt;span style="color: #007700">-&amp;gt;&lt;/span>&lt;span style="color: #0000BB">image&lt;/span>&lt;span style="color: #007700">(&lt;/span>&lt;span style="color: #DD0000">'spinner.gif'&lt;/span>&lt;span style="color: #007700">);&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">?&amp;gt;&lt;br />&lt;/span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/div&amp;gt;&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;div&amp;nbsp;id="content"&amp;gt;&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000BB">&amp;lt;?php&amp;nbsp;&lt;/span>&lt;span style="color: #007700">echo&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$content_for_layout&lt;/span>&lt;span style="color: #007700">;&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">?&amp;gt;&lt;br />&lt;/span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/div&amp;gt;&lt;br />&amp;lt;/div&amp;gt;&lt;br />&amp;lt;/body&amp;gt;&lt;br />&amp;lt;/html&amp;gt;&lt;/span>
&lt;/code>&lt;/div>&lt;!--/notypo-->&lt;br />
Единственная дополнительная настройка для&amp;nbsp;разбиения на&amp;nbsp;страницы с&amp;nbsp;использованием ajax производится с&amp;nbsp;помощью метода &lt;span class="missingpage">Pagination&amp;nbsp;Helper&lt;/span>&lt;a href="http://cake-php.ru/wiki/PaginationHelper/edit?add=1" title="Создать эту страницу">?&lt;/a>::options(), который определяет необходимые параметры ajax. В&amp;nbsp;данном случае, мы&amp;nbsp;определяем, что&amp;nbsp;все ссылки должны обновлять элемент, ID&amp;nbsp;которого равен ”content”, данными и&amp;nbsp;во время загрузки будет отображаться 'spinner'.&lt;br />
Обратите внимание: если ключ ‘update’ не&amp;nbsp;задан, &lt;span class="missingpage">Pagination&amp;nbsp;Helper&lt;/span>&lt;a href="http://cake-php.ru/wiki/PaginationHelper/edit?add=1" title="Создать эту страницу">?&lt;/a> будет выводить обычные (не-ajax) ссылки.&lt;br />
&lt;!--notypo-->&lt;div class="code">&lt;code>&lt;span style="color: #000000">
&lt;span style="color: #0000BB">&amp;lt;?php&lt;br />&lt;/span>&lt;span style="color: #007700">&amp;lt;?&lt;/span>&lt;span style="color: #0000BB">php&amp;nbsp;&lt;/span>&lt;span style="color: #007700">echo&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$paginator&lt;/span>&lt;span style="color: #007700">-&amp;gt;&lt;/span>&lt;span style="color: #0000BB">counter&lt;/span>&lt;span style="color: #007700">();&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">?&amp;gt;&lt;/span>
&lt;/span>
&lt;/code>&lt;/div>&lt;!--/notypo-->&lt;/div>&lt;/div>
</description>
</item>
</channel>
</rss>
