我正在尝试创建一个表示bbcode编辑器的新表单元素,该编辑器是工具栏和本机textarea元素的复合对象。 所以我的hook_element_info()看起来像:
function bbeditor_element_info() {
$type['bbeditor'] = array(
'#input' => TRUE,
'#cols' => 60,
'#rows' => 5,
'#resizable' => TRUE,
'#process' => array('process_bbeditor'),
'#theme_wrappers' => array('bbeditor', 'form_element'),
);
return $type;
}
但是如何在过程函数中获取元素的名称以将其传递到嵌套的textarea元素中?
function process_bbeditor($element, &$form_state) {
...
// Insert the textarea element as a child.
$name = 'textarea'; // <------------- How do I get the name?
$element[$name] = $textarea;
return $element;
}
答案 0 :(得分:0)
$ form_state变量存储表单状态的信息(意味着你可以使用这个变量来获取表单元素的值)
喜欢:
$form_state['element_name']['value'];
这将为您提供表单元素的值。我不太确定$ form_state ['element_name']会给你元素的名称,也可能会返回数组。
请使用
进行检查var_dump($form_state['element_name']);
在你的钩子里打印什么
function process_bbeditor($element, &$form_state) {
...
var_dump($form_state['element_name']);
}
答案 1 :(得分:0)
好的,知道这可能对OP来说有点晚了,我只是想为那些可能偶然发现的人的利益添加一个答案:)
假设您正在进行drupal 7安装:
$element['#name']
包含元素的名称,前提是它具有名称。如果通过drupal_get_form呈现它将自动接收名称,在这种情况下,它接收初始表单数组中相应数组元素的名称。也可以直接设置#name
属性,例如
$form['bbeditor_test'] = array(
'#type' => 'bbeditor',
'#name' => 'use-this-name',
// some more stuff ....
);
对于为Drupal的字段API定义的自定义字段(即通过hook_field_info和相关挂钩定义字段时)重复使用_process
回调通常是有意义的。在这种情况下请注意,该元素的名称不包含在#name
属性中,而是包含在#field_name
属性中。
因此,假设process_bbeditor
也用于字段API字段,我们会有类似的内容:
function process_bbeditor($element, &$form_state,$form) {
// some stuff ...
$element_name = '';
if (isset($element['#name'])) {
$element_name = $element['#name'];
}
elseif (isset($element['#field_name'])) {
$element_name = $element['#field_name'];
}
else { // to handle the rare case when drupal_render is called directly on the parent array and #name isn't set
$element_name = 'undefined';
}
// some more stuff using $element_name ....
return $element;
}