Отрисовка узла Drupal

Я хотел бы показать узел внутри другого узла. Итак, я получаю идентификатор узла второго узла и хочу визуализировать/печатать/... его внутри другого узла.
Но я не уверен, как это сделать. Я пробовал drupal_render, node_view, print,... но безрезультатно. Любой совет?

$nid = $node->field_linked_fiche['und'][0]['nid'];
$fullFiche = node_load($nid);

ИЗМЕНИТЬ – весь шаблон

<?php

    /**
     * @file
     * Bartik's theme implementation to display a single Drupal page.
     *
     ...
     */
    ?>
    <div id="page-wrapper"><div id="page">

      <div id="header" class="<?php print $secondary_menu ? 'with-secondary-menu': 'without-secondary-menu'; ?>"><div class="section clearfix">

        <?php if ($logo): ?>
          <a href="<?php print $front_page; ?>" title="<?php print t('Home'); ?>" rel="home" id="logo">
            <img src="<?php print $logo; ?>" alt="<?php print t('Home'); ?>" />
          </a>
        <?php endif; ?>

        <?php if ($site_name || $site_slogan): ?>
          <div id="name-and-slogan"<?php if ($hide_site_name && $hide_site_slogan) { print ' class="element-invisible"'; } ?>>

            <?php if ($site_name): ?>
              <?php if ($title): ?>
                <div id="site-name"<?php if ($hide_site_name) { print ' class="element-invisible"'; } ?>>
                  <strong>
                    <a href="<?php print $front_page; ?>" title="<?php print t('Home'); ?>" rel="home"><span><?php print $site_name; ?></span></a>
                  </strong>
                </div>
              <?php else: /* Use h1 when the content title is empty */ ?>
                <h1 id="site-name"<?php if ($hide_site_name) { print ' class="element-invisible"'; } ?>>
                  <a href="<?php print $front_page; ?>" title="<?php print t('Home'); ?>" rel="home"><span><?php print $site_name; ?></span></a>
                </h1>
              <?php endif; ?>
            <?php endif; ?>

            <?php if ($site_slogan): ?>
              <div id="site-slogan"<?php if ($hide_site_slogan) { print ' class="element-invisible"'; } ?>>
                <?php print $site_slogan; ?>
              </div>
            <?php endif; ?>

          </div> <!-- /#name-and-slogan -->
        <?php endif; ?>

        <?php print render($page['header']); ?>

        <?php if ($main_menu): ?>
          <div id="main-menu" class="navigation">
            <?php print theme('links__system_main_menu', array(
              'links' => $main_menu,
              'attributes' => array(
                'id' => 'main-menu-links',
                'class' => array('links', 'clearfix'),
              ),
              'heading' => array(
                'text' => t('Main menu'),
                'level' => 'h2',
                'class' => array('element-invisible'),
              ),
            )); ?>
          </div> <!-- /#main-menu -->
        <?php endif; ?>

        <?php if ($secondary_menu): ?>
          <div id="secondary-menu" class="navigation">
            <?php print theme('links__system_secondary_menu', array(
              'links' => $secondary_menu,
              'attributes' => array(
                'id' => 'secondary-menu-links',
                'class' => array('links', 'inline', 'clearfix'),
              ),
              'heading' => array(
                'text' => t('Secondary menu'),
                'level' => 'h2',
                'class' => array('element-invisible'),
              ),
            )); ?>
          </div> <!-- /#secondary-menu -->
        <?php endif; ?>

      </div></div> <!-- /.section, /#header -->

      <?php if ($messages): ?>
        <div id="messages"><div class="section clearfix">
          <?php print $messages; ?>
        </div></div> <!-- /.section, /#messages -->
      <?php endif; ?>

      <div id="main-wrapper" class="clearfix"><div id="main" class="clearfix">

        <?php if ($breadcrumb): ?>
          <div id="breadcrumb"><?php print $breadcrumb; ?></div>
        <?php endif; ?>

        <?php if ($page['sidebar_first']): ?>
          <div id="sidebar-first" class="column sidebar"><div class="section">
            <?php print render($page['sidebar_first']); ?>
          </div></div> <!-- /.section, /#sidebar-first -->
        <?php endif; ?>

        <div id="content" class="column"><div class="section">
          <?php if ($page['highlighted']): ?><div id="highlighted"><?php print render($page['highlighted']); ?></div><?php endif; ?>
          <a id="main-content"></a>
          <?php print render($title_prefix); ?>
          <?php if ($title): ?>
            <h1 class="title" id="page-title">
              <?php print $title; ?>
            </h1>
          <?php endif; ?>
          <?php print render($title_suffix); ?>
          <?php if ($tabs): ?>
            <div class="tabs">
              <?php print render($tabs); ?>
            </div>
          <?php endif; ?>
          <?php print render($page['help']); ?>
          <?php if ($action_links): ?>
            <ul class="action-links">
              <?php print render($action_links); ?>
            </ul>
          <?php endif; ?>
          // Render second node inside this one
          <?php 
              $nid = 739; // NOTE :: Hard coded, but need to be variable!!
              drupal_render(node_view(node_load($nid)))
          ?>
          <?php print render($page['content']); ?>
          <?php print $feed_icons; ?>

        </div></div> <!-- /.section, /#content -->

        <?php if ($page['sidebar_second']): ?>
          <div id="sidebar-second" class="column sidebar"><div class="section">
            <?php print render($page['sidebar_second']); ?>
          </div></div> <!-- /.section, /#sidebar-second -->
        <?php endif; ?>

      </div></div> <!-- /#main, /#main-wrapper -->

      <div id="footer-wrapper"><div class="section">

        <?php if ($page['footer']): ?>
          <div id="footer" class="clearfix">
            <?php print render($page['footer']); ?>
          </div> <!-- /#footer -->
        <?php endif; ?>

      </div></div> <!-- /.section, /#footer-wrapper -->

    </div></div> <!-- /#page, /#page-wrapper -->

