当前位置: 首页 > 知识库问答 >
问题:

创建多选表单字段

满玉泽
2023-03-14

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

选择_字段:

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

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

注意:当我使用类型作为检查框列表时,它像我想的那样工作,但我不希望它是检查框列表。我刚到十月cms有什么简单的方法吗...

共有3个答案

缪志新
2023-03-14

你可以使用标签小部件做到这一点;-)

仲霍英
2023-03-14

此外,daftspunk还提出了一个解决方案:https://github.com/octobercms/october/issues/1829#issuecomment-193018469

向和歌
2023-03-14

不能使用具有多个值的下拉字段,因为该字段用于处理单个值。作为复选框和收音机,这就是为什么有复选框列表(我猜)。

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

https://octobercms.com/docs/backend/forms#field-局部的

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

但请注意,这只是一个技巧,你只能使用直接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?>

亚马尔呢

```
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中使用名称\u field\u dropdownlist显示相同的内容。热媒

然后进入\modules\backend\widgets\form\form。php第630行更改:

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

添加不带_字段或的部分名称。htm ex_field_dropdownlist。htm成为下拉列表

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

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

 类似资料:
  • 基于活动记录(ActiveRecord)的表单:ActiveForm 在yii中使用表单的主要方式是通过 yii\widgets\ActiveForm。 当某个表单是基于一个模型时,应该首选这种方式。 此外,在 yii\helpers\Html 中有很多实用的方法为表单添加按钮和帮助文档。 在客户端显示的表单,大多数情况下都有一个相应的模型, 用来在服务器上验证其输入的数据(可在输入验证一节获取关

  • 我正在android studio中使用java创建一个电子商务应用程序。我想创建一个多选下拉列表,用户可以从中选择一个或多个尺寸。我想填写包含MySQL数据库中所有大小的下拉列表。有谁能告诉我怎么做,或者给我建议一些教程,因为我现在还没有得到。

  • 问题内容: 在我的应用程序中,我有几个带有许多选项的表单字段。我遇到的问题类似于此问题:在每次页面加载时获取和解析所有选项的成本很高(Twig一次又一次地渲染所有选项,而无法进行客户端缓存)。这个问题使我创造了一种通过AJAX将选项发送到浏览器的方法。相当简单的方法: 通过AJAX获取所有选项(键值)(例如,通过获取/countries.json),并在可能的情况下进行缓存。(在这种情况下,国名不

  • 问题内容: 我在html文件中有一个multiselect像这样: 当我通过以下方式访问flask / python中的mymultiselect字段时: 或通过使用request.args.get函数,它仅返回一个选定的项目。我了解到,要获取所有选定的项目,我必须在字段名称中添加[],如下所示: 通过查看firebug中的发布数据,我可以看到它正在工作,但是我每次尝试在flask / pytho

  • 想改进这个问题吗 通过编辑此帖子,更新问题,使其只关注一个问题。 我正在android studio中使用java创建一个电子商务应用程序。我想创建一个多选下拉列表,用户可以从中选择一个或多个尺寸。我想填写包含MySQL数据库中所有大小的下拉列表。有谁能告诉我怎么做,或者给我建议一些教程,因为我现在还没有得到。

  • 问题内容: 我在尝试了解如何在Django中创建动态选择字段时遇到了一些麻烦。我有一个模型设置类似: 我想做的是创建一个选择字段whos的值是与该骑手相关联的航点(将是登录的人)。 目前,我以如下形式覆盖init: 但是所有要做的就是列出所有路标,它们与任何特定的骑手都没有关联。有任何想法吗?谢谢。 问题答案: 你可以通过将用户传递给表单init来过滤航点 启动表单时从你的角度来看 在模型形式的情