在这个例子中,改变设定并点击“Save configuration”按钮,结果就被储存下来。而点击“Reset to defaults”按钮,字段就都被重置成默认值。接下来的内容就讲明了这一切的工作机制。
使用Drupal的变量表
我们先看一下“Annotations per node”。它的#default_value键的值被设置成variable_get('annotate_limit_per_node', 1)
在数据库中,Drupal有一个关于变量的表,通过使用variable_set($key, $value)和variable_get($key, $default)可以实现键—值的成对存和取。所以上面的代码实际上是在说:“将‘Annotations per node’的默认值作为变量annotate_limit_per_node的值存在变量表中,但如果没找到任何值,就将1作为默认值。”所以当“Reset to defaults”按钮被点击,Drupal就会从变量表中删除annotate_limit_per_node的当前值,并将其替换为默认值1.
Note:为了使变量的存取不会出现命名冲突,请保持你表单元素和变量的命名上的一致性(例如当前例子中的annotate_limit_per_node),而创建表单元素或者变量时命名的规则都是使用你的模块名加上一个具有描述性质的名字。
“Annotations will be deleted”的情况将会复杂一些,因为它是一个单选按钮。其#options键如下:
'#options' => array(
t('Never'),
t('Randomly'),
t('After 30 days')
)
当PHP得到一个没有键的数组的时候,它会自动给其加上数字型的键,所以实际上数组是像下面这样的:
'#options' => array(
[0] => t('Never'),
[1] => t('Randomly'),
[2] => t('After 30 days')
)
当我们改变这个字段的默认值的时候,我们使用:
'#default_value' => variable_get('annotate_deletion', 0) // Default to Never
这段代码的意思是,将将数组的返回结果初始化为0,其值是t('Never')。
用variable_get()函数读入已经存储的值
variable_get()用于读取你模块中已经保存好的设置。
// Get stored setting of maximum number of annotations per node.
$max = variable_get('annotate_limit_per_node', 1);
要注意到的是,这里variable_get()函数也使用了默认值,这是为了应对没有已存储好的值可以使用的情况(可能管理员还没有访问过这个设定页面)。
Taxonomy upgrade extras