Как я могу использовать node_load и рендерить контекстные ссылки - PullRequest
2 голосов
/ 24 ноября 2011

У меня есть массив идентификаторов узлов, с помощью которых можно выполнить цикл и запустить 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 Ответ

5 голосов
/ 24 ноября 2011

Вы можете использовать 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 к конкретному подмассиву, который вас интересует.

...