Как добавить виджет в модель ?

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Vitalya
Сообщения: 21
Зарегистрирован: 2010.05.06, 23:26
Откуда: Новосибирск/Бийск
Контактная информация:

Как добавить виджет в модель ?

Сообщение Vitalya »

Как добавить виджет в модель ? вот он собсвенна

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

$form->widget('zii.widgets.jui.CJuiDatePicker', 
              array('name'=>'data', 'model'=>'Operation',                      
    'options'=>array('showAnim'=>'fold',),
    'htmlOptions'=>array('style'=>'height:20px;'),    ));  
и что означает модель в атрибутах?
и как сделать чтобы он выводил в другом формате ? а то обработчик писать отдельно придеться ... :)
и как в него что нить вписать - ну типа чтобы изначально в поле какое-нить значение валялось? :oops: просто при неправильной валидации все сбрасываеться
isergey
Сообщения: 83
Зарегистрирован: 2010.01.16, 21:05

Re: Как добавить виджет в модель ?

Сообщение isergey »

Этот виджет обычно в предтавление добавляется, а не в саму модель. В модель кроме данных ничего добавлять не надо.
Vitalya
Сообщения: 21
Зарегистрирован: 2010.05.06, 23:26
Откуда: Новосибирск/Бийск
Контактная информация:

Re: Как добавить виджет в модель ?

Сообщение Vitalya »

дело в том что если я нажимаю сабмит - то это поле сбрасываеться ( ну как сделать чтобы не сбрасывалось хотя бы ;)
isergey
Сообщения: 83
Зарегистрирован: 2010.01.16, 21:05

Re: Как добавить виджет в модель ?

Сообщение isergey »

Вы вызываете этот виджет из формы, что неверно. В форме у вас должна быть переменная, которая получит дату, а вместо этого вы засунули туда виджет :)
Этот виджет должен быть вызван, в предтсвалении формы, на том месте, где должно быть полле ввода даты. name - это название поля модели, model - название класса модели.

Виджет в предсталении должен вызваться как-то так:

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

<div> <?php $this->widget('zii.widgets.jui.CJuiDatePicker', 
              array('name'=>'полемодели', 'model'=>'КлассМодели',                      
    'options'=>array('showAnim'=>'fold',),
    'htmlOptions'=>array('style'=>'height:20px;'),    )); ?>
</div>
Vitalya
Сообщения: 21
Зарегистрирован: 2010.05.06, 23:26
Откуда: Новосибирск/Бийск
Контактная информация:

Re: Как добавить виджет в модель ?

Сообщение Vitalya »

сначала так и было - когда я разбирался с ним ) но потом я действительно решил так и как вы пишите , но суть проблемы описана выше , повторюсь - при неправильной валидации любого поля формы она сбрасывает значение. и как сделать чтобы она на выходе выдавала не хх/хх/хх , а так чтобы сразу в базу закинуть можно было?
vlastachu
Сообщения: 50
Зарегистрирован: 2010.03.01, 20:15

Re: Как добавить виджет в модель ?

Сообщение vlastachu »

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

<?php $this->widget('zii.widgets.jui.CJuiDatePicker', array(
    'name'=>'birthday',
    'model'=>$model,
    'options'=>array(
        'showAnim'=>'fold',
        'dateFormat'=>'yy-mm-dd', // <== формат
        'changeYear'=>true,
        'changeMonth'=>true,
        'firstDay'=>1,
        'yearRange'=>'1930:2012',
    ),  
    'i18nScriptFile'=>'ui.datepicker-ru',
            
    'language'=>'ru',
    'htmlOptions'=>array(
        'style'=>'height:17px;'
    ),
));   ?>
Как значение получать, пока не придумал (вообще для этого надо в options добавить значение defaultDate, а как его получить что-то не знаю... сегодня подумаю... казалось это очевидным, но минут 10 посмотрел док-цию и ничего...)
vlastachu
Сообщения: 50
Зарегистрирован: 2010.03.01, 20:15

Re: Как добавить виджет в модель ?

Сообщение vlastachu »

Вообщем костылём сделал (всё чаще и чаще так говорю...какая-то неправильная жизнь)
Итак модель $model, атрибут birthday

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

<?php $this->widget('zii.widgets.jui.CJuiDatePicker', array(
    'name'=>'birthday',
    'model'=>$model,
    'options'=>array(
        'showAnim'=>'fold',
        'dateFormat'=>'yy-mm-dd', // <== 
        'changeYear'=>true,
        'changeMonth'=>true,
        'firstDay'=>1,
        'yearRange'=>'1930:2012',
    ),  
    'i18nScriptFile'=>'ui.datepicker-ru',
    'value'=>$_POST['birthday'],            // <== 
    'language'=>'ru',
    'htmlOptions'=>array(
        'style'=>'height:17px;',
    ),
));   ?>
Кстати, обратите внимание на то что значение хранится в $_POST['birthday'], а не $_POST['User']['birthday']. Не знаю с чем эт оможет быть связано...
Vitalya
Сообщения: 21
Зарегистрирован: 2010.05.06, 23:26
Откуда: Новосибирск/Бийск
Контактная информация:

Re: Как добавить виджет в модель ?

Сообщение Vitalya »

толк от model - 0 зачем он тогда нужен?
PS : спасибо за то что распивали options )
vlastachu
Сообщения: 50
Зарегистрирован: 2010.03.01, 20:15

Re: Как добавить виджет в модель ?

Сообщение vlastachu »

хмм... Может оставили на будущее? А вообще CJuiDatePicker наследуется от CJuiInputWidget, откуда и пошла модель.
В других виджетах она вроде бы играет роль. По крайне мере $_POST должен был содержать имя модели, чего не произошло.

А вообще разница-то есть (посмотрел как оно там устроено:

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

		if($this->hasModel())
			echo CHtml::activeTextField($this->model,$this->attribute,$this->htmlOptions);
		else
			echo CHtml::textField($name,$this->value,$this->htmlOptions);

Видимо валидацию может проходить, если с моделью. Но лично у меня правил там особых не написано, кроме того что 'safe'.
Вообщем лучше с моделью, если такая есть.
Ответить