У меня есть CGridView с EditableColumn с выпадающим выбором, определенным так:
array(
'name' => 'Id_department',
'header'=> 'Department',
'value' => '$data->Id_department ? Department::model()->findByPk($data->Id_department)->getConcatened() : "[click to edit]"',
'class' => 'editable.EditableColumn',
'editable' => array(
'type' => 'select',
'model' => new Employee(),
'url' => $this->createUrl('employee/update'),
'source' => $this->createUrl('department/getDepartments'),
'params' => array('YII_CSRF_TOKEN' => Yii::app()->request->csrfToken),
),
);
с этим действием в контроллере:
public function actionGetDepartments(){
$models = Department::model->findAll();
echo CJSON::encode(Editable::source($models, 'Id_department', 'Name'));
Yii::app()->end();
}
Этот код создает выпадающий список с помощью название атрибут как литерал, который пользователь видит в каждой опции.
Смысл в том, что мне нужно показать различные атрибуты, а не только один, поэтому я попытался поместить вызов функции в функцию, которая объединяет эти поля в одну строку в функции source (), но это не работает:
Editable::source($models, 'Id_department', concatenate())
Есть какой-либо способ сделать это?
Я наконец нашел решение (не самое лучшее, очевидно, но полезное на данный момент).
По сути, я добавляю новый атрибут с именем $concatenate_field
на модели и положить в нее все, что мне нужно. Затем я могу использовать это поле при вызове функции.
public function actionGetDepartments(){
$models = Department::model->findAll();
foreach($models as $model){
$model->concatenated_field = $model->getConcatened();
}
echo CJSON::encode(Editable::source($models, 'Id_department', 'concatenated_field'));
Yii::app()->end();
}
Я все еще ищу лучший способ сделать это, но на данный момент это работает.
Других решений пока нет …