renderPartial внутри CGridview

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
notgosu
Сообщения: 124
Зарегистрирован: 2012.05.22, 17:46

renderPartial внутри CGridview

Сообщение notgosu »

Добрый вечер!
Появилась потребность в одном из столбцов CGridview рендерить мини-вьюху.
Почему то:

Код: Выделить всё

array(
            'header'=>'variants',
            'type'=>'raw',
                        'value'=>$this->renderPartial('_configurations', array('model' => $model)),
        ),
 
не дает желаемого результата. Подскажите, в чем моя ошибка?

Аватара пользователя
Loki
Сообщения: 65
Зарегистрирован: 2011.01.16, 10:47
Откуда: Омск

Re: renderPartial внутри CGridview

Сообщение Loki »

Не стоит забывать, что все(или почти все) render-функции в Yii по умочанию выбрасывают данные в выходной поток. Поэтому записать их в переменную – не получится. Можно использовать ob_start(); перед render и ob_clean_get(); в месте где нужны данные. Но в Yii о нас позаботились и у того-же renderPartial, есть третий параметр – $return, который указывает возвращать данные в переменную или сразу печатать.

Код: Выделить всё

array(
            'header'=>'variants',
            'type'=>'raw',
                        'value'=>$this->renderPartial('_configurations', array('model' => $model), true),
        ),
 
Последний раз редактировалось Loki 2012.11.19, 23:40, всего редактировалось 2 раза.

Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: renderPartial внутри CGridview

Сообщение lancecoder »

'type'=>'html',

$this->renderPartial('_configurations', array('model' => $model),true, false),

Аватара пользователя
Loki
Сообщения: 65
Зарегистрирован: 2011.01.16, 10:47
Откуда: Омск

Re: renderPartial внутри CGridview

Сообщение Loki »

lancecoder, а разве processOutput по умолчанию не false?

Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: renderPartial внутри CGridview

Сообщение lancecoder »

false, я вообще сначала написал true ))) потом исх код посмотрел и исправил, да ты прав можно опустить, твой вариант аналогичен моему

notgosu
Сообщения: 124
Зарегистрирован: 2012.05.22, 17:46

Re: renderPartial внутри CGridview

Сообщение notgosu »

lancecoder, Loki спасибо за помощь, но почему-то Ваши варианты не срабатывают. Ранее результат отображался но не внутри Gridview а перед ней, а сейчас результата нету вообще(пустой столбец). Есть идеи?

Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: renderPartial внутри CGridview

Сообщение lancecoder »

возможно проблема в кавычках, экранируйте

alekso
Сообщения: 190
Зарегистрирован: 2012.09.15, 23:49

Re: renderPartial внутри CGridview

Сообщение alekso »

честно говоря не понятно зачем такое может понадобиться :shock: но да ладно.

Код: Выделить всё

array(
            'header'=>'variants',
            'type'=>'raw',

            'value'=> function($data, $row) use ($this){
                return $this->renderPartial('_configurations', array('model'=>$model->value), true);
          }
        ),
 

Аватара пользователя
Loki
Сообщения: 65
Зарегистрирован: 2011.01.16, 10:47
Откуда: Омск

Re: renderPartial внутри CGridview

Сообщение Loki »

Спасибо за замечание про анонимную функцию, не знал что так можно делать.
 
Но в приведенном коде, скорее всего больше подойдет:

Код: Выделить всё

'value'=> function($data, $row) use ($model){
                return Yii::app()->getController()->renderPartial('_configurations', array('model'=>$model->value), true);
 }
 
Плюс ко всему, конкретно в этом случае я не вижу необходимости в функции(тем более с использованием замыкания переменной), ведь тут нет динамических условий, и выражение каждый раз будет возвращать одно и то же.

Хотя у меня есть подозрение что имелось в виду что-то подобное:

Код: Выделить всё

'value'=> function($data, $row){
                return Yii::app()->getController()->renderPartial('_configurations', array('model'=>$data->value), true);
 }
 
Последний раз редактировалось Loki 2012.11.20, 00:32, всего редактировалось 1 раз.

Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: renderPartial внутри CGridview

Сообщение lancecoder »

ну это у тебя одно и тоже, а так есть data и row конкретной строки

Аватара пользователя
Loki
Сообщения: 65
Зарегистрирован: 2011.01.16, 10:47
Откуда: Омск

Re: renderPartial внутри CGridview

Сообщение Loki »

lancecoder, я о том, что в вопросе использовалась не $data, или $row, а $model, и там при всех вариантах – будет одно и то же.
Я исправл сообщение выше, предположив вариант при котором вывод будет зависеть от конкретной строки.

Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: renderPartial внутри CGridview

Сообщение lancecoder »

ну да, согласен, глупо обрабатывать строку, если конечный результат не зависит ни от номера ни от значения

notgosu
Сообщения: 124
Зарегистрирован: 2012.05.22, 17:46

Re: renderPartial внутри CGridview

Сообщение notgosu »

Всем спасибо за помощь, заработал такой вариант:

Код: Выделить всё

array(
            'header'=>'Варианты',
        'type'=>'raw',
            'value'=>'Yii::app()->getController()->renderPartial(\'_configurations\', array(\'model\' => $model, true)',
        ),
 

Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: renderPartial внутри CGridview

Сообщение lancecoder »

чем дальше в лес, тем больше примитива забываешь, ну как я мог про bizRule забыть хз :-D
мы с Loki не ищем легких путей :lol:

Ответить