October CMS 创建多选表单字段

2024-01-11

我需要在 October Cms 后端表单 (fields.yaml) 中创建一个多选表单字段。我应用了以下方法

选择字段:
标签: 样品
类型:下拉菜单
属性:{多个:'多个'}

该字段的选项将从模型中调用

一切正常,但当我提交表单时,只有第一个选定的选项会作为 JSON 数据插入到数据库表文本字段中。我希望存储每个选定的选项。我还在模型中将该字段声明为 Jsonable,即 protected $jsonable = ['field_name'];

Note :当我使用类型为复选框列表它按我的想法工作,但我不希望它成为复选框列表。我是十月份的cms新手,有什么简单的方法吗?


您不能使用具有多个值的下拉字段,因为它是为了处理单个值而设计的。作为复选框和收音机,这就是为什么有 checkboxList(我猜)。

但我找到了解决方案。 在 fields.yaml 中使用部分字段类型而不是下拉列表

https://octobercms.com/docs/backend/forms#field-partial https://octobercms.com/docs/backend/forms#field-partial

使用以下内容创建一个部分(请注意名称属性中的 [],这就是它起作用的原因!)

但请注意,这只是一个技巧,你只能使用直接yaml选项赋值 https://octobercms.com/docs/backend/forms#field-dropdown https://octobercms.com/docs/backend/forms#field-dropdown

<?php
    $fieldOptions = $field->options();
    //get the field value as an array
    $selectedValues = (array)$field->value;

?>
<!-- Dropdown -->
<?php if ($this->previewMode): ?>
    <div class="form-control"><?= (isset($fieldOptions[$field->value])) ? e(trans($fieldOptions[$field->value])) : '' ?></div>
<?php else: ?>

    <select
        id="<?= $field->getId() ?>"
        name="<?= $field->getName() ?>[]"
        class="form-control custom-select"
        <?= $field->getAttributes() ?>>
        <?php if ($field->placeholder): ?>
            <option value=""><?= e(trans($field->placeholder)) ?></option>
        <?php endif ?>
        <?php foreach ($fieldOptions as $value => $option): ?>
            <?php
                if (!is_array($option)) $option = [$option];
            ?>
            <option

                <?= in_array($value, $selectedValues)  ? 'selected="selected"' : '' ?>
                <?php if (isset($option[1])): ?>data-<?=strpos($option[1],'.')?'image':'icon'?>="<?= $option[1] ?>"<?php endif ?>
                value="<?= $value ?>">
                    <?= e(trans($option[0])) ?>
            </option>
        <?php endforeach ?>
    </select>
<?php endif?>

对于 yaml

```
select_field:
    label: Sample
    type: partial
    path:$/author/plugin/models/classfolder/_my_partial.htm
    attributes: {multiple:'multiple'}
    options:
        key:value
        key:value
```

更好的方法可能是构建一个小部件或发出拉取请求 如果你有能力,你可以触及核心并添加

\modules\backend\widgets\form\partials 中的内容相同 名称为 _field_dropdownlist.htm

然后在 \modules\backend\widgets\form\Form.php 第 630 行 改变 :

$optionModelTypes = ['dropdown', 'radio', 'checkboxlist', 'balloon-selector'];

添加不带 _field 或 .htm 的部分名称 ex _field dropdownlist.htm 成为 dropdownList

$optionModelTypes = ['dropdown', 'radio', 'checkboxlist', 'balloon-selector','dropdowlist'];

现在在您的 yaml 文件中只需使用 type:dropdownList 即可工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

October CMS 创建多选表单字段 的相关文章