person Michiel    schedule 19.12.2011    source источник
comment
Я не проверял, но он должен работать с drupal_render(node_view(node_load($nid)))   -  person Marius Ilie    schedule 19.12.2011
comment
Нет, я же говорил, что уже пробовал это...   -  person Michiel    schedule 19.12.2011
comment
Я предполагаю, что вы сделали что-то не так, потому что я сделал то же самое ( drupal_render(node_view(node_load($nid))) ), чтобы отобразить несколько узлов на одной странице, и это сработало отлично.   -  person Marius Ilie    schedule 19.12.2011
comment
И вы сделали это в своем page.tpl?   -  person Michiel    schedule 19.12.2011
comment
Мне любопытно, как вы это сделали... Сценарий, который вы только что опубликовали, ничего не сделал в моем page.tpl.php. Я получаю эту ошибку: Strict warning: Only variables should be passed by reference in include() (line 9 of ***   -  person Michiel    schedule 19.12.2011
comment
Может несоответствие версий? В Drupal 6 node_view() возвращает тематический узел (т. е. вызывает drupal_render() внутренне), поэтому он дает уже обработанную и «готовую к использованию» разметку. В Drupal 7 node_view() подготавливает только структурированный массив, необходимый drupal_render() для создания разметки.   -  person Henrik Opel    schedule 20.12.2011
comment
Я использую Drupal 7. Итак, какой фрагмент кода мне нужен?   -  person Michiel    schedule 20.12.2011
comment
В Drupal 7 вам понадобится фрагмент, опубликованный Мариусом Илие (drupal_render(node_view(node_load($nid)))). Если это не работает для вас, вы должны проверить свои предварительные условия и промежуточные шаги, т.е. есть ли у вас действительный nid, возвращает ли node_load() действительный объект узла и т. д.   -  person Henrik Opel    schedule 20.12.2011
comment
У меня есть действительный $nid (var_dump показывает мне все аспекты узла), как и node_load(). Но я продолжаю получать ошибку переменной, упомянутую выше...   -  person Michiel    schedule 20.12.2011
comment
Я сделал это в модуле, а не в page.tpl.php, но синтаксис должен быть таким же. Кроме того, я сначала загрузил узел, а затем отрендерил его: $node2 = node_load_multiple($nids); $output = drupal_render(node_view($node2));   -  person Marius Ilie    schedule 20.12.2011
comment
Я только что попробовал, но, должно быть, я делаю что-то ужасное неправильно, потому что до сих пор нет результатов...   -  person Michiel    schedule 20.12.2011
comment
Могу я увидеть код, который вы используете? Я имею в виду весь шаблон   -  person Marius Ilie    schedule 20.12.2011
comment
Это просто стандартный page.tpl.php с добавленным вашим кодом...   -  person Michiel    schedule 20.12.2011
comment
вы забыли напечатать визуализированный контент :) ‹?php $nid = 739; // ПРИМЕЧАНИЕ :: Жестко запрограммировано, но должно быть переменным!! печать drupal_render(node_view(node_load($nid))) ?›   -  person Marius Ilie    schedule 20.12.2011
comment
Кстати, я пометил удаленный ответ Мариуса Илие для внимания модератора, попросив отменить удаление, так как похоже, что это был правильный ответ. (Я вижу удаленные ответы, но не могу восстановить их самостоятельно).   -  person Henrik Opel    schedule 20.12.2011


