1

尝试使用hook_filter_info(). 我必须根据当前查看节点的字段进行一些替换。我只是使用以下代码。

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

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

关于在流程回调中处理数据,我有什么需要了解的吗?

4

1 回答 1

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()

于 2013-05-03T13:40:40.053 回答