Yii. Расширение image-column 05.06.2011

Исходник расширения image-column можно скачать по адресу:

http://www.yiiframework.com/extension/image-column/

 

Столкнулся с тем что данное расширение может работать только с полями из текущей таблицы.

Пример:

У меня есть таблица новостей (news) эту новость добавил какой-то автор (author) у этого автора есть аватарка (avatar).

Мне нужно вывести аватару автора в поле таблица zii.widgets.grid.CGridView, из примера на официальной странице видно, что нужно указать в свойстве name поле из которого будет взято имя файла аватары, но когда я пытаюсь указать news.author.avatar мне вываливается сообщение «Не определено свойство».

Решение:

Открываем файл EImageColumn.php и смотрим метод renderDataCellContent и там написано $data->{$this->name} т.е. получается что данные берутся не учитывая ralations а из поля запроса.

Затем открываем, например, файл CCheckBoxColumn.php и в том же методе нужный нам код :-) а именно:

if($this->value!==null)
    $value=$this->evaluateExpression($this->value,array('data'=>$data,'row'=>$row));
else if($this->name!==null)
    $value=CHtml::value($data,$this->name);
else
  $value=$this->grid->dataProvider->keys[$row];

 

Вставляем в начало метода renderDataCellContent этот код и вместо $data->{$this->name} указываем $value :-). Теперь это расширение может учитывать relations-ы и можно написать news.author.avatar и оно возьмёт имя файла из поля avatar из связи author.

Да и чуть не забыл, необходимо в описании класс EImageColumn добавить:

public $value;

 

Скачать доработанное мною расширение можно по адресу: EImageColumn

 

P/S:

Пишу пост так как не смог отписаться на официальном сайте.

Это была моя первая доработка расширений Yii, я думаю можно больше узнать если хотя бы разобраться в тех исходниках которые идут с Yii, и ещё доработать это расширение.

Comments are closed.