несколько пагинаций на одной странице

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
sam
Сообщения: 31
Зарегистрирован: 2017.12.14, 18:23

несколько пагинаций на одной странице

Сообщение sam » 2018.02.07, 16:14

Каким образом в Yii 1 делаются несколько пагинаций на одной странице?
(в моем случае 4 разных таблицы на 1 странице)
строение кода везде однотипное, эт понятно.
(второй пагинатор)

Код: Выделить всё

        $criteria_city = new CDbCriteria();
        $criteria_city->select = '*';
        $criteria_city->addCondition("(name is null or name LIKE lower(:name))");
        $criteria_city->order = 'name';
        $criteria_city->params = [
            ':name' => '%' . $name . '%',
        ];
        $criteria_city->limit = 10;
        $page = Yii::app()->request->getParam('page');  // тут думал заменить тоже на 'pages_city'
        $criteria_city->offset = $page ? (($page - 1) * $criteria_city->limit) : 0;

        $count_city = City::model()->count($criteria_city);
        $pages_city = new CPagination($count_city);
        $pages_city->pageSize = 10;
        $pages_city->applyLimit($criteria_city);
        $cityes = City::model()->findAll($criteria_city);

        $this->render('test', [
            'pages' => $pages,
            'tester' => $tester,
            'cityes' => $cityes,
            'pages_city' => $pages_city,
        ]);
а вот во вьюхе, как листать не все таблицы по одной кнопке

Код: Выделить всё

<?php  $this->widget('CLinkPager', array(
    'pages' => $pages,
)) ?>
а, грубо говоря, по второму пагинатору для второй таблицы

Код: Выделить всё

<?php  $this->widget('CLinkPager', array(
    'pages_city' => $pages_city,
)) ?>
Если сделать так, то ругается на "Не определено свойство "CLinkPager.pages_city". " т.е. пагинатор не может работать с не известным ему параметром. в Yii 2 народ пишет, что нужно добавить какойто там параметр чтоб избежать конфликтов. а в 1.1 че делать?

sam
Сообщения: 31
Зарегистрирован: 2017.12.14, 18:23

Re: несколько пагинаций на одной странице

Сообщение sam » 2018.02.07, 16:44

чето похожее на ответ нашел https://stackoverflow.com/questions/420 ... a-view-yii но не понимаю устройства.. мой ли это случай?


sam
Сообщения: 31
Зарегистрирован: 2017.12.14, 18:23

Re: несколько пагинаций на одной странице

Сообщение sam » 2018.02.07, 18:11

эм, и что с этим делать?
ну да, можно изменить на $pageVar='page_city'; и в урле page сменится на page_city.. дак а че толку то?
обращение во вьюхе то всеравно принимается толькно на 'pages'

Код: Выделить всё

<?php $this->widget('CLinkPager', array(
    'pages' => $pages,
    'lastPageLabel' => '>>',
    'firstPageLabel' => '<<',
    'nextPageLabel' => 'След.',
    'prevPageLabel' => 'Пред.',
)) ?>
п.с. конечно, спасибо хоть за какуюто инфу.. просто целый день над этим бьюсь(

urichalex
Сообщения: 616
Зарегистрирован: 2015.08.07, 11:03

Re: несколько пагинаций на одной странице

Сообщение urichalex » 2018.02.07, 23:17

'pages' => $pages

'pages' => $pages_city

sam
Сообщения: 31
Зарегистрирован: 2017.12.14, 18:23

Re: несколько пагинаций на одной странице

Сообщение sam » 2018.02.08, 11:55

ЮричАлекс.. спасибо!)
Последний раз редактировалось sam 2018.02.08, 14:37, всего редактировалось 1 раз.

sam
Сообщения: 31
Зарегистрирован: 2017.12.14, 18:23

Re: несколько пагинаций на одной странице

Сообщение sam » 2018.02.08, 14:35

Код: Выделить всё

$pages_city->applyLimit($criteria_city);
строка оказалась лишней везде. с ней пагинация не происходила.. удалил и все норм.
Конечный кусок кода выглядит так:

Код: Выделить всё

    public function actionAbout($code = null, $name = null)
    {
        $criteria = new CDbCriteria();
        $criteria->select = '*';
        $criteria->addCondition("(code is null OR code LIKE :code)");
        $criteria->order = 'fio';
        $criteria->params = [
            ':code' => '%' . $code . '%',
        ];
        $criteria->limit = 10;
        $page = Yii::app()->request->getParam('page');
        $criteria->offset = $page ? (($page - 1) * $criteria->limit) : 0;
        $count = Test::model()->count($criteria);
        $pages = new CPagination($count);
        $pages->pageSize = 10;
		        $tests = test::model()->findAll($criteria);

        $criteria_city = new CDbCriteria();
        $criteria_city->select = '*';
        $criteria_city->addCondition("(name is null or name LIKE lower(:name))");
        $criteria_city->order = 'name';
        $criteria_city->params = [
            ':name' => '%' . $name . '%',
        ];
        $criteria_city->limit = 10;
        $page_scroll_city = Yii::app()->request->getParam('pages_city');      //  2)
        $criteria_city->offset = $page_scroll_city ? (($page_scroll_city - 1) * $criteria_city->limit) : 0;
        $count_city = City::model()->count($criteria_city);
        $pages_city = new CPagination($count_city);
        $pages_city->pageSize = 10;
    		        $cityes = City::model()->findAll($criteria_city);

        $pages_city->pageVar = 'pages_city';  			//  1)

        $this->render('about', [
            'pages' => $pages,
            'tests' => $tests,
            'cityes' => $cityes,
            'pages_city' => $pages_city,    // 3)
        ]);
    }
    
    
    
<?php  $this->widget('CLinkPager', array(
    'pages' => $pages,
)) ?>
    
    
<?php $this->widget('CLinkPager', array(
    'pages' => $pages_city,   //  4)
    'lastPageLabel' => '>>',
    'firstPageLabel' => '<<',
    'nextPageLabel' => 'След.',
    'prevPageLabel' => 'Пред.',
)) ?>    

Ответить