什么';“的用法”#过程“;drupal表单api中的回调?
drupal fapi中有一个属性“#process”。它到底是什么?为什么密码字段使用它来复制字段,而不是将其与主题一起添加?什么';“的用法”#过程“;drupal表单api中的回调?,drupal,Drupal,drupal fapi中有一个属性“#process”。它到底是什么?为什么密码字段使用它来复制字段,而不是将其与主题一起添加? 我想用它来定义一个带有hook_元素的新字段类型 编辑: 以下是我的hook_元素: function test_elemets() { return array( 'test_field' => array( '#input' => TRUE, '#process' =&
我想用它来定义一个带有hook_元素的新字段类型 编辑:
以下是我的hook_元素:
function test_elemets() {
return array(
'test_field' => array(
'#input' => TRUE,
'#process' => array('test_field_process'),
)
);
}
和进程回调:
function test_field_process($element, $edit, &$form_state, $complete_form) {
$element = array();
return $element;
}
正如您在process function中看到的,我使用$element=array()来查看发生了什么。但是表单的显示方式与以前一样。为什么?请阅读
它是一个回调函数数组,每个回调函数都将通过传递给它的元素定义数组进行调用。然后,回调函数可以作用于元素定义数组,将其转换为不同(通常更复杂)的定义,例如,在附加平等性检查JavaScript文件时复制密码字段,或将一个组合的“无线电”定义转换为相应数量的特定单“无线电”定义等
如果您想提供一个复杂的表单元素(例如,多个“标准”元素的组合,或一个自动添加标准JavaScript帮助程序的元素),但仍然保持表单API的简单、声明性方法,那么您将需要使用它。(看Ma-只有一个'#type'='myCrazyFormElement'
数组,它“自动”扩展到更复杂的方式;)
通过主题层执行此操作可能是可能的,具体取决于用例,但每次需要时都需要更多代码。表示:
调用的函数数组
当一个元素被处理时。使用
通过此回调,模块可以“注册”
进一步行动。例如
“收音机”窗体类型扩展为
多个单选按钮使用
处理功能
处理与主题化的不同之处在于保持在表单API中。您不能在主题层中更改表单数组(至少在D6中不能)。特别是密码,添加到#进程中。您可能会将其中的大部分内容混在主题层中,但这一行不行:
$element['#cache'] = TRUE;
因为缓存发生在主题层之前,所以不能在主题层中完成。更一般地说,虽然过程中发生的一些事情可能发生在主题层,但不可能全部发生在主题层,因为表单不仅仅是前端显示;它们也是后端处理。谢谢。但是为什么模块提供元素而不将这些命令添加到钩子元素函数本身?例如,为什么在进程函数中写入$element['#cache']=TRUE而不是示例钩子元素?