如何为Drupal的管理员用户开发自定义表单?

时间:2010-11-14 18:54:33

标签: drupal forms

这将是为drupal开发自定义表单的最佳方式,对于admin的系统部分?

提前谢谢你!

3 个答案:

答案 0 :(得分:6)

首先,如果表单仅用于管理,则需要一个位置来访问您的表单,最好是在“ admin / * ”命名空间中。 如果您只是显示表单,可以直接使用drupal_get_form作为页面回调(但您可以使用任何函数生成HTML代码,甚至可以与主题函数混合使用)

此外,您需要知道访问表单所需的权限。 默认情况下,我使用“访问管理页面”,但您可能应该使用更具体的内容,具体取决于您希望表单的用途。

假设路径为“ admin / build / something ”,您需要使用hook_menu来注册该路径:

/**
 * Implementation of hook_menu().
 */
function modulename_menu(){
    return array(
        'admin/build/something' => array(
            'title' => 'Example Admin Form',
            'description' => 'Admin form introduced by the MODULENAME module',
            'type' => MENU_NORMAL_ITEM,
            'page callback' => 'drupal_get_form',
            'access arguments' => array('access administration pages'),
        ),
    );
}

现在,要实际显示页面:“页面参数”中提供的值是名称 drupal_get_form期望提供表单结构的函数 (必须是关联数组):

/**
 * Form Structure
 */
function modulename_form_something(&$form_state){
    $form = array();
    $form['myfield'] = array(
        '#title' => 'My Field',
        '#description' => 'This is a basic text input field',
        '#type' => 'textfield',
        '#default_value' => $form_state['values']['myfield'],
    );
    //
    // Here you can add more elements in the form
    //
    return $form;
}

以下是more informations about the Forms API,您可以轻松制作一些相当复杂的表单。


现在您的表单显示在“/ admin / build / something”中,但您可能也希望使用这些数据进行处理;默认情况下,验证和提交函数的名称与表单结构函数相同,分别为“ _validate ”和“ _submit ”(但是您可以使用 #validate 和表单结构中的 #submit

例如,假设字符串“ no ”不是有效值,其他所有内容都被接受。

/**
 * Form validation
 */
function modulename_form_something_validate($form, &$form_state){
    if ($form_state['values']['myfield'] == 'no'){
        form_set_error('myfield', '"<b>no</b>" is not a valid answer, try again.');
    }
}

首先调用验证,但是您应该只检查该函数中的数据是否正常。如果您需要在收到表单时执行操作,请在“submit”处理程序中执行操作,因为可以多次调用validate,而submit只调用一次。

/**
 * Form submission
 */
function modulename_form_something_submit(&$form, &$form_state){
    //
    // Here you can perform whatever action that form is made for.
    //
    drupal_set_message( 'The form has been sent. "myfield" has the following value: '.$form_state['values']['myfield'] );
}

让我们总结一下,这是整个modulename.module文件:

<?php

/**
 * Implementation of hook_menu().
 */
function modulename_menu(){
    return array(
        'admin/build/something' => array(
            'title' => 'Example Admin Form',
            'description' => 'Admin form introduced by the MODULENAME module',
            'type' => MENU_NORMAL_ITEM,
            'page callback' => 'drupal_get_form',
            'page arguments' => 'modulename_form_something',
            'access arguments' => array('access administration pages'),
        ),
    );
}

/**
 * Form Structure
 */
function modulename_form_something(&$form_state){
    $form = array();
    $form['myfield'] = array(
        '#title' => 'My Field',
        '#description' => 'This is a basic text input field',
        '#type' => 'textfield',
        '#default_value' => $form_state['values']['myfield'],
    );
    //
    // Here you can add more elements in the form
    //
    return $form;
}


/**
 * Form validation
 */
function modulename_form_something_validate($form, &$form_state){
    if ($form_state['values']['myfield'] == 'no'){
        form_set_error('myfield', '"<b>no</b>" is not a valid answer, try again.');
    }
}


/**
 * Form submission
 */
function modulename_form_something_submit(&$form, &$form_state){
    //
    // Here you can perform whatever action that form is made for.
    //
    drupal_set_message( 'The form has been sent. "myfield" has the following value: '.$form_state['values']['myfield'] );
}

不要忘记您还需要 .info 文件才能安装模块:

modulename.info的来源:

; $Id
name = Admin Form
description = This module adds an admin form
package = Example Module
core = "6.x"
version = "6.x-0.1-dev"

答案 1 :(得分:3)

Drupal form api系统将帮助您制作所需的任何表格。如果您需要存储设置,system_settings_form是一个很好的捷径。

制作管理表单时唯一的区别是要记住设置所需的某种权限,并将表单放在网站/admin/部分的某个位置。管理表格确实没有什么特别之处。

答案 2 :(得分:0)

除非我误解了您的问题,否则我认为您可以通过使用Webform模块来避免Forms API的麻烦。

无需代码,精美的用户界面和内置的统计工具。

http://drupal.org/project/webform

观看几个教程视频,您将立即制作任何形式。