在annotate模块中,我们给了管理员以设置哪些节点类型可以支持注释功能的权限。(如图2-1)。现在让我们深入了解一下其工作原理吧。
当一个网站管理员想要改变对annotata模块的设定的时候,我们就要显示一个表单,好让他对我们提供的选项进行选择。在我们的菜单项中,我们将page callback指向了drupal_get_form()函数,并将page arguments设置成一个包含了annotate_admin_settings的数组。这意味着。当用户访问http://example.com/?q=admin/annotate/settings的时候就会调用drupal_get_form ('annotate_admin_settings')函数,这个过程就是让Drupal建立annotate_admin_settings()函数所定义的表单的过程。
让我们看一下这个函数,它定义了一个关于节点类型的复选框(见图2-1),以及添加了另外两个可选择性区域。它就在sites/all/modules/ custom/annotate/annotate.a-
dmin.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_value' => variable_get('annotate_deletion', 0)
// Default to Never
);
$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 使用了复选框、单选键、文本设置区的表单
Taxonomy upgrade extras