Yii CGridПросмотреть, как получить доступ к идентификатору для каждого столбца - PullRequest
0 голосов
/ 28 февраля 2012

Я использую CGridView с CActiveDataProvider. Все работает нормально, но теперь мне нужно показать пользовательскую кнопку в зависимости от идентификатора строки.

Я могу добавить кнопку и заставить ее работать, однако я не могу настроить изображение в соответствии с идентификатором строки. Из примеров видно, что при создании URL я могу получить доступ к идентификатору строки, вызвав $ data-> id, однако, когда я пытаюсь сделать это для imageURL, это не работает. Мой код ниже:

$this->widget('zii.widgets.grid.CGridView', array(
            'dataProvider'=>$model->search(),
            'filter'=>$model,
            'columns'=>array(
                    'id',
                    'name',
                    'desc',
                    'created',
                    array(
                            'class'=>'CButtonColumn',
                            'header'=>'Active State',
                            'template'=>'{rank}',
                            'buttons'=>array(
                                    'rank'=>array(
                                            'label'=>'Rank',                                                
                                            'imageUrl'=>$this->getRank($data->id),
                                            'url'=>'Yii::app()->createUrl("users/updateRank", array("id"=>$data->id))',
                                            'options'=>array(
                                                    'ajax'=>array(
                                                            'type'=>'POST',
                                                            'url'=>"js:$(this).attr('href')",                                                               
                                                    ),
                                            ),
                                    ),
                            ),                      
                    ),                      
            ),
    ));

URL-адрес изображения вызывает функцию в моем контроллере, которая возвращает URL-адрес изображения. Однако я не могу передать идентификатор текущей записи, на которую нажимает пользователь, и я всегда получаю изображение по умолчанию. Если я использую $ data-> id, я получаю сообщение об ошибке, что данные не существуют. Если я использую $ this-> id, это относится к контроллеру, и я получаю идентификатор контроллера. В любом случае я могу получить идентификатор строки и передать его функции.

Ответы [ 2 ]

2 голосов
/ 28 февраля 2012

Пожалуйста, смотрите комментарии выше.То, что я пытался сделать, было невозможно через CButtonColumn.Вместо этого я сейчас использую CDataColumn.

$this->widget('zii.widgets.grid.CGridView', array(
        'dataProvider'=>$model->search(),
        'filter'=>$model,
        'columns'=>array(
                'id',
                'name',
                'desc',
                'created',
                array(
                'class'=>'CDataColumn',
                'header'=>'Active State',                                           
                'type'=>'raw',
                'value'=>'getStatus("$data->id")',
            ),                      
        ),
));

getStatus возвращает контент для этого столбца, который содержит ссылку (ajaxLink) с первым параметром в качестве изображения.

function getStatus($id)
{
    $imagePath="";
    ......... do your check and figure out the image you want to use

    $content ="<div align='middle'>".CHtml::ajaxLink(CHtml::image($imagePath,'Rank', array('title'=>'Rank')),CHtml::normalizeUrl(array('user/rank', 'id'=>$id)), array('type'=>'POST'))."</div>";


    return $content;
}
2 голосов
/ 28 февраля 2012

Кажется, вам не хватает одинарных кавычек:

'imageUrl'=>'$this->getRank($data->id)',

- это шаг вперед (вероятно, вам нужно сделать что-то большее, чтобы заставить вашу пользовательскую функцию работать таким образом)

В CGridViewлюбой php-код, который вы хотите запустить независимо для каждой строки, должен быть в кавычках - если вы используете «голый» php, он будет рассчитан только один раз, и тогда значение будет одинаковым для каждой строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...