You are here

drupal表单API属性

老葛的Drupal培训班 Think in Drupal

当在你的表单构建函数中构建一个表单定义时,数组中的键用来声明表单的信息。在下面部分中列出了最常用的键。表单构建器可以自动添加一些键。
 
表单根部的属性
下面所列的属性是特定于表单根部的。换句话说,你可以设置$form['#programmed'] = TRUE,但是如果你设置$form['myfieldset']['mytextfield'] [#programmed'] = TRUE那么对表单构建器来说没有任何意义。
 
#parameters
    该属性是一个数组,包含了传递给drupal_get_form()的原始参数。通过drupal_retrieve_form()可添加该属性。
 
#programmed
    这是一个布尔值属性,用来指示一个表单是以程序的方式来提交的, 比如通过drupal_execute()。如果在表单处理前设置了属性#post,那么可以使用drupal_prepare_form()来设置该属性。
 
#build_id
    该属性是一个字符串(MD5哈希)。#build_id用来标识一个特定的表单实例。它作为一个隐藏域放在表单中,通过使用drupal_prepare_form()来设置这个表单元素,如下所示:
$form['form_build_id'] = array(
    '#type' => 'hidden',
    '#value' => $form['#build_id'],
    '#id' => $form['#build_id'],
    '#name' => 'form_build_id',
);
 
#token
    这个字符串(MD5哈希)是一个唯一的令牌,每个表单中都带有它,通过该令牌Drupal能够判定一个表单是一个实际的Drupal表单,而不是一个恶意用户修改后的。
 
#id
    这个属性是一个由form_clean_id($form_id)生成的字符串,并且它是一个HTML ID属性。$form_id中的任何背对的括号对“][”,下划线“_”,或者空格’’都将被连字符替换,以生成一致的CSS ID。在Drupal的同一个页面中,该ID是唯一的.如果同一个ID出现两次(例如,同一个表单在一个页面显示了两次),那么就会在后面添加一个连字符和一个自增的整数,例如foo-form, foo-form-1, 和foo-form-2。
 
#action
    这个字符串属性是HTML表单标签的动作属性。默认情况,它是request_uri()的返回值。
 
#method
    这个字符串属性指的是表单的提交方法---通常为post。表单API是基于post方法构建的,它将不会处理使用GET方法提交的表单。关于GET 和POST的区别,可参看HTML规范。如果在某种情况下,你想尝试使用GET方法,那么你真正需要可能是Drupal的菜单API,而不是表单API。
 
#redirect
    该属性可以是一个字符串或者一个数组。如果是一个字符串,那么它是在表单提交以后用户想要重定向到的Drupal路径。如果是一个数组,该数组将作为参数被传递给drupal_goto(),其中数组中的第一个元素应该是目标路径(这将允许向drupal_goto()传递额外的参数,比如一个查询字符串)。
 
#pre_render
    该属性是一个数组,它包含了在表单呈现以前所要调用的函数。每个函数都被调用,并且#pre_render所在的元素将被作为参数传递过来。例如,设置$form['#pre_render'] = array('foo', 'bar') 将使Drupal先调用函数foo(&$form),然后调用bar(&$form)。如果#pre_render是设置在一个表单元素上的话,比如$form['mytextfield']['#pre_render'] = array('foo'),那么Drupal将调用foo(&$element),其中$element就是$form['mytextfield']。当你想在表单验证运行以后,呈现以前,使用钩子修改表单结构时,这个属性非常有用。如果想在验证以前修改表单,那么使用hook_form_alter()。
 
#post_render
    该属性是一个数组,它包含了一组函数,这些函数可对刚被呈现的内容进行修改。如果你设置了$form['mytextfield']['#post_render'] = array('bar'),那么你可以这样修改刚创建的内容:
function bar($content, $element) {
    $new_content = t('This element (ID %id) has the following content:',
        array('%id' => $element['#id'])) . $content;
    return $new_content;
}
 
#cache
    该属性控制着表单是否可被Drupal的一般缓存系统所缓存。对表单进行缓存意味着,在表单被提交时,它不需要再被重新构建。如果你想每次都重新构建表单的话,那么你可以设置$form['#cache'] = FALSE。

Drupal版本:

评论