如何在主题('node',$ node)和drupal_render($ node-> content)之间决定程序化$ node输出

dki*_*zer 6 drupal drupal-6

鉴于a $node,我试图在以下两种输出该$节点的方式之间做出决定.

$output = theme('node', $node);
Run Code Online (Sandbox Code Playgroud)

要么

node_build_content($node);
$output = drupal_render($node->content);
Run Code Online (Sandbox Code Playgroud)

他们似乎都给出了类似的结果,但在我选择一种方式而不是另一种方式之前,我应该考虑一些事情吗?

Rim*_*ian 7

如果没有其他模块和主题通过主题层改变输出,则输出类似.

但!如果绕过主题层,则在安装模块或主题并更改使用主题层更改节点输出的配置设置时,您可能会开始遇到意外行为.

简而言之,通过绕过主题层,您将在应用程序中构建错误.将应用程序交给某人(可能是客户端)开始更改admin /中的设置后,可能会发生这些错误

如果您有兴趣,请参阅装饰器模式.Drupal广泛使用它.

http://en.wikipedia.org/wiki/Decorator_pattern


Mix*_*gic 6

好吧,排序.

你真正想要的是什么

$output = node_view($node);
Run Code Online (Sandbox Code Playgroud)

如果你只是调用node_build_content,然后调用theme('node',$ node),hook_nodeapi('alter')则永远不会调用,也不会调用hook_link().

因此,如果任何模块期望改变构建的节点,它将不会有机会,如果应该有链接,它们也不会在那里.

此外,您可以调用$output = node_view($node, FALSE, FALSE, FALSE);哪个为您提供没有链接的节点.

请参阅node_view()的文档.