Сортировка в cgridview с параметрами

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Alyona
Сообщения: 32
Зарегистрирован: 2012.11.20, 15:11

Сортировка в cgridview с параметрами

Сообщение Alyona »

Здравствуйте.
У меня есть список заказов, у каждого заказа есть дата создание. Задача простая - вывести все заказы в диапазоне дат в cgridview. Проблема в том, что даже если я вывожу нужные мне заказы, сортировка по столбикам вернет мне опять все записи по всем датам, а не по диапазону. То же и с фильтром происходит.

Модель:

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

public $start;
public $end;

public function search() {

        $criteria = new CDbCriteria;
        if($this->start != '' && $this->end != ''){
            $criteria->condition="date >= '".$this->start."' AND date <= '".$this->end."'";
        }
        $criteria->compare('id', $this->id);
        $criteria->compare('date', $this->date, true);

        return new CActiveDataProvider($this, array(
            'criteria' => $criteria,
            'pagination'=>array(
                'pageSize'=>'50',
            ),
                ));
    }
Контроллер:

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

$model = new Orders('search');
            $start = ''; // дата начала
            $end = ''; // дата конца
            if(isset($_POST['start']) && $_POST['start']!='' && isset($_POST['end']) && $_POST['end']!=''){
                $start = date("Y-m-d H:i:s", strtotime($_POST['start']));
                $end = date("Y-m-d H:i:s", strtotime($_POST['end']));
            }
            if (isset($_GET['Orders'])){
                $model->attributes = $_GET['Orders'];
            }
            $model->setAttributes(array('start'=>$start,'end'=>$end));
            $this->render('admin', array('model' => $model,'start'=>$start,'end'=>$end));
Вьюшка:

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

$this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'orders-grid',
    'dataProvider'=>$model->search(),
    'filter'=>$model,
    'columns'=>array( ... )));
gashik
Сообщения: 50
Зарегистрирован: 2012.03.21, 16:50
Откуда: Горловка

Re: Сортировка в cgridview с параметрами

Сообщение gashik »

юзайте csort

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

        $sort = new CSort();
        $sort->defaultOrder = 'id ASC';
        $sort->attributes['date'] = array( 
                'asc' => 'date',
                'desc' => 'date desc',
        );

        return new CActiveDataProvider(get_class($this), array(
        'criteria'=>$criteria,
        'sort'=>$sort,
        'pagination'=>array(
            'pageSize'=>50,
        ),
        )); 
Alyona
Сообщения: 32
Зарегистрирован: 2012.11.20, 15:11

Re: Сортировка в cgridview с параметрами

Сообщение Alyona »

У меня проблема не с сортировкой, а с тем, что пропадает условие выбора по датам после нее. Csort проблему не решает.
mass
Сообщения: 71
Зарегистрирован: 2011.11.09, 15:03
Откуда: Москва
Контактная информация:

Re: Сортировка в cgridview с параметрами

Сообщение mass »

Мне кажется что тут дело в перепутывании $_GET и $_POST
Фильтр и сортировка - все отправляют в $_GET
Следовательно, вы проверяете $_POST, но проверка не проходит, ибо его нету.
Далее, присваиваете атрибутам $_GET данные, это верно вы делаете.
А дальше, т.к. $_POST не был определен и переменные $start и $end соответственно пустые, то вы перетираете уже занесенные значения пустышками.
Alyona
Сообщения: 32
Зарегистрирован: 2012.11.20, 15:11

Re: Сортировка в cgridview с параметрами

Сообщение Alyona »

А как тогда можно передать в таблицу сторонние значения?
Последний раз редактировалось Alyona 2013.08.16, 07:55, всего редактировалось 1 раз.
Аватара пользователя
sluchainiyznak
Сообщения: 617
Зарегистрирован: 2013.05.19, 17:51
Откуда: ХМАО-Югра, г. Сургут
Контактная информация:

Re: Сортировка в cgridview с параметрами

Сообщение sluchainiyznak »

Это действие отвечает за сортировку?
Вообще то это действие отвечает за массовое присваивание значений при, в вашем случае, гет-запросе
Аватара пользователя
sluchainiyznak
Сообщения: 617
Зарегистрирован: 2013.05.19, 17:51
Откуда: ХМАО-Югра, г. Сургут
Контактная информация:

Re: Сортировка в cgridview с параметрами

Сообщение sluchainiyznak »

Возможно я не понимаю, в каком месте и как происходит сортировка и фильтр в CGridView. Может тогда кто объяснит?
Возьмите пример блога, который идет с Yii и посмотрите как там реализован фильтр, самое, на мой взгляд, простое решение
Alyona
Сообщения: 32
Зарегистрирован: 2012.11.20, 15:11

Re: Сортировка в cgridview с параметрами

Сообщение Alyona »

Я искала фильтр с диапазоном дат, но не нашла. Разве в Yii блоге есть такой?
Alyona
Сообщения: 32
Зарегистрирован: 2012.11.20, 15:11

Re: Сортировка в cgridview с параметрами

Сообщение Alyona »

Даже если написать так:

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

if (isset($_GET['Orders'])){
	            $model->attributes = $_GET['Orders'];
	            $model->setAttributes(array('start'=>'2013-08-01 23:48:43','end'=>'2013-08-07 23:48:43'));
	        }
