You are here

为用户呈现一个设置表单(2)

老葛的Drupal培训班 Think in Drupal

下面让我们看一下定义表单的函数,它为节点类型定义了一个复选框(参看图2-1),并且增加了另外两个选项。函数位于sites/all/modules/custom/annotate/annotate.admin.inc中:

 
/**
 * Form builder. Configure annotations.
 *
 * @ingroup forms
 * @see system_settings_form().
 */
function annotate_admin_settings() {
    // Get an array of node types with internal names as keys and
    // "friendly names" as values. E.g.,
    // array('page' => 'Page', 'story' => 'Story')
    $options = node_get_types('names');
 
    $form['annotate_node_types'] = array(
        '#type' => 'checkboxes',
        '#title' => t('Users may annotate these content types'),
        '#options' => $options,
        '#default_value' => variable_get('annotate_node_types', array('page')),
        '#description' => t('A text field will be available on these content types
            to make user-specific notes.'),
    );
 
    $form['annotate_deletion'] = array(
        '#type' => 'radios',
        '#title' => t('Annotations will be deleted'),
        '#description' => t('Select a method for deleting annotations.'),
        '#options' => array(
            t('Never'),
            t('Randomly'),
            t('After 30 days')
        ),
       // Default to Never
        '#default_value' => variable_get('annotate_deletion', 0)   
    );
 
    $form['annotate_limit_per_node'] = array(
        '#type' => 'textfield',
        '#title' => t('Annotations per node'),
        '#description' => t('Enter the maximum number of annotations allowed per
           node (0 for no limit).'),
        '#default_value' => variable_get('annotate_limit_per_node', 1),
        '#size' => 3
    );
 
    return system_settings_form($form);
}
 
    我们添加了一个单选按钮,用来选择什么时候应该删除注释;添加了一个文本输入框,用来限制一个节点上所允许的注释数量(这些模块增强特性的实现,留给大家作为练习)。在这里,我们自己没有管理表单的处理流程,而是使用了函数system_settings_form()来让系统模块为表单添加一些按钮,并让它来管理表单的验证和提交。图2-4给出了的当前表单的样子。
2-4 使用了复选框,单选按钮,文本输入框的增强表单

Drupal版本: