首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在主题(‘node’,$node)和drupal_render( $node ->$node输出)之间做出决定?

如何在主题(‘node’,$node)和drupal_render( $node ->$node输出)之间做出决定?
EN

Stack Overflow用户
提问于 2010-10-08 00:29:28
回答 6查看 5.2K关注 0票数 6

给定一个$node,我试图在以下两种输出$node的方法之间做出决定。

代码语言:javascript
复制
$output = theme('node', $node);

代码语言:javascript
复制
node_build_content($node);
$output = drupal_render($node->content);

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

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-10-08 01:00:02

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

但!如果您绕过主题层,当您安装模块或主题并更改使用主题层更改节点输出的配置设置时,可能会出现意外行为。

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

如果你感兴趣的话,请看装饰图案。Drupal广泛使用这种方法。

模式

票数 7
EN

Stack Overflow用户

发布于 2010-12-27 08:00:54

好吧,差不多吧。

你真正想要的是

代码语言:javascript
复制
$output = node_view($node);

如果您只调用node_build_content,然后调用主题(‘node’,$node),则不会调用hook_nodeapi('alter'),也不会调用hook_link()

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

此外,您还可以调用$output = node_view($node, FALSE, FALSE, FALSE);,这将为您提供没有链接的节点。

请参阅视图()的文档。

票数 6
EN

Stack Overflow用户

发布于 2011-08-26 13:09:42

如果您查看drupal_render()的源代码,它实际上也会调用theme()本身(如果提供了#theme覆盖)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3886898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档