zii.widgets.grid.CGridView тонкая настройка
zii.widgets.grid.CGridView тонкая настройка
Стало интересно на сколько сильно можно настроить 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 тонкая настройка
Можно, см. CGridColumn.
Нравится Yii? Давайте сделаем его лучше!.
Re: zii.widgets.grid.CGridView тонкая настройка
Спасибо за подсказку. Попробовал реализовать. Вот что вышло
Файл CDatePickerColumn.php в protected/components (место расположение его мне не нравится. куда лучше поместить бы? самое логичное расположение в zii/widgets/grid/ но это фреймворк... )
Применение
Вопрос заключается вот в чем. Расширения Yii я не писал еще. Потому уверен что накосячил =) Хотелось бы знать что можно было сделать проще и что я сделал не так. Спасибо за внимание. Очень радует что вы прилагаете столько усилий для поддержания русского комьюнити
Файл 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',
),
),
)); ?>
Re: zii.widgets.grid.CGridView тонкая настройка
Нашел баг. При применении фильтра датапикер второй раз не открывается.
Оно и не удивительно. Ведь формочка обновляется, а js подключен внизу.
Оно и не удивительно. Ведь формочка обновляется, а js подключен внизу.
- nizsheanez
- Сообщения: 814
- Зарегистрирован: 2011.04.29, 13:09
- Откуда: Москва
Re: zii.widgets.grid.CGridView тонкая настройка
fjuidatepicker в помощь
-
- Сообщения: 7
- Зарегистрирован: 2011.08.23, 15:20
Re: zii.widgets.grid.CGridView тонкая настройка
Такая же проблема с CJuiAutocomplete.vasil14 писал(а):Нашел баг. При применении фильтра датапикер второй раз не открывается.
Оно и не удивительно. Ведь формочка обновляется, а js подключен внизу.
Кто то может сталкивался, как можно исправить?
Re: zii.widgets.grid.CGridView тонкая настройка
http://www.yiiframework.com/doc/api/1.1 ... ate-detailqwerty_nor писал(а):Такая же проблема с CJuiAutocomplete.vasil14 писал(а):Нашел баг. При применении фильтра датапикер второй раз не открывается.
Оно и не удивительно. Ведь формочка обновляется, а js подключен внизу.
Кто то может сталкивался, как можно исправить?
Re: zii.widgets.grid.CGridView тонкая настройка
Код: Выделить всё
$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 тонкая настройка
Скопипастил последний код, заменил на свои значения, что мне надо выдаёт ошибку 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 тонкая настройка
Вполне возможно что вот это
array(
'class'=>'CCheckBoxColumn'
),
хочет name
хотя я не уверен.
array(
'class'=>'CCheckBoxColumn'
),
хочет name
хотя я не уверен.
- Ivan Ozercov
- Сообщения: 53
- Зарегистрирован: 2012.03.21, 15:53
- Откуда: Минск
Re: zii.widgets.grid.CGridView тонкая настройка
уже понял в чем дело, поставил , вместо . межуд двумя $this->widget выводящих календарь
У меня в базе хранится дата в виде строки вида 2012-04-03 15:56:09. Почему то при выполнении фильтрации по диапазону ничего не находит часть метода search() представлена ниже
Может у кого есть идеи по этому поводу?
У меня в базе хранится дата в виде строки вида 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 тонкая настройка
addBetweenCondition
ухты, а че так можно было?)
ухты, а че так можно было?)
- nizsheanez
- Сообщения: 814
- Зарегистрирован: 2011.04.29, 13:09
- Откуда: Москва
Re: zii.widgets.grid.CGridView тонкая настройка
посмотри какой запрос генерится. и попробуй его ручками выполнить
- Ivan Ozercov
- Сообщения: 53
- Зарегистрирован: 2012.03.21, 15:53
- Откуда: Минск
Re: zii.widgets.grid.CGridView тонкая настройка
пробывал руками выполнить. Просто тут такое дело, получается, что сравниваются строки и поэтому, результат выдается не тот который мне нужен.
- nizsheanez
- Сообщения: 814
- Зарегистрирован: 2011.04.29, 13:09
- Откуда: Москва
Re: zii.widgets.grid.CGridView тонкая настройка
какие еще строки?
Re: zii.widgets.grid.CGridView тонкая настройка
проходил мимо, хочется добавить ещё, что мне приходится добавлять:
'htmlOptions' => array('value' => $_GET['Questions']['date_update_from']),
к 'filter' => $this->widget('zii.widgets.jui.CJuiDatePicker', array( ... ))
чтобы при изменения даты пользователем в календаре после перезагрузки гридвью - выбранная дата сохранялась..
полный пример:
'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),
),
Re: zii.widgets.grid.CGridView тонкая настройка
мне кажется нужно добавить модели аттрибуты date_update_from и date_update_to
Re: zii.widgets.grid.CGridView тонкая настройка
они добавлены у меня так:
abstract class BaseQuestions extends GxActiveRecord {
public $date_update_from;
public $date_update_to;
..
в validate safe в search включены..
надо как-то иначе?.
abstract class BaseQuestions extends GxActiveRecord {
public $date_update_from;
public $date_update_to;
..
в validate safe в search включены..
надо как-то иначе?.
Re: zii.widgets.grid.CGridView тонкая настройка
в модели правильно.
а как у вас в методе search проверяется соответсвие этому промежутку?
а как у вас в методе search проверяется соответсвие этому промежутку?
Re: zii.widgets.grid.CGridView тонкая настройка
мой генератор генерит $criteria тоже с $_GET, ибо через $this не проканало..
если почитаю на досуге как это делать правильно или лучше - отпишусь..
если почитаю на досуге как это делать правильно или лучше - отпишусь..