Yii2基本gridview只是标题和值

时间:2017-03-30 05:56:18

标签: yii2 widget

我想显示已加入查询的数据...(控制器):

$znw_a = Znw::find()->withA()->where(['znw.id' => $zg_id])->one();
...
return $this->render('create', [
    ...
    'znw_a' => $znw_a,

...就像一个非常基本的gridview,没有pager,summary等,只有带有数据的纯标头。主要的想法就是将它显示为简单转换的详细视图,以便我从左到右而不是从上到下看到数据,所以就像一个简单的Excel表格一样。

在yii中是否有这样一个简单的小部件?因为GridView不是这样工作的,在我尝试调整查询以符合Gridview的标准之前,也许有人可以给我一个提示,我可以实现我想要的更容易。你能指点我正确的方向吗?非常感谢!

1 个答案:

答案 0 :(得分:2)

为此扩展DetailView并改为使用您的类。类似的东西(假设基本项目模板):

namespace app\widgets;

use yii\widgets\DetailView;
use yii\helpers\ArrayHelper;
use yii\helpers\Html;

class MyDetailView extends DetailView
{
    public $template = '<td>{value}</td>';
    public $headerTemplate = '<th>{label}</th>';

    public function run()
    {
        $rows = [];
        $headers = [];
        $i = 0;
        foreach ($this->attributes as $attribute) {
            list($row, $header) = $this->renderAttribute($attribute, $i++);
            $rows[] = $row;
            $headers[] = $header;
        }

        $options = $this->options;
        $tag = ArrayHelper::remove($options, 'tag', 'table');
        $topRow = Html::tag('tr', implode("\n", $headers));
        $dataRow = Html::tag('tr', implode("\n", $rows));
        echo Html::tag($tag, $topRow . $dataRow, $options);
    }

    protected function renderAttribute($attribute, $index)
    {
        if (is_string($this->template)) {
            $row = strtr($this->template, [
                '{value}' => $this->formatter->format($attribute['value'], $attribute['format']),
            ]);
        } else {
            $row = call_user_func($this->template, $attribute, $index, $this);
        }
        if (is_string($this->headerTemplate)) {
            $header = strtr($this->headerTemplate, [
                '{label}' => $attribute['label'],
            ]);
        } else {
            $header = call_user_func($this->headerTemplate, $attribute, $index, $this);
        }
        return [$row, $header];
    }
}

将其保存到/widgets/MyDetailView.php

一起使用
use app\widgets\MyDetailView;

<?= MyDetailView::widget([
    // ...
]) ?>