Русскоязычный форум, посвященный фреймворку Kohana

Все о фреймворке Kohana. Обсуждение уроков, документации.
Текущее время: 19 мар 2024, 10:22

Часовой пояс: UTC + 4 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Pagination
СообщениеДобавлено: 10 июн 2013, 00:52 
Не в сети
Новичок

Зарегистрирован: 19 фев 2013, 08:32
Сообщения: 23
День добрый!
Многому научился на этом форуме и сайте, поэтому выкладываю мною найденное решение пагинации, несколько дней ломал голову как же прикрутить модуль, из урока вроде бы все понятно, но что то не шло, надеюсь авторы и админы сайта и форума поймут меня, работа с фреймворком это уровень профессионала, и самоучке в программировании на php, иногда сложно понять изложение материала, поэтому прошу снисходительно отнестись к неточностям определений. Ближе к делу.
Сам модуль пагинатора в прикрепленном архиве, как его установить и подключить, те кто решил это сделать знают,
Контроллер
Код:
public function action_video()
   {
      //Создаем объект класса, естественно у вас должна быть создана соответствующая модель
      $videos = ORM::factory('Video');
      //Производим подсчет строк в таблице(спасибо Сергею админу форума)
      $total = $videos->reset(FALSE)->count_all();
      if ($total == 0)
      {
            $this->response->body('No videos found');
            return;
      }
   // Формируем объект пагинации
        $pagination = Pagination::factory(array(
            'group' => 'default',// в этой строке обращаемся к конфигурационному файлу application/config/pagination.php скопированному из директории модуля
            'total_items' => $videos->count_all(),
        ));
    //Выбираем из БД необходиимые данные
         $videos = $videos
                ->order_by('code', 'DESC') // DESC или ASC
                     ->offset($pagination->offset)// понимаю для чего но объяснить не могу
           ->limit($pagination->items_per_page)
                     ->find_all();
          // Передаем данные из модели и массив пагинатора в вид(Важно! этот фрагмент кода должен быть после определения всех передаваемых переменных)
     $view = View::factory('/blocks/video', array('items' => $videos,'pagination' => $pagination,))
                      ->bind('videos', $videos)
                 ->bind('articles', $articles)
            ->bind('category', $category);

     $this->template->content = $view;
   }
   

Код файла конфигурации
Код:
<?php defined('SYSPATH') or die('No direct script access.');

return array(

   // А вот и тот самый непонятный  'group' => 'default' который определялся в контроллере и определяет где ему брать файл вида
   'default' => array(
      'current_page'      => array('source' => 'query_string', 'key' => 'page'), // source: "query_string" or "route"
      'total_items'       => 0,
      'items_per_page'    => 6,
      'view'              => 'pagination/basic',
      'auto_hide'         => TRUE,
      'first_page_in_url' => FALSE,
   ),

Знакомым способом подключаем пагинатор в виде
Код:
<!-- pagination -->
<?php echo $pagination; ?>

В общем как то так, нет необходимости создавать роуты в бутстрапе, достаточно определить группу в конфигурационном файле, модуль вроде бы как для ко3.2 но у меня на 3.3 работает отлично(когда выложу на хостинг поделюсь ссылкой)
Этот вариант пагинации был реализован на основе материала сайта http://kohanaframework.su/ форума и сайта http://cyberapp.ru/2013/01/14/kohana-3- ... m-chast-3/ изложенного по упомянутой ссылке, архив модуля с этого же сайта.
Думаю что ссылка на сторонний ресурс вполне уместна т.к. все кто посещает форум заинтересованны в развитии знаний о кохане, и работе с ней, и чем больше обобщенной информации будет собрано в одном месте тем проще будет работать всем.
Вот такой маленький постик от дилетанта в программировании.
Желаю всем удачи!


Вложения:
Комментарий к файлу: Модуль пагинатора
pagination-3.2-develop.zip [9.63 КБ]
Скачиваний: 295
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Pagination
СообщениеДобавлено: 15 июн 2013, 01:51 
Не в сети
Бывалый

Зарегистрирован: 06 авг 2012, 22:39
Сообщения: 91
query_string не тру. только route, только хардкор


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Pagination
СообщениеДобавлено: 16 июн 2013, 20:24 
Не в сети
Бывалый

Зарегистрирован: 14 июн 2013, 17:19
Сообщения: 82
ORM по моему лучше вообще для этого не трогать... Просто с ним как я понял получается лишний запрос. К тому-же удобно общее количество передавать по ссылке - вроде так пегинатор в Джумле работает... Так не потребуется считать записи.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Pagination
СообщениеДобавлено: 16 июн 2013, 22:27 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 02 апр 2013, 16:26
Сообщения: 474
Откуда: Сергиев Посад
про орм не понял, какой именно лишний запрос там будет? один считает общее кол-во, второй возвращает определенные записи.
другое дело что если используется mysql, то лучше:
SELECT SQL_CALC_FOUND_ROWS * FROM `abc` LIMIT 0, 120
SELECT FOUND_ROWS()

про "количество по ссылке" не сразу понял, молодец, хорошая идея.
еще лучше в кукис с lifetime 15-30 мин, тогда и в ссылку добавлять не надо будет и даже если клиент снова откроет страницу без параметра, то лишнего запроса не будет

для тех кто в танке: если урл не содержит параметра с общим кол-вом записей, то рассчитываем его $videos->count_all() и передаем это значение в пагинатор, чтобы оно учитывалось в новых ссылках. и на других страница не надо будет его считать.

_________________
Майкл Джордан играет в баскетбол. Чарльз Мэнсон убивает людей. Я пишу код. У каждого свой талант.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Pagination
СообщениеДобавлено: 16 июн 2013, 23:12 
Не в сети
Бывалый

Зарегистрирован: 14 июн 2013, 17:19
Сообщения: 82
Кукисы и сессии использовать - правило плохого тона. Это авторизацию без них вроде как невозможно слепить. Я слышал, читал на забре, что Мозилла FF что то хотят намутить с кукисами нехорошего.

С ORM я разбирался, разбирался, как мне тут join приделать, но так и не понял... В итоге вернулся к примитивному SQL. ORM создаёт какой-то запрос "SHOW FULL PROCESSLIST", я не знаю что он значит, но его видно в отладке запросов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Pagination
СообщениеДобавлено: 16 июн 2013, 23:33 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 02 апр 2013, 16:26
Сообщения: 474
Откуда: Сергиев Посад
это получение полей таблицы через list_columns(), бывает в случае если у вас не задано значение $_table_columns в модели, я себе сделал расширение сохраняющее в файл конфигах эти поля если они явно не заданы, в следующий раз они берутся уже из конфига , потом можно его в модель перенести - так будет быстрее.

join с помощью метода (кто бы мог подумать!) join
http://kohanaframework.org/3.3/guide-api/ORM#join

а в чем тут плохой тон? я вижу только сплошные выгоды, особенно если подсчет не тупо общего количества, а еще и по каким-то параметрам.

Такие решения не на уровне мозиллы принимаются, в html 5 продвигается тема хранилищ http://htmlbook.ru/html5/storage

_________________
Майкл Джордан играет в баскетбол. Чарльз Мэнсон убивает людей. Я пишу код. У каждого свой талант.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 4 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Все о фреймворке Kohana  | 
Powered by phpBB® Forum Software © phpBB Group