Использование CGridView и CButtonColumn (Yii Framework)

Я новичок в Yii и пытаюсь понять виджет CGridView.

Сначала я понимаю все эти коды:

$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$dataProvider,
    'columns'=>array(
        "url",
        "allowRedirect",
        array(
            "name"=>"Kod",
            "value"=>array($model, "returnHTTPCode"),
            "type"=>"html"
            ),
        array(
            "class"=>"CButtonColumn",
            "template"=>"{update} {delete}",
            ),

        ),
));

Теперь я хочу изменить URL кнопки удалить на http://domain.com/?r=pano/deleteSite. В документации есть свойство deleteButtonUrl, я пытаюсь использовать его

$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$dataProvider,
    'columns'=>array(
        "url",
        "allowRedirect",
        array(
            "name"=>"Kod",
            "value"=>array($model, "returnHTTPCode"),
            "type"=>"html"
            ),
        array(
            "class"=>"CButtonColumn",
            "template"=>"{update} {delete}",
            "deleteButtonUrl"=>"deleteSite"            
            ),

        ),
));

Но я получил Use of undefined constant deleteSite - assumed 'deleteSite' ошибку.

А затем я попытался использовать свойство buttons CButtonColumn.

$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$dataProvider,
    'columns'=>array(
        "url",
        "allowRedirect",
        array(
            "name"=>"Kod",
            "value"=>array($model, "returnHTTPCode"),
            "type"=>"html"
            ),
        array(
            "class"=>"CButtonColumn",
            "template"=>"{update} {delete}",
            "buttons"=>array(
                "delete"=>array(
                            "url"=>"http://localhost/sitelerimacikmi/index.php?r=panos"
                            )
                ),

            ),

        ),
));

и получил ту же ошибку.

Как я могу использовать свойства CButtonColumn?

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


person Eray    schedule 02.11.2012    source источник
comment
ОК, я просто решаю проблему с использованием "deleteButtonUrl"=>"'?r=pano/deleteSite'" вместо "deleteButtonUrl"=>"pano/deleteSite". Но все же нужны четкие ответы для справки.   -  person Eray    schedule 03.11.2012


Ответы (2)


Вы можете попробовать использовать:

$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>$dataProvider,
'columns'=>array(
    "url",
    "allowRedirect",
    array(
        "name"=>"Kod",
        "value"=>array($model, "returnHTTPCode"),
        "type"=>"html"
        ),
    array(
        "class"=>"CButtonColumn",
        "template"=>"{update} {delete}",
        "deleteButtonUrl" => "Yii::app()->createUrl('pano/deleteSite')" // <- changes here
        ),

    ),
));

Также вы можете прочитать эту статью: http://www.yiiframework.com/wiki/106/using-cbuttoncolumn-to-customize-buttons-in-cgridview/

person Vladimir Posvistelik    schedule 02.11.2012

Если вам нужно указать URL-адрес, вы должны указать его как выражение PHP. Вот как определяется значение по умолчанию для URL-адреса удаления в классе CButtonColumn,

public $deleteButtonUrl = 'Yii::app()->controller->createUrl(
    "delete",array("id"=>$data->primaryKey)
)';

Этот URL-адрес оценивается с использованием функции eval php, в этом выражении $data — это текущая визуализируемая модель.

Вы должны использовать:

$this->widget('zii.widgets.grid.CGridView', array(
    ...
    'columns'=>array(
        ...
        array(
            'class'=>'CButtonColumn',
            'deleteButtonUrl' => 'Yii::app()->controller->createUrl(
                "pano/deleteSite", array("id" => $data->primaryKey)
            )',
        ),
    ),
);
person Edin Omeragic    schedule 02.11.2012