2013-05-02 66 views
0

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

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

在这个过程中的回调,该代码工作正常,但我不能让当前节点ID(menu_get_item()arg())。另外,每当我做出一些更改时,我必须清除缓存('cache' => FALSE)。

在处理回调中处理数据有什么我需要知道的吗?

回答

1

menu_get_item()arg()当从输入过滤器的进程回调中调用时不会返回不同的值;他们没有返回您期望的值,可能是因为输入过滤器是在与您想象的不同的上下文中调用的。

输入滤波器被调用时:

  • 的节点体需要呈现
  • 注释体需要呈现
  • 其使用输入格式甲实体字段需要渲染
  • 使用Views模块创建的视图使用输入格式来呈现用户输入的文本
  • 模块使用输入格式呈现从用户输入的文本

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

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

实现输入滤波器不能了解哪个实体它被称为一个模块,和当前页面的路径不一定会提供该信息。例如,我可以有一个模块,它在mymodule/disclaimer中显示ID等于2的节点的内容,或者我可以看到example_path/just_to_make_an_example显示从符合我决定的某些条件的节点摘录的摘录。

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

+0

非常感谢澄清。 我有一系列基于其他自定义模块的问题。 帮助我的模块是http://drupal.org/project/devel_if。 再次非常感谢。 – hugronaphor 2013-05-03 20:24:25

+0

@CornelAndreev你能否让我知道你是如何处理你的案子的,因为我面临类似的问题? – Selvam 2013-11-15 05:48:26