zii.widgets.grid.CGridView тонкая настройка

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

zii.widgets.grid.CGridView тонкая настройка

Сообщение vasil14 »

Стало интересно на сколько сильно можно настроить zii.widgets.grid.CGridView под себя. Поля фильтров можно сделать селектом. А можно ли сделать поле DatePicker или AutoComplete. Конечно это можно сделать вручную через js. Но Yii предлагает нам библиотеки zii.widgets.jui.CJuiDatePicker и zii.widgets.jui.CJuiAutoComplete. Кто то задумывался над этим. Еще стало интересно почему Yii предлагает хранение даты создания записи и любую другую дату в типе int а не date или datetime
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: zii.widgets.grid.CGridView тонкая настройка

Сообщение samdark »

Можно, см. CGridColumn.
vasil14
Сообщения: 67
Зарегистрирован: 2011.02.09, 02:15

Re: zii.widgets.grid.CGridView тонкая настройка

Сообщение vasil14 »

Спасибо за подсказку. Попробовал реализовать. Вот что вышло
Файл CDatePickerColumn.php в protected/components (место расположение его мне не нравится. куда лучше поместить бы? самое логичное расположение в zii/widgets/grid/ но это фреймворк... )

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

<?php
Yii::import('zii.widgets.grid.CDataColumn');
class DatePickerColumn extends CDataColumn
{
    public $datePicker = array();

    protected function renderFilterCellContent()
    {
        $options = array_merge($this->datePicker, array(
            'model' => $this->grid->filter,
            'attribute' => $this->name,
        ));
        $widget = Yii::app()->getWidgetFactory()->createWidget($this, 'zii.widgets.jui.CJuiDatePicker', $options);
        $widget->init();
        $widget->run();
    }
}
 
Применение

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

<?php $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'category-grid',
    'dataProvider'=>$model->search(),
    'filter'=>$model,
    'columns'=>array(
        'id',
        'name',
        array(
            'name' => 'update_time',
            'class' => 'DatePickerColumn',
            'datePicker' => array(
                'language' => 'ru',
            ),
        ),
        array(
            'class'=>'CButtonColumn',
        ),
   ),
)); ?>
Вопрос заключается вот в чем. Расширения Yii я не писал еще. Потому уверен что накосячил =) Хотелось бы знать что можно было сделать проще и что я сделал не так. Спасибо за внимание. Очень радует что вы прилагаете столько усилий для поддержания русского комьюнити
vasil14
Сообщения: 67
Зарегистрирован: 2011.02.09, 02:15

Re: zii.widgets.grid.CGridView тонкая настройка

Сообщение vasil14 »

Нашел баг. При применении фильтра датапикер второй раз не открывается.
Оно и не удивительно. Ведь формочка обновляется, а js подключен внизу.
Аватара пользователя
nizsheanez
Сообщения: 814
Зарегистрирован: 2011.04.29, 13:09
Откуда: Москва

Re: zii.widgets.grid.CGridView тонкая настройка

Сообщение nizsheanez »

fjuidatepicker в помощь
qwerty_nor
Сообщения: 7
Зарегистрирован: 2011.08.23, 15:20

Re: zii.widgets.grid.CGridView тонкая настройка

Сообщение qwerty_nor »

vasil14 писал(а):Нашел баг. При применении фильтра датапикер второй раз не открывается.
Оно и не удивительно. Ведь формочка обновляется, а js подключен внизу.
Такая же проблема с CJuiAutocomplete.
Кто то может сталкивался, как можно исправить?
che
Сообщения: 62
Зарегистрирован: 2011.09.11, 10:51
Откуда: Екатеринбург

Re: zii.widgets.grid.CGridView тонкая настройка

Сообщение che »

qwerty_nor писал(а):
vasil14 писал(а):Нашел баг. При применении фильтра датапикер второй раз не открывается.
Оно и не удивительно. Ведь формочка обновляется, а js подключен внизу.
Такая же проблема с CJuiAutocomplete.
Кто то может сталкивался, как можно исправить?
http://www.yiiframework.com/doc/api/1.1 ... ate-detail
Demon_id
Сообщения: 421
Зарегистрирован: 2011.10.29, 00:13

Re: zii.widgets.grid.CGridView тонкая настройка

