2016-02-25 6 views
3

Мне нужно создать поле с несколькими полями формы в октябрьской форме Cms (поля.yaml). Я применил следующий методОктябрь CMS создайте поле с несколькими полями формы

select_field:
          метка: Образец
          Тип: выпадающий
          атрибуты: {многообразны: 'множественный'}

Опции этого поля будут вызываться из модели

Все работает хорошо, но когда я отправляю форму, только первая выбранная опция вставляется как данные JSON в текстовое поле таблицы базы данных. Я хочу, чтобы каждый выбранный параметр сохранялся. Я также объявил поле Jsonable в модели ie., Protected $ jsonable = ['field_name'];

Примечание: Когда я использую тип, как CheckBoxList она работает, как я думал, но я не хочу, чтобы это было CheckBoxList. Я новичок в октябрьских cms, там есть простой способ.

ответ

1

Вы не можете использовать поле выпадающего меню с множественным значением, потому что оно было создано для обработки одного значения. как флажок и радио, вот почему есть checkboxList (я думаю).

Но я нашел решение. Используйте частичный как тип поля в fields.yaml вместо выпадающего списка

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

Создать парциальное с содержанием ниже (обратите внимание на [] в имени атрибута, поэтому он работает!)

Но иметь в виду, что это всего лишь уловка, и вы можно использовать только в приписывании Варианты YAMLhttps://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 
``` 

Лучше approche бы может построить виджет или сделать запрос на нагрузочный , если у вас есть возможность вы можете потрогать ядро ​​и добавить

то же самое содержание в \ Modules \ бэкенд \ виджеты \ формы \ обертоны с именем _field_dropdownlist.htm

затем в \ Modules \ \ бэкенд виджеты \ форма \ form.php линии 630 изменение:

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

, чтобы добавить часть имени без _field или .htm экс _field_dropdownlist.htm стать dropdowList

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

теперь в вашем YAML файл типа использования Жюст: DropDownList и он будет работать.

+0

я сделал то же самое, как вы делали. Я создал частичное и задал атрибут имени опции multi select как массив, и все работает нормально. Но что помешало мне опубликовать этот ответ, так это то, как отображать выбранные параметры в поле выбора частичного. Я хотел бы попробовать ваш второй подход, который заключается в создании виджета. Я надеюсь, что это должно сработать и поблагодарить вас Грег Би –

+0

Большое вам спасибо. Это действительно хорошо работает –

+0

Привет, Не могли бы вы рассказать мне, как мне обновить поле с несколькими полями с пустым значением. В случае, если пользователь не хочет ничего выбирать. Я много пытаюсь, но я не мог найти лучшего решения. –

0

Вы можете использовать «taglist» виджет, чтобы сделать это ;-)

+1

FYI, taglist добавлен в octobercms только в последней версии, а не в бета-версии. –

+0

@VijayWilson, yeap, если у вас его нет, тогда вы можете заменить select ui на «повторитель + флажок» или «принадлежать отношению», он может иметь такую ​​же функциональность, но другой вид – Aleksej

+0

Да, вы правы, но на самом деле это было требование для размещения всплывающего меню в многосекторе. –

Смежные вопросы