这将是为drupal开发自定义表单的最佳方式,对于admin的系统部分?
提前谢谢你!
答案 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
观看几个教程视频,您将立即制作任何形式。