php - October CMS 创建多选表单字段

标签 php html octobercms

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

选择字段:
标签:样本
类型:下拉列表
属性:{multiple:'multiple'}

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

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

注意: 当我将 type 用作 checkboxlist 时,它按我的想法工作,但我不希望它成为复选框列表。我是 October cms 的新手,有没有简单的方法..

最佳答案

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

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

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

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

但请注意,这只是一个技巧,您只能使用直接的 yaml 选项分配 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 成为 dropdowList

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

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

关于php - October CMS 创建多选表单字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35620124/

相关文章:

javascript - 是否可以在 OctoberCMS 的 If 语句中使用 URL 参数?

octobercms - 如何将 Twig 变量传递给 octobercms 组件

laravel - 使用带有 Laravel 5 的 October CMS 自定义 404 页面的最佳方法是什么

php - “rpath”在某些 Linux 系统中不起作用。

javascript - 想要使用 javascript 从 css url 获取图像,这样我就可以设置背景图像的样式

html - Bootstrap 中心内联输入,它们之间没有空格

javascript - 加载屏幕被页脚覆盖

php - SQL从两个表中选择行,其中一列是公共(public)的,但另一列可能为空

javascript - Yii CGridView 使用键盘的箭头向上和向下移动选定的行

php - 从 foreach 循环中排除值