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

Ben*_*rne 2 php drupal drupal-7

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

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

    echo $flightNode->title;
Run Code Online (Sandbox Code Playgroud)

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

我试过以下无济于事.根本没有输出.

$flightNode = node_load($flight['nid']);
$builtFlightNode = node_build_content( $flightNode );
echo render( $builtFlightNode );
Run Code Online (Sandbox Code Playgroud)

如果有人能够对此提供任何见解,那将非常感激.

Cli*_*ive 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);
Run Code Online (Sandbox Code Playgroud)

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

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

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