You are here

实现hook_filter()(1)

g089h515r806 的头像
Submitted by g089h515r806 on 星期三, 2009-08-19 10:33

老葛的Drupal培训班 Think in Drupal

list操作
    list操作返回的是一个包含滤器名字的关联数组,其中以数字为键,这是由于在单个hook_filter()钩子实例中可以声明多个过滤器的缘故。这些数字键可用在接下来的操作中,并可通过$delta参数传递回钩子。
 
case 'list':
return array(
0 => t('Creative Juices filter'),
1 => t('The name of my second filter'),
);
 
description操作
    该操作返回了一个简短描述,用来描述过滤器能做什么。只有具有“管理过滤器”权限的用户才能看到这些描述。
 
case 'description':
switch ($delta) {
case 0:
return t('Enables users to insert random sentences into their posts.');
case 1:
return t('If this module provided a second filter, the description
 for that second filter would go here.');
 
// Should never reach here as value of $delta never exceeds
// the last index of the 'list' array.
default:
return;
}
 
settings操作
     当过滤器需要一个用于配置的表单界面时,使用该操作。它返回一个表单定义。当表单提交时,将会使用variable_set()自动的将值保存起来。这意味在取回值时使用variable_get()。该操作的使用实例,可参看modules/filter/filter.module中的filter_filter()。
 
no cache操作
    当使用这个过滤器时,过滤器系统应该为过滤文本绕过它的缓存机制么?如果要禁用缓存,那么返回的代码应该为TRUE。在你开发过滤器时,你将需要禁用缓存,这样调试起来方便一些。如果你修改no cache操作所返回的布尔值,在生效以前,你需要编辑一个使用了你的过滤器的输入格式,这是因为编辑输入格式将更新filter_formats表和该过滤器的缓存设置。
 
警告 禁用单个过滤器的缓存,会删除使用了该过滤器的任意输入格式的缓存。
 
prepare操作
    内容的实际过滤流程包含两步。首先,允许过滤器准备待处理文本。这步的主要目的是将HTML转变为相应的实体。例如,有这样一个过滤器,它允许用户粘贴代码片段。prepare步骤会将代码转变为HTML实体,这样就可以阻止接下来的过滤器将它解释为HTML了。如果没有这一步的话,HTML过滤器将会清除掉这个HTML。过滤器使用prepare的例子,可参看codefilter.module,该模块用于处理<code></code> 和 <?php ?> 标签,从而允许用户发布代码而不用担心转义为HTML实体。该模块的下载地址为http://drupal.org/project/codefilter
 
process操作
     在process操作期间,从prepare步骤里面返回的结果将被传递回hook_filter()中。在这里进行实际的本文处理:将URL转换为可点击的超链接,删除恶意数据,添加单词定义,等等。在prepare操作和process操作中都应该返回$text
 
default操作
    包含默认情况非常重要。如果你的模块没有实现一些操作时,那么将调用该操作,要保证在这里总能返回$text(你的模块要过滤的文本)。
 

Drupal版本: