Как сделать пагинатор в Joomla 1.x

paginator_aspОтвечаем на вопрос «Что такое »? Термин «пагинатор» означает набор ссылок с номерами страничек, которые погружают результат некоторого запроса, нужен когда много записей на странице.
В 1.x есть встроенные механизмы разделения списков на страницы. Причем не важно что это за список — вы просто используете экземпляр класса mosPageNav и при помощи него выводите разделители страниц.

 

Как это сделать

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

Технически это реализуется посредством конструкции LIMIT x,y языка SQL. Первое число — стартовая запись, второе — число записей которые надо отобрать.

В Joomla этими двумя числами являются переменные $limit и $limistart. Обычно они передаются среди страниц и для того что бы их получить из запроса надо воспользоваться функцией mosGetParam в самом начале вашего компонента:

<span style="color: #0000ff;">$limit</span>      = <span style="color: #66cc66;">(</span>int<span style="color: #66cc66;">)</span>mosGetParam<span style="color: #66cc66;">(</span> <span style="color: #0000ff;">$_REQUEST</span>, <span style="color: #ff0000;">'limit'</span>, <span style="color: #cc66cc;">0</span> <span style="color: #66cc66;">)</span> <span style="color: #66cc66;">)</span>;
<span style="color: #0000ff;">$limitstart</span> = <span style="color: #66cc66;">(</span>int<span style="color: #66cc66;">)</span>mosGetParam<span style="color: #66cc66;">(</span> <span style="color: #0000ff;">$_REQUEST</span>, <span style="color: #ff0000;">'limitstart'</span>, <span style="color: #cc66cc;">0</span> <span style="color: #66cc66;">)</span> <span style="color: #66cc66;">)</span>;

Следующее что вам нужно — это узнать общее количество строк. Это необходимо, что бы код класса мог правильно определить общее число страниц. Например, если вы выводите список пользователей, это можно сделать вот так:

<span style="color: #0000ff;">$query</span> = <span style="color: #ff0000;">"SELECT COUNT(id) FROM #__users"</span>;
<span style="color: #0000ff;">$database</span>-&gt;<span style="color: #006600;">setQuery</span><span style="color: #66cc66;">(</span> <span style="color: #0000ff;">$query</span> <span style="color: #66cc66;">)</span>;
<span style="color: #0000ff;">$total</span> = <span style="color: #0000ff;">$database</span>-&gt;<span style="color: #006600;">loadResult</span><span style="color: #66cc66;">(</span><span style="color: #66cc66;">)</span>;

Так же мы знаем, что пользователю нельзя доверять, поэтому мы должны в случае не правильного ввода или при первом запросе компонента подкорректировать переменные $limit и $limistart.

<span style="color: #0000ff;">$limit</span> = <span style="color: #0000ff;">$limit</span> ? <span style="color: #0000ff;">$limit</span> : <span style="color: #cc66cc;">10</span>;
<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">(</span> <span style="color: #0000ff;">$total</span> &lt;= <span style="color: #0000ff;">$limit</span> <span style="color: #66cc66;">)</span> <span style="color: #66cc66;">{</span>
    <span style="color: #0000ff;">$limitstart</span> = <span style="color: #cc66cc;">0</span>;
<span style="color: #66cc66;">}</span>

В данном примере мы будем выводить по 10 пользователей на страницу.

Для использования класса mosPageNav надо включить файл, содержащий его, а именно pageNavigation.php:

<span style="color: #000066;">global</span> <span style="color: #0000ff;">$mosConfig_absolute_path</span>;
<span style="color: #b1b100;">require_once</span><span style="color: #66cc66;">(</span> <span style="color: #0000ff;">$mosConfig_absolute_path</span> . <span style="color: #ff0000;">'/includes/pageNavigation.php'</span> <span style="color: #66cc66;">)</span>;
<span style="color: #0000ff;">$pageNav</span> = <span style="color: #000000; font-weight: bold;">new</span> mosPageNav<span style="color: #66cc66;">(</span> <span style="color: #0000ff;">$total</span>, <span style="color: #0000ff;">$limitstart</span>, <span style="color: #0000ff;">$limit</span> <span style="color: #66cc66;">)</span>;

Теперь можно выбирать только необходимые нам данные:

<span style="color: #0000ff;">$query</span> = <span style="color: #ff0000;">"SELECT * FROM #__users"</span>;
<span style="color: #0000ff;">$database</span>-&gt;<span style="color: #006600;">setQuery</span><span style="color: #66cc66;">(</span> <span style="color: #0000ff;">$query</span>, <span style="color: #0000ff;">$limitstart</span>, <span style="color: #0000ff;">$limit</span> <span style="color: #66cc66;">)</span>;
<span style="color: #0000ff;">$users</span> = <span style="color: #0000ff;">$database</span>-&gt;<span style="color: #006600;">loadObjectList</span><span style="color: #66cc66;">(</span><span style="color: #66cc66;">)</span>;
 
<span style="color: #b1b100;">for</span><span style="color: #66cc66;">(</span> <span style="color: #0000ff;">$i</span>=<span style="color: #cc66cc;">0</span>; <span style="color: #0000ff;">$i</span>&lt;sizeof<span style="color: #66cc66;">(</span><span style="color: #0000ff;">$users</span><span style="color: #66cc66;">)</span>; <span style="color: #0000ff;">$i</span>++ <span style="color: #66cc66;">)</span>
<span style="color: #66cc66;">{</span>
 
    <span style="color: #0000ff;">$user</span> = <span style="color: #0000ff;">$users</span><span style="color: #66cc66;">[</span><span style="color: #0000ff;">$i</span><span style="color: #66cc66;">]</span>;
    <span style="color: #000066;">echo</span> <span style="color: #ff0000;">"{$user-&gt;username} - {$user-&gt;email}&lt;br /&gt;"</span>;
<span style="color: #66cc66;">}</span>

А после отображения списка нужным нам образом надо вывести сами разделители страниц, например так:

 
Отображать по <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #000066;">echo</span> <span style="color: #0000ff;">$pageNav</span>-&gt;<span style="color: #006600;">getLimitBox</span><span style="color: #66cc66;">(</span> <span style="color: #0000ff;">$link</span> <span style="color: #66cc66;">)</span>; <span style="color: #000000; font-weight: bold;">?&gt;</span>
 
<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #000066;">echo</span> <span style="color: #0000ff;">$pageNav</span>-&gt;<span style="color: #006600;">writePagesLinks</span><span style="color: #66cc66;">(</span> <span style="color: #0000ff;">$link</span> <span style="color: #66cc66;">)</span>; <span style="color: #000000; font-weight: bold;">?&gt;</span>
 
Выберите страницу: <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #000066;">echo</span> <span style="color: #0000ff;">$pageNav</span>-&gt;<span style="color: #006600;">writePagesCounter</span><span style="color: #66cc66;">(</span><span style="color: #66cc66;">)</span>; <span style="color: #000000; font-weight: bold;">?&gt;</span>


Запись навигация

Top