Флажки: как установить значения по умолчанию или показать пользовательские значения с помощью Form API? [закрыто]

7

Я использую элемент checkboxes внутри формы в модуле, который я начал разрабатывать для Drupal 7. Это моя первая попытка разработки модуля и использования API формы. Я создаю список флажков, которые перечисляют все типы контента определенного сайта. Массив всех типов содержимого , может быть получен с помощью следующих функций : $nodeTypesRaw=node_type_get_names();. Получается массив с машинными именами типов контента в качестве ключей и человекочитаемыми именами в качестве значений.

По умолчанию я бы хотел, чтобы все флажки были установлены и когда форма была отправлена. Как мне этого добиться? Страницы API форм на сайте drupal не очень полезны в отношении установки значений по умолчанию для флажков.

$nodeTypesRaw=node_type_get_names();
$nodeMachineNames=array_keys($nodeTypesRaw);
$form['process_comments']['custommod_published_comments_select_node_types']['custommod_published_comments_node_types_checkboxes']=array(
          '#deafult_value'=>$nodeMachineNames,
          '#options'=>$nodeTypesRaw,
          '#type'=>'checkboxes',
);

Я изначально начал с приведенного выше кода, но он не будет работать. Он отображает список флажков, но по умолчанию они не отмечены. Переменная попадает при отправке формы (проверяется с помощью drush и var_dump).

bcosynot
источник
2
Это #default_valueне так #deafult_value. FA не AF.
Молот

Ответы:

16

С Drupal.org :

$form['element_id'] = array(
  '#type' => 'checkboxes',
  '#options' => array(1 => "One", 2 => "Two", 3 => "Three"),
  '#default_value' => array(1, 3),
);

Значение по умолчанию устанавливается как массив, представляющий ключи выбранных опций.

Глядя на код в вашем вопросе, проблема с правописанием. вы устанавливаете, '#deafult_value'когда хотите установить '#default_value'.

МОЛОТ
источник
Массив всех типов содержимого , может быть получен с помощью следующих функций : $nodeTypesRaw=node_type_get_names();. Получается массив с машинными именами типов контента в качестве ключей и человекочитаемыми именами в качестве значений. Когда я устанавливаю '# default_value` с помощью переменной $nodeMachineNames=array_keys($nodeTypesRaw);, флажки остаются не отмеченными.
bcosynot
1
@ vr3690 Нет, вы не установили значение по умолчанию. Смотрите комментарий под своим вопросом или обновляйте мой ответ.
Молот
10

В качестве значения по умолчанию необходимо указать массив ключей параметров (не значений), например

$options = array(
  'option_1' => t('Option 1'),
  'option_2' => t('Option 2'),
  'option_3' => t('Option 3'),
);

$defaults = array_keys($options);

$form['checkboxes'] = array(
  '#type' => 'checkboxes',
  '#title' => t('Something'),
  '#options' => $options,
  '#default_value' => $defaults,
);
Клайв
источник
Привет, я уже использую подобный код. Я отредактировал свой ответ и добавил то же самое к нему. Это не работает.
bcosynot
1
У меня отлично работает в пустой установке, вы уверены, что у вас нет опечатки, #default_valueкак подсказывает @ Молот
Клайв
Просто интересно, изменилось ли это в какой-то момент? Потому что я смотрю прямо сейчас в form_process_checkboxи form_process_checkboxesиз Drupal 7 и нет механизма , который позволил бы это работать, и, конечно , это не работает для меня. github.com/drupal/drupal/blob/7.x/includes/form.inc#L3270-L3351
Лукаш Зарода,
Не то, чтобы я знал о @ ŁukaszZaroda ... если вы посмотрите, user_account_formнапример, тот же метод используется там для ролей
Клайв