В Drupal 7 я часто использую node_view()
для рендеринга узлов (используя режимы просмотра) в блоках или страницах следующее:
$nids = array(123,456,789);
$nodes = node_load_multiple($nids);
foreach ($nodes as $node) {
$node_view = node_view($node, 'teaser');
$output .= drupal_render($node_view);
}
$build['nodes']['#markup'] = $output;
return $build;
node_view()
/ entity_view()
устарел и заменен построителем представлений, как объяснено в записи об изменениях. Объекты теперь отображаются построителем представлений . Информация недостаточно подробная, чтобы я мог понять, как добиться того же результата.
Как вы можете рендерить узлы в Drupal 8, чтобы выходные данные могли использоваться в массиве рендеринга блока или страницы?
$node = Node::load($nid)
?render()
в последней строке?getViewBuilder($entity_type)->view
возвращает массив визуализации, который будет передан в представление веток.renderRoot
илиrenderPlain
, или черезdrupal_render_root($build);
Самая важная часть - перестать рендерить себя. Вы можете возвращать массивы рендеринга практически везде, и вы должны это сделать. Объединение подобных строк вместе больше не работает.
Все, что вам нужно, это:
источник
entity_view()
будет удален до Drupal 9.0.0. Вы можете использовать его в Drupal 8, но если вы хотите с тех пор писать код, который (для этой части) не изменится для Drupal 9, вы можете использовать следующий код вместоentity_view()
.По сути, это код, используемый
entity_view()
после того, как я заменил ссылку на другой устаревший метод, который использовала функция. На самом деле в документацииDrupal::entityManager()
сказано:Если
entity_view()
он будет изменен до того, как будет устарел, вы все равно можете посетить его страницу документации, чтобы увидеть фактический (и обновленный) код, который использует функция.источник
Drupal::entityTypeManager()
сейчас, чтоDrupal::entityManager()
устарело?