Сообщение Demon_id »

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

    $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'orders-grid',
    'dataProvider'=>$model->search(),
    'filter'=>$model,
    'afterAjaxUpdate'=>"function(id, data) {
        jQuery('#date_from').datepicker(jQuery.datepicker.regional['id'], {'dateFormat':'dd/mm/yy'});
        jQuery('#date_to').datepicker(jQuery.datepicker.regional['id'], {'dateFormat':'dd/mm/yy'});

    }",
...


        array(
            'name'=>'event_date',
            'header'=>'Date',
            'filter'=>
                $this->widget('CJuiDateTimePicker',array(
                    'model'=>$model, //Model object
                    'language'=>'',
                    'attribute'=>'date_from', //attribute name
                    'mode'=>'date', //use "time","date" or "datetime" (default)
                    'htmlOptions'=>array('class'=>'input date', 'placeholder'=>'Date from', 'id'=>'date_from'),
                    'options'=>array(
                        'dateFormat'=> 'dd/mm/yy',
                    )
                ),  true) . 
                $this->widget('CJuiDateTimePicker',array(
                    'model'=>$model, //Model object
                    'language'=>'',
                    'attribute'=>'date_to', //attribute name
                    'mode'=>'date', //use "time","date" or "datetime" (default)
                    'htmlOptions'=>array('class'=>'input date', 'placeholder'=>'Date to', 'id'=>'date_to'),
                    'options'=>array(
                        'dateFormat'=> 'dd/mm/yy',
                    )
                ),  true) 
            ,
            'value'=>'date("Y-m-d H:i", strtotime($data->event_date))'
        ),
 
Аватара пользователя
Ivan Ozercov
Сообщения: 53
Зарегистрирован: 2012.03.21, 15:53
Откуда: Минск

Re: zii.widgets.grid.CGridView тонкая настройка

Сообщение Ivan Ozercov »

Скопипастил последний код, заменил на свои значения, что мне надо выдаёт ошибку Property "CDataColumn.0" is not defined.

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

Yii::import('application.extensions.datepicker.CJuiDateTimePicker');
$this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'reviews-grid',
    'dataProvider'=>$model->search(),
    'filter'=>$model,
    'afterAjaxUpdate'=>"function(id, data) {
        jQuery('#date_from').datepicker(jQuery.datepicker.regional['id'], {'dateFormat':'dd/mm/yy'});
        jQuery('#date_to').datepicker(jQuery.datepicker.regional['id'], {'dateFormat':'dd/mm/yy'});

    }",
      'columns'=>array(
        array(
            'class'=>'CCheckBoxColumn'
        ),
        array(
          'name'=>'time',
          'header'=>'Date',
          'filter'=>
          $this->widget('CJuiDateTimePicker',array(
              'model'=>$model, //Model object
              'language'=>'',
              'attribute'=>'date_from', //attribute name
              'mode'=>'date', //use "time","date" or "datetime" (default)
              'htmlOptions'=>array('class'=>'input date', 'placeholder'=>'Date from', 'id'=>'date_from'),
              'options'=>array(
                  'dateFormat'=> 'dd/mm/yy',
              )
          ),  true),
          $this->widget('CJuiDateTimePicker',array(
              'model'=>$model, //Model object
              'language'=>'',
              'attribute'=>'date_to', //attribute name
              'mode'=>'date', //use "time","date" or "datetime" (default)
              'htmlOptions'=>array('class'=>'input date', 'placeholder'=>'Date to', 'id'=>'date_to'),
              'options'=>array(
                  'dateFormat'=> 'dd/mm/yy',
              )
          ),  true),
          'value'=>'date("Y-m-d H:i", strtotime($data->time))'

        ),
        array(
            'class'=>'CButtonColumn',
            'template' => '{delete}{update}',
        ),
    ),
)); ?>
Чем может быть вызвана эта ошибка?
Аватара пользователя
nizsheanez
Сообщения: 814
Зарегистрирован: 2011.04.29, 13:09
Откуда: Москва

Re: zii.widgets.grid.CGridView тонкая настройка

Сообщение nizsheanez »

Вполне возможно что вот это
array(
'class'=>'CCheckBoxColumn'
),
хочет name
хотя я не уверен.
Аватара пользователя
Ivan Ozercov
Сообщения: 53
Зарегистрирован: 2012.03.21, 15:53
Откуда: Минск

Re: zii.widgets.grid.CGridView тонкая настройка

Сообщение Ivan Ozercov »

уже понял в чем дело, поставил , вместо . межуд двумя $this->widget выводящих календарь

