给定一个$node,我试图在以下两种输出$node的方法之间做出决定。
或
$output = theme('node', $node);或
node_build_content($node);
$output = drupal_render($node->content);他们似乎都给出了相似的结果,但是在我选择一种方式之前,我是否应该考虑一些事情呢?
发布于 2010-10-08 01:00:02
如果没有其他模块和主题通过主题层更改输出,则输出类似。
但!如果您绕过主题层,当您安装模块或主题并更改使用主题层更改节点输出的配置设置时,可能会出现意外行为。
简而言之,通过绕过主题层,您将错误构建到应用程序中。这些错误可能发生在您将应用程序交给某个开始更改admin/中设置的人(可能是客户端)之后。
如果你感兴趣的话,请看装饰图案。Drupal广泛使用这种方法。
模式
发布于 2010-12-27 08:00:54
好吧,差不多吧。
你真正想要的是
$output = node_view($node);如果您只调用node_build_content,然后调用主题(‘node’,$node),则不会调用hook_nodeapi('alter'),也不会调用hook_link()。
因此,如果任何模块期望改变构建的节点,它将没有机会,如果应该有链接在它上,他们也不会在那里。
此外,您还可以调用$output = node_view($node, FALSE, FALSE, FALSE);,这将为您提供没有链接的节点。
请参阅视图()的文档。
发布于 2011-08-26 13:09:42
如果您查看drupal_render()的源代码,它实际上也会调用theme()本身(如果提供了#theme覆盖)。
https://stackoverflow.com/questions/3886898
复制相似问题