You are here

通用的drupal表单元素属性

老葛的Drupal培训班 Think in Drupal

本部分解释的属性适用于所有的表单元素。
#type
    该字符串声明了一个表单元素的类型。例如,#type = 'textfield'。表单根部必须包含声明#type = 'form'。
 
#access
    该布尔值属性用来判定是否将该表单元素显示给用户。如果表单元素有子表单元素的话,如果父表单元素的#access属性为FALSE的话,那么子表单元素将不显示。例如,如果表单元素是一个字段集,并且它的#access为FALSE,那么字段集里面的所有字段都不显示。
    #access属性可被直接设置为TRUE或FALSE,也可以设置为执行时返回TRUE或FALSE的函数。当表单定义被取回时,将会执行该函数。下面这个例子来自于Drupal的默认节点表单:
$form['revision_information']['revision'] = array(
    '#access' => user_access('administer nodes'),
    '#type' => 'checkbox',
    '#title' => t('Create new revision'),
    '#default_value' => $node->revision,
);
 
#process
    该属性是一个关联数组。在数组的每个条目中,函数名作为键,传递给函数的任何参数作为值。当构建表单元素时将调用这些函数,从而允许在构建表单元素时对该元素进行额外的操作。例如,在modules/system/system.module定义了checkboxes类型,在构建表单期间,将调用includes/form.inc里面的函数expand_checkboxes():
$type['checkboxes'] = array(
    '#input' => TRUE,
    '#process' => array('expand_checkboxes'),
    '#tree' => TRUE
);
还可参看本章中“收集所有可能的表单元素定义”部分中的例子。当#process数组中的所有的函数都被调用以后,将为每个表单元素添加一个#processed属性。
 
#after_build
    该属性是一个函数数组,在构建完表单元素以后它们将被立即调用。每个要被调用的函数都有两个参数:$form 和 $form_state。例如,如果$form['#after_build'] = array('foo', 'bar'),那么Drupal在表单元素构建完以后,分别调用foo($form, $form_state)和bar($form, $form_state)。一旦这些函数都被调用以后,Drupal在内部将为每个表单元素添加一个#after_build_done属性。
 
#theme
    该可选属性定义了一个字符串,当Drupal为该表单元素寻找主题函数时使用。例如,设置#theme = 'foo',Drupal将会在主题注册表中查找对应于foo的条目。参看本章前面的“为表单寻找主题函数”一节。
 
#prefix
    该属性是一个字符串,在表单元素呈现时,它将被添加到表单元素的前面。
 
#suffix
    该属性是一个字符串,在表单元素呈现时,它将被添加到表单元素的后面。
 
#title
    该字符串是表单元素的标题。
 
#weight
    该属性可以是一个整数或者小数。当呈现表单元素时,将根据它们的重量进行排序。重量小的元素将被放到前面,重量大的元素将被放到后面。
 
#default_value
    该属性的类型取决于表单元素的类型。对于输入表单元素,如果表单还没有被提交,那么它就是在该字段中所用的值。不要将它与表单元素#value混淆了。表单元素#value定义了一个内部表单值,尽管用户看不到它,但是它却定义在表单中,并出现在$form_state['values']中。
 

Drupal版本:

评论

首先感谢站长的这些宝贵教程,我看了这一章后。做了个测试的模块。发现表单元素都是一行一行的输出的。不能很灵活的控制它们的布局,比哪我想让这些表单元素以一行两列的表格形式输出,虽然用#prefix ,#suffix 可以控制,可是我这个表单中元素很多。不可能每个元素都用这两个属性来做。我用了以下的模板来输出,可就是不行。不知道是哪里出错了。麻烦站长帮我看下,以下是这个模板文件的内容

 <table>
  <tr>
    <td>
     
<?php
       
print drupal_render($form['namelabel'
]);     
     
?>

   </td>
   <td>
     
<?php
       
print drupal_render($form['name'
]);     
     
?>

   </td>
   <td>
     
<?php
       
print drupal_render($form['agelabel'
]);     
     
?>

   </td>
   <td>
     
<?php
       
print drupal_render($form['age'
]);     
     
?>

   </td>
</tr>
.......
</table>

这几个$form元素都是在模块中有做过定义的。应该是没有问题。因为我不用模板输出时,它会按默认的一行一行的输出。所以我想表单元素的定义语句应该是没有问题的。我就不在贴出来了。
 

 

除了CSS。。我想知道。。我上面的这样写法有错吗。。为什么页面上什么内容都不能输出。如果我将这个模板成静态的内容就可以输出