x-editable для yii: объединить поля в выпадающем списке

У меня есть 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())

Есть какой-либо способ сделать это?

1

Решение

Я наконец нашел решение (не самое лучшее, очевидно, но полезное на данный момент).

По сути, я добавляю новый атрибут с именем $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();
}

Я все еще ищу лучший способ сделать это, но на данный момент это работает.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]