鉴于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)
他们似乎都给出了类似的结果,但在我选择一种方式而不是另一种方式之前,我应该考虑一些事情吗?
如果没有其他模块和主题通过主题层改变输出,则输出类似.
但!如果绕过主题层,则在安装模块或主题并更改使用主题层更改节点输出的配置设置时,您可能会开始遇到意外行为.
简而言之,通过绕过主题层,您将在应用程序中构建错误.将应用程序交给某人(可能是客户端)开始更改admin /中的设置后,可能会发生这些错误
如果您有兴趣,请参阅装饰器模式.Drupal广泛使用它.
http://en.wikipedia.org/wiki/Decorator_pattern
好吧,排序.
你真正想要的是什么
$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()的文档.