首先,您需要一个位置来访问您的表单,最好是在" 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'),
),
);
}
Run Code Online (Sandbox Code Playgroud)
现在,要实际显示页面:" page arguments "中提供的值是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;
}
Run Code Online (Sandbox Code Playgroud)
以下是有关Forms API的更多信息,您可以使用它来轻松制作一些非常复杂的表单.
现在你的表单显示在"/ admin/build/something"中,但你可能也想用这些数据做这些事情; 默认情况下,validate和submit函数的名称与表单结构函数相同,分别带有" _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.');
}
}
Run Code Online (Sandbox Code Playgroud)
首先调用验证,但是您应该只检查该函数中的数据是否正常.如果您需要在收到表单时执行操作,请在"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'] );
}
Run Code Online (Sandbox Code Playgroud)
让我们总结一下,这是整个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'] );
}
Run Code Online (Sandbox Code Playgroud)
不要忘记你还需要一个.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"
Run Code Online (Sandbox Code Playgroud)