自定义下拉菜单中的项目在Yii 2中无法正常运行
P粉268284930
P粉268284930 2023-09-05 22:16:18
[PHP讨论组]
<p>我正在Yii 2中创建自己的下拉列表函数。我创建了一个函数和一个视图,在视图中,我的下拉表单中有多个项目。</p> <pre class="brush:php;toolbar:false;">&lt;?= $form-&gt;customDropDown($dpForm, 'color', [ 'items' =&gt; [ 'label' =&gt; 'red', 'value' =&gt; 'red', 'options' =&gt; [ 'style' =&gt; 'color: red' ] ] [ 'label' =&gt; 'blue', 'value' =&gt; 'blue', 'options' =&gt; [ 'style' =&gt; 'color: blue' ] ] ] </pre> <p>我创建的函数如下(它使用并位于ActiveForm中):</p> <pre class="brush:php;toolbar:false;"> public function customDropdown($model, $attribute, $items = [], $options = []) { $value = Html::getAttributeValue($model, $attribute); $field = $this-&gt;field($model, $attribute, $options); return $this-&gt;staticOnly ? $field : $field-&gt;dropDownList($items); } </pre> <p>问题是,当我打开我的下拉列表时,所有的东西都是一个选项或一个选项组,而不仅仅是带有标签和样式的选项。</p> <p>在<em>Inspector</em>中的显示效果如下:</p> <pre class="brush:html;toolbar:false;">&lt;optgroup label='0'&gt; &lt;option value=&quot;label&quot;&gt;red&lt;/option&gt; &lt;option value=&quot;value&quot;&gt;red&lt;/option&gt; &lt;/optgroup&gt; &lt;optgroup label=&quot;options&quot;&gt; &lt;option value=&quot;style&quot;&gt;color: red&lt;/option&gt; &lt;/optgroup&gt; </pre> <p>以此类推。我想要的效果如下:</p> <pre class="brush:html;toolbar:false;">&lt;option value=&quot;red&quot; style=&quot;color: red&quot;&gt;red&lt;/option&gt; </pre> <p>但是我似乎无法实现这个效果。</p>
P粉268284930
P粉268284930

全部回复(1)
P粉801904089

为了实现所需的输出,其中下拉列表中的每个项目都由一个具有指定标签、值和样式的单个<option>标签表示,您需要按照以下方式修改您的代码: 在您的视图文件中,更新customDropDown函数调用以正确传递items数组:

<?= $form->customDropDown($dpForm, 'color', [
        [
            'label' => 'red',
            'value' => 'red',
            'options' => [
                'style' => 'color: red'
            ]
        ],
        [
            'label' => 'blue',
            'value' => 'blue',
            'options' => [
                'style' => 'color: blue'
            ]
        ],
    ]
); ?>
更新的方法:
public function customDropdown($model, $attribute, $items = [], $options = [])
{
    $value = Html::getAttributeValue($model, $attribute);

    $field = $this->field($model, $attribute);

    $options['options'] = array_column($items, 'options');
    $options['prompt'] = '';

    return $this->staticOnly ? $field : $field->dropDownList(array_column($items, 'label', 'value'), $options);
}
在这个更新的版本中,我们直接将$options数组传递给dropDownList方法,并使用array_column从$items数组中提取标签-值对
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号