Просмотры
Материал из База знаний Joomla.
Вступление
В Joomla 1.x есть встроенные механизмы разделения списков на страницы. Причем не важно что это за список - вы просто используете экземпляр класса mosPageNav и при помощи него выводите разделители страниц.
Как это сделать
Основная цель разеделения на страницы - избежать сильной нагрузки на MySQL сервер и при получении данных выбирать только то, что вам непосредственно нужно. А нужны нам, предположим, записи с 10 по 20, и большого смысла выбирать целую тысячу конечно же нет.
Технически это реализуется посредством конструкции LIMIT x,y языка SQL. Первое число - стартовая запись, второе - число записей которые надо отобрать.
В Joomla этими двумя числами являются переменные $limit и $limistart. Обычно они передаются среди страниц и для того что бы их получить из запроса надо воспользоваться функцией mosGetParam в самом начале вашего компонента:
$limit = (int)mosGetParam( $_REQUEST, 'limit', 0 ) ); $limitstart = (int)mosGetParam( $_REQUEST, 'limitstart', 0 ) );
Следующее что вам нужно - это узнать общее количество строк. Это необходимо, что бы код класса мог правильно определить общее число страниц. Например, если вы выводите список пользователей, это можно сделать вот так:
$query = "SELECT COUNT(id) FROM #__users"; $database->setQuery( $query ); $total = $database->loadResult();
Так же мы знаем, что пользователю нельзя доверять, поэтому мы должны в случае не правильного ввода или при первом запросе компонента подкорректировать переменные $limit и $limistart.
$limit = $limit ? $limit : 10; if ( $total <= $limit ) { $limitstart = 0; }
В данном примере мы будем выводить по 10 пользователей на страницу.
Для использования класса mosPageNav надо включить файл, содержащий его, а именно pageNavigation.php:
global $mosConfig_absolute_path; require_once( $mosConfig_absolute_path . '/includes/pageNavigation.php' ); $pageNav = new mosPageNav( $total, $limitstart, $limit );
Теперь можно выбирать только необходимые нам данные:
$query = "SELECT * FROM #__users"; $database->setQuery( $query, $limitstart, $limit ); $users = $database->loadObjectList(); for( $i=0; $i<sizeof($users); $i++ ) { $user = $users[$i]; echo "{$user->username} - {$user->email}<br />"; }
А после отображения списка нужным нам образом надо вывести сами разделители страниц, например так:
Отображать по <?php echo $pageNav->getLimitBox( $link ); ?> <?php echo $pageNav->writePagesLinks( $link ); ?> Выберите страницу: <?php echo $pageNav->writePagesCounter(); ?>
Последнее изменение этой страницы: 15:02, 27 марта 2009.



