1.2 实现hook_ctools_plugin_directory

作者:老葛,北京亚艾元软件有限责任公司,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_rulesdefault_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。现在,我们的验证规则,不仅仅存放在了数据库中,还可以通过代码来定义。


Drupal版本: