我正在尝试创建一个与普通术语参考小部件相似的字段小部件,只是有一个关键的区别。用户需要能够同时添加多个新的分类法术语,这可能更好地证明了这一点:
我已经讲到了功能类似于分类法/选项/列表模块所提供的功能(即,显示了复选框/收音机,正在保存等)。
这是我在其中使用的重要代码hook_field_widget_form()
:
$element += array(
'#type' => $multiple ? 'checkboxes' : 'radios',
'#default_value' => $multiple ? $default_value : reset($default_value),
'#options' => $options,
'#value_key' => $value_key,
'#element_validate' => array('options_field_widget_validate'),
'#properties' => $properties,
);
让我感到困惑的是,$ element不是您通常的表单数组,因此我不确定如何添加文本字段和按钮-尤其是它们的值不是要保存的。将这些字段添加到窗口小部件的最佳方法是什么?
至于添加所需的Javascript,我是否认为应该使用#ajax来调用为复选框重新构建#options的函数?
提前致谢!
编辑- 我最初的问题很模糊,这是我尝试过的更多详细信息:
$element += array(
'#type' => 'fieldset',
'#delta' => $delta,
);
$element['value'] = array(
'#type' => $multiple ? 'checkboxes' : 'radios',
'#default_value' => $multiple ? $default_value : reset($default_value),
'#options' => $options,
'#value_key' => $value_key,
'#element_validate' => array('options_field_widget_validate'),
'#properties' => $properties,
);
$element['text'] = array(
'#type' => 'textfield',
'#title' => t('Add another'),
'#weight' => 5,
);
这是我所见过的各种示例的融合,似乎使我更加接近。问题是,当我提交实体表单时,出现以下错误:
注意:未定义的索引:taxonomy_field_is_empty()中的tid(modules \ taxonomy \ taxonomy.module的第1402行)。
我仔细研究了此函数,并期望它$item
具有结构$item = array('tid', 2)
。当使用上面的代码时,似乎是某个地方有一个增量,而最终的结构$item
是$item = array(0, array('tid', 2)
。我无法确定“ 0”来自何处?
另一个编辑
通过更改$ element,我已经可以使用以下代码修复上述错误:
$element += array(
'#type' => 'fieldset',
'#process' => array('taxonomy_free_entry_ignore_parent'),
);
并添加功能:
function taxonomy_free_entry_ignore_parent(&$form, &$form_state, $complete) {
array_pop($form['#parents']);
return $form;
}
保存实体时,我会收到一条消息,告诉我它已被保存。当我检查表的字段时,它没有被保存。我究竟做错了什么?