自定义下拉菜单中的项目在Yii 2中无法正常运行
P粉268284930
P粉268284930 2023-09-05 22:16:18
[PHP讨论组]

我正在Yii 2中创建自己的下拉列表函数。我创建了一个函数和一个视图,在视图中,我的下拉表单中有多个项目。

<?= $form->customDropDown($dpForm, 'color', [
        'items' =>
            [
                'label' => 'red',
                'value' => 'red',
                'options' => [
                    'style' => 'color: red'
                ]
            ]
            [
                'label' => 'blue',
                'value' => 'blue',
                'options' => [
                    'style' => 'color: blue'
                ]
            ]
    ]

我创建的函数如下(它使用并位于ActiveForm中):

    public function customDropdown($model, $attribute, $items = [], $options = [])
    {
        $value = Html::getAttributeValue($model, $attribute);

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

        return $this->staticOnly ? $field : $field->dropDownList($items);

    }

问题是,当我打开我的下拉列表时,所有的东西都是一个选项或一个选项组,而不仅仅是带有标签和样式的选项。

Inspector中的显示效果如下:

<optgroup label='0'>
    <option value="label">red</option>
    <option value="value">red</option>
</optgroup>
<optgroup label="options">
    <option value="style">color: red</option>
</optgroup>

以此类推。我想要的效果如下:

<option value="red" style="color: red">red</option>

但是我似乎无法实现这个效果。

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数组中提取标签-值对
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

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