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

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

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




Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: Paginator
СообщениеДобавлено: 17 дек 2012, 00:07 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 23 июл 2012, 21:58
Сообщения: 100
Доброго времени суток.
Открыл для себя этот, многими используемый, модуль.
Все настроил, прикрутил в тему через вьюшку, все гуд.
Сейчас стоит задача следующего характера.
На страницу, точнее на инфу, где подключен пагинатор налаживается определенный фильтр, и при переходе на вторую страницу он соответственно сбрасывается.
Как я вижу выход:
Беру вьюшку пагинатора и все линки/ссылки переделываю на бутоны, нужный путь в форму, параметры в скрытые инпуты.
Может есть другой выход? Или этот вполне приемлем?
..я пока не пробовал, просто предпологаю/спрашиваю..


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Paginator
СообщениеДобавлено: 17 дек 2012, 00:48 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 23 июл 2012, 21:58
Сообщения: 100
..дополняю..
У меня на страницы, при первом заходе, отображаются, допустим, все пользователи с их описание, по которым и буду фильровать.
Преположительно пользователей ==100, пагинатор бъет по 20 записей на страницу, итого 5-ть страниц.
Допустим, фильтранул всех менеджеров и их оказалось 30 человек, следовательно пагинатор показал две страницы.
Но при переходе на вторую страницу фильтр сбрасывается и показывается вторая страница всех пользователей.
Предположив что дело в контроллере, я убрал первый вывод списка пользователей и пагинатор в целом, то есть без фильтра не выводится.
Делаю фильтр, получаю 30 записей-> 2-е стрнаицы. Жмакаю вторую, пусто.
Как так получается? Что не учел? И куда читать?
С уважением, Роман.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Paginator
СообщениеДобавлено: 17 дек 2012, 01:13 
Не в сети
Бывалый

Зарегистрирован: 29 сен 2012, 00:30
Сообщения: 65
Откуда: Рига, Латвия
Вам надо применять пагинатор ДО того как применяете фильтрацию. Т.е. сначала фильтруете, потом закидываете в пагинатор total count и т.п.
На самой странице конечно все ссылкам просто добавьте конец параметры фильтрации, так что в контроллере можно будет достать их через $_GET.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Paginator
СообщениеДобавлено: 17 дек 2012, 01:39 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 23 июл 2012, 21:58
Сообщения: 100
Простите меня, но вы меня запутали:
Zorato писал(а):
Вам надо применять пагинатор ДО того как применяете фильтрацию.

Zorato писал(а):
Т.е. сначала фильтруете, потом закидываете в пагинатор total count и т.п.

Как то не вяжется. Я делаю как во второй цитате, если что, не работает..
Теоретически я сделал выборку из базы по параметрам, но при переходе на вторую страницу получаю пусто.
Я вижу работу пагинатора - он просто манипулирует массивом, и ему должно быть фиолетово как этот массив получил он, фильтром ли или из конфига, разве нет?
Zorato писал(а):
На самой странице конечно все ссылкам просто добавьте конец параметры фильтрации, так что в контроллере можно будет достать их через $_GET.

Разве не получиться, что я каждый раз по гету буду делать новый(тот же самый) фильтр и попадать на первую страницу?
То есть нужно передать что то еще в get, что бы сделать фильтр за вычетом тех данных, которые были на прошлой страницы.
..предположительно число, потом в запросе убрать это кол-во..как то глуповато, да и гет юзать не хотца, зачем запрос светить..


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Paginator
СообщениеДобавлено: 18 дек 2012, 03:43 
Не в сети
Бывалый

Зарегистрирован: 29 сен 2012, 00:30
Сообщения: 65
Откуда: Рига, Латвия
borodatych писал(а):
Простите меня, но вы меня запутали

Действительно, извините, там должно было быть слово "после".
Цитата:
Разве не получиться, что я каждый раз по гету буду делать новый(тот же самый) фильтр и попадать на первую страницу?
То есть нужно передать что то еще в get, что бы сделать фильтр за вычетом тех данных, которые были на прошлой страницы.
..предположительно число, потом в запросе убрать это кол-во..как то глуповато, да и гет юзать не хотца, зачем запрос светить..

Получиться не должно, у вас после фильтрации запрос в базу должен возвращать одинаковый total count для пагинатора, а пользователь будет запрашивать разные страницы - соответственно пагинатор будет возвращать разный offset для запросов в базу.
Если не хотите светить параметры в урле, то храните их в сессии. Единственный минус - пользователь не сможет отправить другу ссылку на 3ю страницу отфильтрованного списка, т.к. все параметры только у него в сессии.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Paginator
СообщениеДобавлено: 18 дек 2012, 10:56 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 23 июл 2012, 21:58
Сообщения: 100
Zorato писал(а):
Получиться не должно, у вас после фильтрации запрос в базу должен возвращать одинаковый total count для пагинатора, а пользователь будет запрашивать разные страницы - соответственно пагинатор будет возвращать разный offset для запросов в базу.

Если не сложно, что такое offset? ..можно линком..


Zorato писал(а):
Единственный минус - пользователь не сможет отправить другу ссылку на 3ю страницу отфильтрованного списка, т.к. все параметры только у него в сессии.

Пожалуй вы меня убедили поюзать гет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Paginator
СообщениеДобавлено: 19 дек 2012, 01:12 
Не в сети
Бывалый

Зарегистрирован: 29 сен 2012, 00:30
Сообщения: 65
Откуда: Рига, Латвия
borodatych писал(а):
Если не сложно, что такое offset? ..можно линком..

Примерно так: http://www.tigir.com/paging.htm
На счет постраничного вывода, я использую примерно такой код для выборки заказов:
Код:
 $pagination = Pagination::factory(array('total_items'      => ORM::factory('order')->count_all(),
                                                'items_per_page'    => 20,
                                                'view'              => 'pagination/floating',
                                                'current_page'      => array('source' => 'route', 'key' => 'page'),
        ))->route_params(array(
                                                'directory'  => 'admin',
                                                'controller' => 'order',
                                                'action'     => 'index',
        ));
        $orders = ORM::factory('order')
        ->order_by('time','DESC')
        ->limit($pagination->items_per_page)
        ->offset($pagination->offset)
        ->find_all();

Проверьте, может вы не указываете limit или offset.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Paginator
СообщениеДобавлено: 19 дек 2012, 08:04 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 23 июл 2012, 21:58
Сообщения: 100
to Zorato
Благодарю за пример, но я уже настроил.
Воспользовался советом и испоьзовал гет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Paginator
СообщениеДобавлено: 09 фев 2013, 14:04 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 23 июл 2012, 21:58
Сообщения: 100
Доброго времени суток.
..разрешите продолжить...
Решил заюзать пагинатор на index контроллере.
И получаю такую некрасивость:
Код:
index/index/page2

Как можно избавиться от этих index/index?
Когда юзал в конкретном контроллере, еще смотрелось чуток, к пр:
Код:
cat/index/page2

Конечно можно и сейчас переименовать контроллер, но это не выход, на сколько могу предположить.
Может можно как то роутами обыграть?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Paginator
СообщениеДобавлено: 10 фев 2013, 01:47 
Не в сети
Бывалый

Зарегистрирован: 29 сен 2012, 00:30
Сообщения: 65
Откуда: Рига, Латвия
Код:
Route::set('index_pagination', 'page(/<page>)',array('page'=>'[0-9]+'))
   ->defaults(array(
      'controller' => 'index',
      'action'     => 'index',
                'page'       => 1,
   ));

примерно так


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

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


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

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


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

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