Как программно визуализировать тизер узла, используя слой темы?

10

Как программно визуализировать тизер узла, используя слой темы?

Лестер Пибоди
источник

Ответы:

20

node_view() является стандартной функцией для рендеринга узлов, например

$node = node_load(1);
$view = node_view($node, 'teaser');
$rendered = drupal_render($view);

Существует nodeтема, определенная модулем узла (in node_theme()), но я никогда не видел, чтобы она использовалась.

Клайв
источник
1
Разве не node_theme () позволяет системе тем использовать файл .tpl.php для элемента, а также разрешать функции предварительной обработки?
mpdonadio
Да, я беспокоюсь об обходе слоя темы. Если бы я сделал это, другие модули, желающие подключиться, не смогли бы это сделать. По крайней мере, я думаю, что это правильно?
Лестер Пибоди
1
После анализа api.drupal.org/api/drupal/modules%21node%21node.module/function/… если вы просматриваете код реализации, где он говорит $build += array(, у него есть #themeатрибут, который, я предполагаю, говорит Drupal использовать система тем. Поправьте меня если я ошибаюсь. Я только сейчас начинаю «получать» Drupal API :)
Lester Peabody
@MPD Да, я не очень хорошо это объяснил, я просто имел в виду, что никогда не видел звонка, как theme('node', ...раньше. На самом деле это даже не сработает, потому что он определяет себя как наличие render elementвместо variables.
Клайв
@Lester пятна на, есть 2 способа вызова тематических функций, «нормальный» способ ( theme('theme_name', $args)и с помощи так называемыми render elementс. В hook_theme()документах объясняют это очень хорошо, это не 100% интуитивное , но как только вы знаете, это действительно полезно. С помощью node_view()воли никогда не перепускной тему слоя , так что вы должны быть штраф :)
Clive