Загрузить Картинку В Виде Ссылки Cgridview

Здравствуйте. У меня в виджите CGridView есть картинки:


array(

        'name'=>'Фото',

        'type'=>'image',

        'value'=> 'Yii::app()->baseUrl."./file/preview/$data->preview"',

        'filter'=>'',

        ),

Понадобилось мне чтобы эта картинка вела на сам товар(не в админке), попробовал прикрутить ссылку:


'value'=> "echo CHtml::link(CHtml::image(Yii::app()->baseUrl.\"./file/preview/$data->preview\"), Yii::app()->controller->createUrl(\"index\", array(\"id\" => $data->id)))",

Выдает ошибку(см. приложенную картинку)

Почему он выдает мне эту ошибку, ведь я нигде не использую функцию eval? Как сделать правильно, чтоб заработало? :)

Элементарно Ватсон, функция eval используется что бы обработать значение value, например:


'Yii::app()->baseUrl."./file/preview/$data->preview"'

согласитесь, это значение должно быть вычислено для каждой из строк. Если бы это значение вычислялось один раз, то все строки имели бы одинаковое значение в этом столбце.

А что мы наблюдаем у вас? Двойные кавычки вместо одинарных (ленивых). Следовательно до Eval дойдет не


"echo CHtml::link(CHtml::image(Yii::app()->baseUrl.\"./file/preview/$data->preview\"), Yii::app()->controller->createUrl(\"index\", array(\"id\" => $data->id)))",

а кое что другое, не содержащее переменных. Но это пол беды, вы всего лишь получили бы одинаковую картинку (или её отсутствие) во всех ячейках. Но вы используете "echo"! Этого делать нельзя.

В общем:

  1. уберите echo

  2. все ваше выражение ДОЛЖНО находится в одних одинарных кавычках.

PS: мне нравится, как был сформулирован вопрос.

Я бы сделал немного по другому, это позволит избавится от некрасивого кода :unsure:




'value'=>function ($data,$row) {

    return CHtml::link(CHtml::image(Yii::app()->baseUrl.'./file/preview/$data->preview'), $this->createUrl('index', array('id' => $data->id)));

}



Вместо return можно использовать echo, но это не совсем корректно.