.. / Codeigniter Blog. Step5: Пейджер - листалка - pagination

  1. codeigniter-blog

Полученный на предыдущих шагах скрипт блога , но блог выводит все записи на одну страницу. Когда записей будет несколько десятков грузиться будет долго. Необходимо добавить листалку - пейджер, чтобы на странице выводилось не больше 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

  1. 2007-09-03
  2. codeigniter-blog
Go Index Test