Виджет JUIDatePicker в Yii не работает для обновлений - PullRequest
0 голосов
/ 05 февраля 2012

Я использую Yii's zii.widgets.jui.CJuiDatePicker и имею следующую проблему:
Хорошо работает при вставке новой записи или при обновлении записи с нулевой датой.
Но когда я пытаюсь обновить запись со значением даты, я не могу ее изменить.
Вы знаете, что может происходить?

$this->widget('zii.widgets.jui.CJuiDatePicker', array(
  'model' => $model,
  'attribute' => 'datetime',
  'name' => $model->datetime,
  'options'=>array(
    'showAnim'=>'fold',
    'dateFormat'=>'yy-mm-dd', 
    'altFormat'=>'yy-mm-dd',
    'changeMonth'=>'true', 
    'changeYear'=>'true', 
    'yearRange'=>'1920:2010', 
    'showOn'=>'both',
    'buttonText'=>'...' ),
  'htmlOptions'=>array( 'style'=>'height:20px;' ),
) );

Хотя поле называется datetime , на самом деле это поле даты MySQL.

Ответы [ 2 ]

1 голос
/ 06 февраля 2012

Я предполагаю, что в вашем действии обновления у вас есть что-то вроде этого:

public function actionUpdate($id){

   $model=$this->loadModel($id);

   // Assuming the name of your model is DateModel
   if(isset($_POST['DateModel'])){
        $model->attributes = $_POST['DateModel'];
        // more code to validate and save
   }
   // more code
}

Теперь, если вы проверите источник сгенерированного HTML для вашего представления формы , вы 'Вы увидите, что id и name элемента ввода для вашего атрибута datetime установлены в качестве значения этого атрибута, что на самом деле происходит из-за строки 'name'=>$model->datetime.Например, это может выглядеть примерно так:

<input type="text" value="2012-02-08" name="2012-02-08" id="2012-02-08" style="height:20px;" class="hasDatepicker">

В то время как мы хотим получить следующее:

<input type="text" value="2012-02-08" name="DateModel[datetime]" id="DateModel_datetime" style="height:20px;" class="hasDatepicker">

Так что наше действие контроллера может присвоить значение атрибутов с помощью строки $model->attributes = $_POST['DateModel'];.Следовательно, простое решение - не использовать атрибут 'name' виджета CJuiDatePicker.

Редактировать:

В противном случае, если вам абсолютно необходим атрибут 'name', вы должны установить поле даты в вашем действии контроллера, например:

$model->attributes = $_POST['DateModel'];
$model->datetime = $_POST[''.$model->datetime];
1 голос
/ 05 февраля 2012

Вы должны указать атрибут "value":

$this->widget('zii.widgets.jui.CJuiDatePicker', array(
  'model' => $model,
  'attribute' => 'datetime',
  'value' => $model->datetime,
  ...
...