我想显示已加入查询的数据...(控制器):
$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的标准之前,也许有人可以给我一个提示,我可以实现我想要的更容易。你能指点我正确的方向吗?非常感谢!
答案 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([
// ...
]) ?>