【发布时间】:2011-03-31 05:02:31
【问题描述】:
我正在开发一个站点,我碰巧需要将节点模板的整个输出(针对几种内容类型)嵌入到各种其他模板中。大多数情况是将节点 - 在节点引用 CCK 字段中选择 - 嵌入到视图模板中,所以我目前的方法是:
- 在视图设置中:将 noderef 字段直接添加为要输出的字段之一(而不是使用关系使被引用节点的字段可访问)
- 将字段输出的格式设置为“完整节点”——我发现它会打印整个节点模板
这很好,但是:节点模板中使用了一些重要的变量。我已经知道设置这些的唯一方法是通过预处理函数,它确实有效......这种方法的烦恼是,在预处理函数中,我必须检测(通过那里可访问的任何东西)模板输出将在哪里嵌入,所以我可以适当地设置变量。
我想做什么:
直观地说,能够在我的各种视图模板中调用一个函数会更有意义:a) 允许我打印整个节点模板,b) 为预处理变量传递值。有谁知道可以做到这一点的函数或替代方法?
[到目前为止还没有让我想到任何地方:
我知道在类似的情况下,您可以根据将要调用的特定主题函数的签名将选项作为参数传递给 theme()。但是node_view() 没有提供这种能力——并且 node_view() 似乎是调用节点模板的正确函数,而不是 theme('node', ...)。
我看到 node_view() 使用 'alter' 作为 $op 调用了 hook_nodeapi(),但这在游戏中发生得太晚了;到那时,节点内容将已经是 HTML 格式(即 $node->body)。]
【问题讨论】:
-
听起来你同意这感觉不对。 . .我想详细了解页面是什么以及节点之间的关系,以便我们帮助您提出更简化的解决方案。
-
@mirzu 我们有一个内容类型,它充当多个可能的图像来源(作为不同的 CCK 字段)的包装器。这种类型的节点模板通过级联运行,检查填充了哪个源字段,并且还处理图像大小。图像大小和其他几个选项由预处理变量处理。因此,许多其他内容类型的 noderef 字段指向这些图像节点之一;因此需要嵌入图像节点的完整模板输出。
-
也许将调整大小抽象为仅在模块中的函数会更容易,然后在此视图或其自身节点的预处理中调用这些函数。
-
@mirzu 是的,这种方法对我来说也会感觉更好,但不幸的是,调整大小的处理方式不同 - 有时甚至在外部 - 取决于图像来自哪个来源......(我总是想知道如何当我阅读论坛时,人们会遇到奇怪的用例场景……而我自己就在这里!)