作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
在module文件中,我们添加了以下代码:
/**
* Implementation of hook_ctools_plugin_directory().
*/
function field_validation_ctools_plugin_directory($module, $plugin) {
if ($module == 'ctools' && $plugin == 'export_ui') {
return 'plugins/' . $plugin;
}
}
/**
* Implementation of hook_ctools_plugin_api().
*
* Tell Ctools that we support the default_field_validation_rules API.
*/
function field_validation_ctools_plugin_api($owner, $api) {
if ($owner == 'field_validation' && $api == 'default_field_validation_rules') {
return array('version' => 1);
}
}
hook_ctools_plugin_directory用来定义插件的位置,hook_ctools_plugin_api用来告诉Ctools,我们支持通过default_field_validation_rules定义验证规则。
这里我们需要区分一点,default_field_validation_rules和default_field_validation_rule的区别,前面写作的时候把两者都作为了钩子,这是不对的,正确的理解应该是这样的,default_field_validation_rule是一个钩子,可以用来定义规则,default_field_validation_rules,则对应于field_validation. default_field_validation_rules.inc文件,在这个文件中,我们可以实现钩子default_field_validation_rule。有点绕口,为了更好的理解两者之间的关系,建议大家打开RC1 版中的field_validation.default_field_validation_rules.inc文件,里面的代码如下:
/**
* Implementation of hook_default_field_validation_rule().
*
* Provide default validation rules.
*/
function field_validation_default_field_validation_rule() {
$export = array();
$rule = new stdClass;
$rule->api_version = 1;
$rule->name = 'body_min_words';
$rule->rulename = 'Body Min words';
$rule->field_name = 'body';
$rule->col = 'value';
$rule->entity_type = 'node';
$rule->bundle = 'page';
$rule->validator = 'min_words';
$rule->data = '2';
$rule->error_message = t('You should enter at least two words.');
$export['body_min_words'] = $rule;
return $export;
}
这个函数里面的$rule变量,就对应于我们前面的identifier。现在,我们的验证规则,不仅仅存放在了数据库中,还可以通过代码来定义。