У меня в базе хранится дата в виде строки вида 2012-04-03 15:56:09. Почему то при выполнении фильтрации по диапазону ничего не находит часть метода search() представлена ниже

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

        if((isset($this->date_first) && trim($this->date_first) != "") && (isset($this->date_last) && trim($this->date_last) != ""))
            $criteria->addBetweenCondition('time', ''.$this->date_first.'', ''.$this->date_last.'');

        return new CActiveDataProvider(get_class($this), array(
            'criteria'=>$criteria,
        ));
Может у кого есть идеи по этому поводу?
Аватара пользователя
nizsheanez
Сообщения: 814
Зарегистрирован: 2011.04.29, 13:09
Откуда: Москва

Re: zii.widgets.grid.CGridView тонкая настройка

Сообщение nizsheanez »

addBetweenCondition
ухты, а че так можно было?)
Аватара пользователя
nizsheanez
Сообщения: 814
Зарегистрирован: 2011.04.29, 13:09
Откуда: Москва

Re: zii.widgets.grid.CGridView тонкая настройка

Сообщение nizsheanez »

посмотри какой запрос генерится. и попробуй его ручками выполнить
Аватара пользователя
Ivan Ozercov
Сообщения: 53
Зарегистрирован: 2012.03.21, 15:53
Откуда: Минск

Re: zii.widgets.grid.CGridView тонкая настройка

Сообщение Ivan Ozercov »

пробывал руками выполнить. Просто тут такое дело, получается, что сравниваются строки и поэтому, результат выдается не тот который мне нужен.
Аватара пользователя
nizsheanez
Сообщения: 814
Зарегистрирован: 2011.04.29, 13:09
Откуда: Москва

Re: zii.widgets.grid.CGridView тонкая настройка

Сообщение nizsheanez »

какие еще строки?
pashkash
Сообщения: 11
Зарегистрирован: 2012.03.27, 15:29

Re: zii.widgets.grid.CGridView тонкая настройка

Сообщение pashkash »

проходил мимо, хочется добавить ещё, что мне приходится добавлять:
'htmlOptions' => array('value' => $_GET['Questions']['date_update_from']),
к 'filter' => $this->widget('zii.widgets.jui.CJuiDatePicker', array( ... ))
чтобы при изменения даты пользователем в календаре после перезагрузки гридвью - выбранная дата сохранялась..

полный пример:

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

        array(
                    'name' => 'date_update',
                    'htmlOptions'=>array('class'=>'input-small'),
                    
                    'filter' => $this->widget('zii.widgets.jui.CJuiDatePicker', array(
                        'attribute' => 'date_update_from',
                        'id' => 'date_update_from',
                        'model' => $model,
                        'language'=>Yii::app()->getLanguage(),
                        'htmlOptions' => array('value' => $_GET['Questions']['date_update_from']),
                        'value' => $data->date_update_from,
                        'options' => array(
                            'showButtonPanel' => true,
                            'changeYear' => true,
                            'dateFormat' => 'yy-mm-dd',
                            ),
                        ), true).' - '.$this->widget('zii.widgets.jui.CJuiDatePicker', array(
                        'attribute' => 'date_update_to',
                        'id' => 'date_update_to',
                        'model' => $model,
                        'htmlOptions' => array('value' => $_GET['Questions']['date_update_to']),
                        'language'=>Yii::app()->getLanguage(),
                        'options' => array(
                            'showButtonPanel' => true,
                            'changeYear' => true,
                            'dateFormat' => 'yy-mm-dd',
                            ),
                        ), true),
              ),
 
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: zii.widgets.grid.CGridView тонкая настройка

Сообщение anton44eg »

мне кажется нужно добавить модели аттрибуты date_update_from и date_update_to
pashkash
Сообщения: 11
Зарегистрирован: 2012.03.27, 15:29

Re: zii.widgets.grid.CGridView тонкая настройка

Сообщение pashkash »

они добавлены у меня так:
abstract class BaseQuestions extends GxActiveRecord {
public $date_update_from;
public $date_update_to;
..

в validate safe в search включены..

надо как-то иначе?.
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: zii.widgets.grid.CGridView тонкая настройка

Сообщение anton44eg »

в модели правильно.
а как у вас в методе search проверяется соответсвие этому промежутку?
pashkash
Сообщения: 11
Зарегистрирован: 2012.03.27, 15:29

Re: zii.widgets.grid.CGridView тонкая настройка

Сообщение pashkash »

мой генератор генерит $criteria тоже с $_GET, ибо через $this не проканало..
если почитаю на досуге как это делать правильно или лучше - отпишусь..
Ответить