Все равно ничего не срабатывает. Выводятся все даты.
Аватара пользователя
sluchainiyznak
Сообщения: 617
Зарегистрирован: 2013.05.19, 17:51
Откуда: ХМАО-Югра, г. Сургут
Контактная информация:

Re: Сортировка в cgridview с параметрами

Сообщение sluchainiyznak »

Там показано как реализован фильтр в принципе, а дальше уже полет вашей фантазии
Аватара пользователя
sluchainiyznak
Сообщения: 617
Зарегистрирован: 2013.05.19, 17:51
Откуда: ХМАО-Югра, г. Сургут
Контактная информация:

Re: Сортировка в cgridview с параметрами

Сообщение sluchainiyznak »

чтоб фильтр работал у вас должна быть запись, что то типа $model->search()
Alyona
Сообщения: 32
Зарегистрирован: 2012.11.20, 15:11

Re: Сортировка в cgridview с параметрами

Сообщение Alyona »

sluchainiyznak писал(а):Там показано как реализован фильтр в принципе, а дальше уже полет вашей фантазии
)))) Спасибо, я уже поняла, что нужно самой сделать ))) Вот и пытаюсь.
Alyona
Сообщения: 32
Зарегистрирован: 2012.11.20, 15:11

Re: Сортировка в cgridview с параметрами

Сообщение Alyona »

sluchainiyznak писал(а):чтоб фильтр работал у вас должна быть запись, что то типа $model->search()
У меня есть надпись $model = new Orders('search'); - стандартная вроде.
Аватара пользователя
sluchainiyznak
Сообщения: 617
Зарегистрирован: 2013.05.19, 17:51
Откуда: ХМАО-Югра, г. Сургут
Контактная информация:

Re: Сортировка в cgridview с параметрами

Сообщение sluchainiyznak »

Эта надпись всего лишь создает экземпляр модели и присваивает ему поведение search, в rules у вас наверняка прописано что то типа array(...., 'on'=> 'search')
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: Сортировка в cgridview с параметрами

Сообщение yiijeka »

где у вас во вьюшке фильтр? то просто поле в таблице, в которое вы ввводите вручную дату или это форма отдельная от таблицы?
Alyona
Сообщения: 32
Зарегистрирован: 2012.11.20, 15:11

Re: Сортировка в cgridview с параметрами

Сообщение Alyona »

У меня 2 поля отдельно от таблицы, в которых я задаю начальную и конечную даты.
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: Сортировка в cgridview с параметрами

Сообщение yiijeka »

Покажите ? ;)

Есть ещё замечательная штука http://www.dangrossman.info/2012/08/20/ ... bootstrap/
Она красиво встраивается в таблицу, туда, где все остальные фильтры в горизонтали под шапкой расположены. Всё красиво работает, но это так для кругозора вам...
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: Сортировка в cgridview с параметрами

Сообщение yiijeka »

И я правильно понял, т.е. эта форма ваша она работает - возвращаются верный диапазон записей. Но как только вы нажимаете сортировку или что либо ещё в фильтрах, этот диапазон сбрасывается?
Alyona
Сообщения: 32
Зарегистрирован: 2012.11.20, 15:11

Re: Сортировка в cgridview с параметрами

Сообщение Alyona »

С бутстрапом пробовала - совсем в нем запуталась. Не разобралась, что там за версии. Вроде использую новую, а половины файлов в ней нет.

Делаю во вьюшке так:

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


echo "<form actin='/orders/admin' method='POST'><h4>Выбрать заказы</h4><br/>";
echo "с "; $this->widget('zii.widgets.jui.CJuiDatePicker',
                    array(
                        'name'=>'start',
                        'value' => $start != ''?date("d.m.Y", strtotime($start)):'',
                        'language' => 'ru',
                        'options' => array(
                            'dateFormat'=>'dd.mm.yy',
                            'changeMonth' => 'true',
                            'changeYear' => 'true',
                            'constrainInput' => 'false',
                            'duration'=>'fast',
                            'showAnim' =>'slide',
                        ),
                    )
                );

echo " по "; $this->widget('zii.widgets.jui.CJuiDatePicker',
                    array(
                        'name'=>'end',
                        'value' => $end != ''?date("d.m.Y", strtotime($end)):'',
                        'language' => 'ru',
                        'options' => array(
                            'dateFormat'=>'dd.mm.yy',
                            'changeMonth' => 'true',
                            'changeYear' => 'true',
                            'constrainInput' => 'false',
                            'duration'=>'fast',
                            'showAnim' =>'slide',
                        ),
                    )
                );
echo "&nbsp;<input type='submit' value='показать'></form>";
echo $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'orders-grid',
    'dataProvider'=>$model->search(),
    'filter'=>$model, ...... //сама таблица
Что в контроллере и в модели, написано в первом сообщении. После POST выбираются нужные даты, но в новой таблице, если жать на любой фильтр или сортировку, то сбрасываются настройки. Думаю вот, как же передать эти сторонние настройки в таблицу.
Alyona
Сообщения: 32
Зарегистрирован: 2012.11.20, 15:11

Re: Сортировка в cgridview с параметрами

Сообщение Alyona »

yiijeka писал(а):И я правильно понял, т.е. эта форма ваша она работает - возвращаются верный диапазон записей. Но как только вы нажимаете сортировку или что либо ещё в фильтрах, этот диапазон сбрасывается?
Да, все верно.
Ответить