Ответы (3)


<?php
  $nid = 739; // NOTE :: Hard coded, but need to be variable!!
  print drupal_render(node_view(node_load($nid)));
?>

ПРИМЕЧАНИЕ. Опубликовано повторно, так как исходный ответ был удален.

person Marius Ilie    schedule 20.12.2011
comment
Добавил примечание о репосте, чтобы модераторы не путались ;) - person Henrik Opel; 20.12.2011
comment
Лучше использовать переменную, чтобы избежать строгого предупреждения - person Sadi; 19.06.2013
comment
Это приведет к строгому предупреждению: по ссылке следует передавать только переменные. - person MrUpsidown; 23.10.2015

Я не проверял, но должно работать

drupal_render(node_view(node_load($nid)))
person Marius Ilie    schedule 19.12.2011
comment
Я предполагаю, что вы сделали что-то не так, потому что я сделал то же самое ( drupal_render(node_view(node_load($nid))) ), чтобы отобразить несколько узлов на одной странице, и это сработало отлично. - person Marius Ilie; 19.12.2011
comment
И вы сделали это в своем page.tpl? - person Michiel; 19.12.2011
comment
Мне любопытно, как вы это сделали... Сценарий, который вы только что опубликовали, ничего не сделал в моем page.tpl.php. Я получаю эту ошибку: Strict warning: Only variables should be passed by reference in include() (line 9 of *** - person Michiel; 19.12.2011
comment
Может несоответствие версий? В Drupal 6 node_view() возвращает тематический узел (т. е. вызывает drupal_render() внутренне), поэтому он дает уже обработанную и «готовую к использованию» разметку. В Drupal 7 node_view() подготавливает только структурированный массив, необходимый drupal_render() для создания разметки. - person Henrik Opel; 20.12.2011
comment
+1 за снятие нежелательной отрицательной оценки (наверное не стоит лишний раз беспокоить модератора повторным удалением ;) - person Henrik Opel; 20.12.2011

drupal 7
https://api.drupal.org/api/drupal/includes!common.inc/function/render/7
https://api.drupal.org/api/drupal/modules!node!node.module/function/node_view/7

<?php //use variable to avoid strict warning
$nid = 739;
$nodeview = node_view(node_load($nid));
print drupal_render($nodeview);
?>
person Gregory.K    schedule 24.10.2014