【问题标题】:Filter empty values in DetailView在 DetailView 中过滤空值
【发布时间】:2015-09-15 14:32:20
【问题描述】:

有没有一种简单的方法可以强制 Yii2 中的 DetailView 忽略其 attributes 列表中的这些字段,特别是 model 是空的?

或者唯一的方法是使用自己的函数在attributes 列表上定义 every 属性并过滤其中的空字段(听起来有点疯狂)?

编辑:我认为这是不言自明的,但事实证明并非如此。所以,基本上,我想强制DetailView 忽略(不呈现)attributes 列表中这些元素的行,这些元素在对应的model 中有空(null,空字符串)值,因此会导致呈现空表细胞:

【问题讨论】:

    标签: yii yii2 detailview


    【解决方案1】:

    您可以将 DetailView 小部件的 template 参数定义为具有以下签名 function ($attribute, $index, $widget)回调 函数,并且将为每个属性调用此回调,因此您可以为您的行定义所需的渲染:

    DetailView::widget([
        'model' => $model,
        'template' => function($attribute, $index, $widget){
            //your code for rendering here. e.g.
            if($attribute['value'])
            {
                return "<tr><th>{$attribute['label']}</th><td>{$attribute['value']}</td></tr>";
            }
        },
        //other parameters
    ]);
    

    【讨论】:

    • 一段不错的代码!效果很好,只有我会考虑 if(isset($attribute['value']) &amp;&amp; $attribute['value'] != '' &amp;&amp; $attribute['value'] != ' ') { 条件来“捕捉”更多你想过滤掉的情况。
    • 过滤条件由你决定)
    • 很酷。它似乎打破了一些细节,例如:'updated_at:datetime', 只会显示基础值,而不是转换后的值。
    【解决方案2】:

    这样的东西会更好吗?它保留了一些细节,例如:updated_at:datetime,使用上述解决方案之一只会显示基础值,而不是转换后的值。

    <?= DetailView::widget([
        'model' => $model,
    
        'attributes' => [
            'id',
            [
                'attribute' => 'my_attribute',
                'visible' => !empty($model->my_attribute)
            ],
        ]
    ]);
    

    【讨论】:

      猜你喜欢
      • 2012-03-13
      • 2020-07-29
      • 2012-12-15
      • 1970-01-01
      • 2021-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-21
      相关资源
      最近更新 更多