Я добавил несколько строк в свою копи фреймворка (ниже все описанно) и получил псевдополе, работающее как обычное поле, но данные берутся не из $model->filedname а из $model->___$fieldname, что позволяет сделать обработку поля перед выводом на форму.
Конкретное применение viewtopic.php?f=4&t=3932 viewtopic.php?f=3&t=4609
Думаю в фреймворк надо добавить такой функционал.
Файл framework/web/helpers/CHtml.php
меняем всего одну функцию
Код: Выделить всё
public static function resolveName($model,&$attribute_)
{
$attribute=$attribute_;
if (substr($attribute, 0 ,3)==='___')
$attribute=substr($attribute, 3);
if(($pos=strpos($attribute,'['))!==false)
{
if($pos!==0) // e.g. name[a][b]
return get_class($model).'['.substr($attribute,0,$pos).']'.substr($attribute,$pos);
if(($pos=strrpos($attribute,']'))!==false && $pos!==strlen($attribute)-1) // e.g. [a][b]name
{
$sub=substr($attribute,0,$pos+1);
$attribute=substr($attribute,$pos+1);
return get_class($model).$sub.'['.$attribute.']';
}
if(preg_match('/\](\w+\[.*)$/',$attribute,$matches))
{
$name=get_class($model).'['.str_replace(']','][',trim(strtr($attribute,array(']['=>']','['=>']')),']')).']';
$attribute=$matches[1];
return $name;
}
}
else
return get_class($model).'['.$attribute.']';
}
в файле отображения используем имя нужного поля с тремя подчеркиваниями впереди:
Код: Выделить всё
<p class="more">
<?php echo $form->labelEx($model,'more'); ?>
<?php echo $form->textArea($model,'___more',array('rows'=>6, 'cols'=>50)); ?>
<?php echo $form->error($model,'more'); ?>
</p>
<p class="full">
<?php echo $form->labelEx($model,'full'); ?>
<?php echo $form->textArea($model,'___full',array('rows'=>6, 'cols'=>50)); ?>
<?php echo $form->error($model,'full'); ?>
</p>
У меня это выглядело так (файл модели):
Код: Выделить всё
public function get___full()
{
return str_replace('<br />', '', $this->$full);
}
public function get___more()
{
return str_replace('<br />', '', $this->$more);
}