TIP: Use Markdown or, <pre> for multi line code blocks / <code> for inline code.
These forums are read-only and for archival purposes only!
Please join our new forums at discourse.kohanaframework.org
Kohana 3.3 не работает модуль pagination
  • Добрый день. Столкнулся с проблемой. Модуль при передачи данных в шаблон показывает ошибку: "ErrorException [ Fatal Error ]: Method Pagination::__toString() must not throw an exception"

    Роут:

    Route::set('category_pagination', '/page-()', array('category' => '.+', 'page' => '[0-9]+'))
        ->defaults(array(
            'controller' => 'category',
            'action'     => 'index',
        ));
    

    Код роута почему то обрезает, поэтому скрин: http://clip2net.com/s/6Zjcdn Контролер:

        $post_all = ORM::factory('Category', $category_id); 
        $total_items =  $post_all->posts->where('status', '=', 'publication')->count_all();
        $pagination = Pagination::factory(array('total_items' => $total_items));
        $this->template->pagination =  $pagination;
        $post = $post_all->posts->where('status', '=', 'publication')
                         ->order_by('popular', 'DESC')
                         ->limit($pagination->items_per_page)
                         ->offset($pagination->offset)
                         ->find_all();
    

    Конфиг пагинатора:

        // Application defaults
        'default' => array(
            'current_page'      => array('source' => 'route', 'key' => 'page'), // source: "query_string" or "route"
            'total_items'       => 0,
            'items_per_page'    => 10,
            'view'              => 'pagination/basic',
            'auto_hide'         => TRUE,
            'first_page_in_url' => FALSE,
        ),
    

    В views:

    <?php echo $pagination; ?>
    

    Когда ставлю 'current_page' => array('source' => 'query_string' - всё начинает работать, но такое формирование урлов мне не подходит.

    Есть идеи куда копать? По самой ошибки такое ощущение что я пытаюсь передать в вид, не те данные которые нужно, но пока понять как передать правильно не понял. Надеюсь на совет) Всем спасибо за внимание.

  • код оберни в pre тег непонятно нефига

  • Обернул.

  • '/page-()' wtf? ))

  • Обрезает код, поэтому скрин сделал: http://clip2net.com/s/6Zjcdn

    1. попробуй вызывать как <?php echo $pagination ->render(); ?>
    2. задать в роуте параметры по умолчанию для всех элементов
    3. http://forum.kohanaframework.org/discussion/12254/pagination-module#Item_7
    1. Вызвал, выдало: Kohana_Exception [ 0 ]: Required route parameter not passed: category Я так пониманию, необходимо пережать данные контролера и роутера, но в модуле нет метода route_params(). Скачивал отсюда: https://github.com/dasfisch/kohana-pagination-3.3

    2 - буду пробовать. 3 - в английском не силён, но разобраться попробую)

    1. Все параметры роутера, задал без регулярных выражений для одного урла, эффект тот же.
  • @livemirsi параметры по умолчанию ->defaults() значит

  • Извините, не пойму что сделать с роутером надо)

  • ->defaults(array(
        'controller' => 'Category',
        'action'     => 'index',
        'page'       => 0,
        'category'   => '', // ?!
    ));
    
  • Пагинация начала отображаться, но показывает адреса вместо

    site.ru/page-0
    site.ru/page-1
    site.ru/page-2
    

    а должны быть:

    /cat1/cat2/cat3/page-0
    /cat1/cat2/cat3/page-1
    /cat1/cat2/cat3/page-3
    

    Я так подозреваю из за этого 'category' => ''.

  • @livemirsi нет 'category' => ''. это значение по умолчанию, а текущее должно передаваться через Request:

    $pagination = Pagination::factory(array('total_items' => $total_items), $this->request);
    
  • Я так понимаю надо передать данные через:

    $this->request->param();
    

    Пока читаю документацию, не особо выходит(

  • @livemirsi что-то ты совсем не догоняешь (( вначале прочти мануал http://kohanaframework.su/, а потом приходи с вопросами.

  • Напутал получение с передачей). Суть в чём как я думаю, в роутере, мы установили пустое значение параметра 'category'. Но не передали модулю новые значение параметра 'category', соответственно при рендеринге, урлы ссылок формируются не правильно. $pagination = Pagination::factory(array('total_items' => $total_items), $this->request);

    Я так понял это примерная строчка от вас, так метод Pagination::factory может принимать только array $config = array(), передает или переустанавливает параметры модуля. Что бы всё заработало надо получить значение параметра роутреа 'category' и передать его в модуль.

  • не верно ты все понял.

    1. "это примерная строчка" public static function factory(array $config = array(), Request $request = NULL) поэтому Pagination::factory(array('total_items' => $total_items), $this->request) вызывается в контроллере нормально.

    2. "значение параметра роутреа 'category'" ты и так поредаешь в пагинатор через $this->request

  • Ну я к чему, я прописал предложенную вами конструкцию, почему то урлы по прежнему формируются не правильно.
    Может из этого, в файле Pagination.php

        public static function factory(array $config = array())
        {
            return new Pagination($config);
        }
    
  • Да, заменив содержимое файла Pagination.php на https://github.com/dasfisch/kohana-pagination-3.3/blob/master/classes/Kohana/Pagination.php#L71 Всё стало работать. Большое спасибо за крепкие нервы и помощь)

  • @livemirsi "Скачивал отсюда: https://github.com/dasfisch/kohana-pagination-3.3" стою я в лыжи обутый...

  • Качал оттуда, да. Но потом пытался менять файл, так как думал что возможно в других версиях заработает. Поэтому произошла ошибка.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

In this Discussion