【问题标题】:Drupal: where can I get the $content Array in my theme?Drupal:我在哪里可以获得主题中的 $content 数组?
【发布时间】:2010-06-27 08:56:28
【问题描述】:

在渲染成html之前我需要修改节点内容数组。 出于这个原因,我不能在我的节点模板中使用 $content 变量。我正在 template.php 文件中寻找它,但我找不到它。

谢谢

【问题讨论】:

  • ps。我也尝试在 template.php 文件中打印 $vars['content'] ,但它已经呈现为 html,而不是结构化...

标签: drupal drupal-6


【解决方案1】:

AFAIK,您无法从主题内访问未渲染的节点内容数组,因为主题处理发生在处理周期的后期(即内容数组将按照您的观察进行渲染)。

访问和修改节点内容数组在呈现之前的标准方法是在自定义模块中实现hook_nodeapi(),以响应“查看”操作。这会在内容数组组装完成后,但在渲染之前调用,允许您随意调整它。

请注意,其他模块也可能这样做 - 如果是这种情况并且您想要调整其他模块提供的值,则模块的调用顺序变得相关,您可能需要调整模块权重以确保它在其他人之后被调用。

【讨论】:

  • 嗨,所以我在自定义模块中添加了函数:function hook_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) { echo "hook invoked";死(); } 但没有任何反应。我已经刷新了缓存。谢谢
  • @Patrick:与所有 hook_* 函数一样,您需要在实现它的模块之后为其命名,因此在本例中为 yourModuleName_nodeapi(&$node, ...)
【解决方案2】:

生成节点可用变量的原始函数是:http://api.drupal.org/api/function/template_preprocess_node/6

您可以通过在 template.php 中实现自己的节点预处理函数来修改模板变量,该函数将在原始函数之后执行,因此允许您添加自己的变量:

function phptemplate_preprocess_node(&$vars, $hook) {
   // Here you can add your custom variable...
   $vars['myContent'] = "something";
}

【讨论】:

  • 您好,感谢您的回复。我真正想要的是带有内容的结构化树。我注意到内容以 html 格式存储到 $vars['content'] 中。所以它已经在那里渲染了,我无法访问子项(CCK 字段)。
  • 您在 $vars['node'] 变量中有原始节点数据。要检查那里有什么,只需执行 var_dump($vars);内部预处理函数,并查看页面源代码。
  • 如果我替换 $vars['node'] 中的内容,它是否也会自动替换到节点中?我不明白为什么它是多余的,我有 $vars['content'] 和 $vars['node']。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-10
  • 2011-08-05
  • 2011-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多