如何使用node_load和渲染上下文链接

时间:2011-11-24 17:09:59

标签: php drupal drupal-7

我有一个节点ID数组,通过它循环并运行node_load($nid)来检索每个节点的数据。以下面的代码为例 - 这大致是它目前的工作原理。

foreach( $node->field_flights['und'] as $flight ):
    $flightNode = node_load($flight['nid']);

    echo $flightNode->title;

我想要实现的是加载节点,然后能够沿echo render($flightNode);行执行某些操作,以便加载该节点的模板文件,并且我可以呈现$title_suffix变量在已加载的节点模板中。

我试过以下无济于事。什么都没有输出。

$flightNode = node_load($flight['nid']);
$builtFlightNode = node_build_content( $flightNode );
echo render( $builtFlightNode );

如果有人能够提供任何有关这方面的见解,那将非常感激。

1 个答案:

答案 0 :(得分:5)

您可以使用node_view()准备渲染数组。对于性能,考虑使用node_load_multiple()(以及它的对应node_view_multiple())可能是明智之举:

$nids = array();
foreach($node->field_flights['und'] as $flight):
  $nids[] = $flight['nid'];
endforeach;

$flight_nodes = node_load_multiple($nids);

$view_mode = 'teaser'; // could also be 'full'
$views = node_view_multiple($flight_nodes, $view_mode);

// Renders all nodes in one go
echo render($views);

如果这与你正在做的事情不符,虽然这应该逐个节点地工作:

foreach($node->field_flights['und'] as $flight):
  $flight_node = node_load($flight['nid']);
  $view = node_view($flight_node, $view_mode);
  echo render($view);
endforeach;

如果您需要在呈现内容之前修改内容,则可以逐步浏览$views$view数组,并在通过render()运行之前更改所需内容。如果您只想渲染节点内容的特定部分,请再次单步执行数组并将render应用于您感兴趣的特定子阵列。

相关问题