繁体   English   中英

如何修改Yii2 gridview

[英]How to modify Yii2 gridview

我无法弄清楚如何修改\\yii2\\vendor\\yiisoft\\yii2\\grid\\GridView.php以使国家模型的字段name在官方教程中被视为关于gii的国家视图的链接。

我尝试使用renderTableRow()但我无法找到可以在哪里制作这样的低代码:

if (ThisFieldModel == name) makeItsTextAsLink(text, url)



public function renderTableRow($model, $key, $index)
    {           
        $cells = [];
        /* @var $column Column */
        foreach ($this->columns as $column) {
            $cells[] = $column->renderDataCell($model, $key, $index);
        }
        if ($this->rowOptions instanceof Closure) {
            $options = call_user_func($this->rowOptions, $model, $key, $index, $this);
        } else {
            $options = $this->rowOptions;
        }
        $options['data-key'] = is_array($key) ? json_encode($key) : (string) $key;

        return Html::tag('tr', implode('', $cells), $options);
    }

另一个问题:我在哪里可以复制\\yii2\\vendor\\yiisoft\\yii2\\grid\\GridView.php来修改它并使用它而不影响\\yii2\\vendor\\yiisoft\\yii2\\grid\\GridView.php的核心。

最后我找到了解决方案,可以从小部件调用中自定义列,因此我们不需要对小部件的核心代码进行任何修改或创建新的小部件,如下所示:

<?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'columns' => [
            ['class' => 'yii\grid\SerialColumn'],

            'code',
            [ 'attribute' => 'name', 'format' => 'raw', 'value' => function($data){return "<a href=\"?r=country/view&id={$data->code}\">{$data->name}</a>";}],
            'population',

            ['class' => 'yii\grid\ActionColumn'],
        ],
    ]); ?>

解决方案的基础取决于小部件的columns属性,这里我用列表中的code替换了name

[ 'attribute' => 'name', 'format' => 'raw', 'value' => function($data){return "<a href=\"?r=country/view&id={$data->code}\">{$data->name}</a>";}],

请注意格式化字段值的回调函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM