Полученный на предыдущих шагах скрипт блога , но блог выводит все записи на одну страницу. Когда записей будет несколько десятков грузиться будет долго. Необходимо добавить листалку - пейджер, чтобы на странице выводилось не больше 10-20 записей и упорядочить вывод записей от более новых к более старым.
1.
Добавим несколько десятков записей в блог. Чтобы это было легко и просто, добавим в контроллер администрирования /system/application/controller/admin.php тестовую функцию, которая сделает это за нас
function record_add_test() /* Заполнение тестовыми записями*/
{
for ($i=1;$i<50;$i++)
$this-> db-> insert('records',array('title'=> 'TITLE #'.$i,'body'=> '#'.$i.' Lorem ipsum dolor'));
for ($i=1;$i<50;$i++)
$this-> db-> insert('comments',array('record_id'=> 1,'author'=> 'NAME #'.$i,'body'=> '#'.$i.'quis autem'));
redirect(''); // редирект в начало
} |
запустим ее, вызвав в броузере: http://ci/admin/record_add_test. Главное - потом эту функцию ликвидировать, чтобы случайно не загадить рабочий блог тестовыми записями.
2.
Одна из приятностей CodeIgniter, то что в нем листалка-пейджер уже есть и нужно только ее подключить. Для этого используется предусмотрена специальная библиотека, которую необходимо подключить в конфигурационном файле.
Ее необходимо зарегистрировать в файле автоподгрузке /system/application/config/autoload.php
Находим в этом файле строку
$autoload['libraries'] = array('database');
заменяем ее на
$autoload['libraries'] = array('database','pagination');
3.
Добавляем эту библиотеку в конструкторе контроллера блога /system/application/controller/blog.php
function Blog()
{
parent::Controller();
$this-> load-> helper('url');
$this-> load-> helper('form');
$this-> load-> library('session');
$this-> load-> library('pagination'); // Бибилотека пейджера
} |
4. Там же дорабатываем функцию вывода записей блога:
function index()
{
$config['base_url'] = 'http://ci/blog/index/'; // путь к страницам в пейджере
$config['total_rows'] = $this-> db-> count_all('records'); // всего записей
$config['per_page'] = 10; // количество записей на странице
$config['num_links'] = 5; // количество ссылок в пейджере (точнее N/2)
$config['uri_segment'] = 3; // указываем где в URL номер страницы
$this-> pagination-> initialize($config);
$data['pager']=$this-> pagination-> create_links();
$data['query']=$this-> db-> get('records');
$this-> load-> view('blog_view',$data);
} |
5.
Во вьюер блога /system/application/views/blog_view.php. добавляем строку, отвечающую за вывод пейджера
echo "<div class='pager'> ".$pager."</div> ";
вызываем в броузере блог http://ci/ и проверяем результат. Пейджер есть, но в блог вываливается вся куча записей.
6.
Связываем пейджер с выдачей и устанавливаем порядок следования записей - от более поздних к более ранним. Для этого дорабатываем функцию index() контроллера блога /system/application/controller/blog.php Вносим в нее условия отбора записей.
function index()
{
.......................................................................................
.......................................................................................
$this-> pagination-> initialize($config);
$data['pager']=$this-> pagination-> create_links();
.......................................................................................
.......................................................................................
$from=intval($this-> uri-> segment(3)); // выделяем из URL номер первой записи на странице
$this-> db-> limit(10,$from); // устанавливаем количество записей на странице
$this-> db-> orderby("id", "desc"); // устанавливаем порядок следования записей
$data['query']=$this-> db-> get('records');
$this-> load-> view('blog_view',$data);
} |
вызываем в броузере блог http://ci/ и проверяем результат.
Здесь как и раньше обращение к MySQL идет не напрямую, а через библиотеку Active Record. Если не нравится, Codeigniter позволяет писать запросы к БД как есть, используя синтаксис SQL.
7.
Все что сделано сохраняется в директории step5