您不能使用具有多个值的下拉字段,因为它只适用于处理单个值。与复选框和单选按钮一样,这就是为什么有复选框列表(我猜)。
但我找到了一种解决方案。
在fields.yaml中使用partial作为字段类型,而不是下拉菜单。
https://octobercms.com/docs/backend/forms#field-partial
创建一个包含以下内容的部分(注意name属性中的[],这就是它起作用的原因!)
但要注意,这只是一个技巧,你只能使用直接的yaml选项赋值。
https://octobercms.com/docs/backend/forms#field-dropdown
<?php
$fieldOptions = $field->options();
$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,例如_field_dropdownlist.htm变为dropdowList
$optionModelTypes = ['dropdown', 'radio', 'checkboxlist', 'balloon-selector','dropdowlist'];
现在在你的yaml文件中,只需使用type:dropdownList,它就可以工作了。