在Drupal中使用hook_filter_info()自定义过滤器

时间:2013-05-02 17:40:07

标签: drupal-7

尝试使用hook_filter_info()创建自定义过滤器时出现问题。 我必须根据当前查看的节点的字段进行一些替换。我只是使用以下代码。

return str_replace('%people1%', 'REPLACING WORKING', $text);

在进程回调中,该代码工作正常,但我无法获取当前节点ID(menu_get_item()arg())。此外,每次进行一些更改('cache' => FALSE)时,我都必须清除缓存。

在流程回调中处理数据是否需要了解?

1 个答案:

答案 0 :(得分:1)

从输入过滤器的进程回调调用时,

menu_get_item()arg()不会返回不同的值;它们没有返回您期望的值,可能是因为输入过滤器的调用环境与您想象的不同。

在以下情况下调用输入过滤器:

  • 需要呈现节点主体
  • 需要呈现评论正文
  • 需要呈现使用输入格式的实体字段
  • 使用“视图”模块创建的视图使用输入格式呈现从用户输入的文本
  • 模块使用输入格式呈现从用户输入的文本

即使在输入过滤器用于渲染节点主体的情况下,仍然可能存在两种情况:

  • 节点在页面中单独呈现(例如http://example.com/node/2
  • 该页面显示多个节点(例如显示提升到首页的节点列表的首页)

实现输入过滤器的模块无法理解调用它的实体,并且当前页面的路径不一定提供该信息。例如,我可以有一个模块,在mymodule / disclaimer显示ID等于2的节点的内容,或者我可以有一个视图,在example_path / just_to_make_an_example显示摘自符合我决定的某些条件的节点。

如果您需要替换节点主体中的某些单词,例如将%author%替换为节点创建者的用户名,则应该实现hook_node_view_alter()