复选框:如何使用Form API设置默认值或显示用户定义的值?[关闭]


7

我正在为Drupal 7开发的模块中的表单中使用一个复选框元素。这是我第一次尝试模块开发和使用Form API。我正在创建一个复选框列表,该列表列出了特定站点的所有内容类型。可以使用以下方法获取所有内容类型的数组:$nodeTypesRaw=node_type_get_names();。获得一个以内容类型的机器名称作为键并以人类可读的名称作为值的数组。

默认情况下,我希望选中所有复选框以及提交表单的时间。我该如何实现?drupal网站上的Form API页面对于设置复选框的默认值不是很有帮助。

$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检查)。


2
#default_value,不是#deafult_value。FA不是AF。
Mołot

Answers:


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不,您没有设置默认值。查看您问题下的评论,或更新为我的答案。
Mołot

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像@Mołot建议的那样打错吗
Clive

只是想知道,它在某个时候改变了吗?因为我看他现在在form_process_checkboxform_process_checkboxesDrupal 7的和没有机制,让这个工作,当然它不会为我工作。github.com/drupal/drupal/blob/7.x/includes/form.inc#L3270-L3351
卢卡斯Zaroda

并不是我知道@ŁukaszZaroda... user_account_form例如,如果使用相同的方法来扮演角色
克莱夫(Clive)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.