Render a Node or an Entity | Drupal 8

Render a Node or an Entity

Submitted by editor on Wed, 09/13/2017 - 09:59
Question

How to render nodes or entities programmatically on drupal 8, like node_view() on drupal 7 ?
How to show a node or an entity using a display mode programmatically ?

On drupal 8 every elements (almost) are an entity, as any entity you can render a node.

Display a node

$nid = 1;
$entity_type = 'node';
$view_mode = 'teaser';
$view_builder = \Drupal::entityTypeManager()->getViewBuilder($entity_type);
$storage = \Drupal::entityTypeManager()->getStorage($entity_type);
$node = $storage->load($nid);
$build = $view_builder->view($node, $view_mode);
$output = render($build);

//Note : you can also use if you don't want to use different entity types.
$node = Node::load($nid);

Display a view

$view = Views::getView('who_s_online');
if (is_object($view)) {
  $view->setDisplay('who_s_online_block');
  $view->preExecute();
  $view->execute();
  $output = $view->buildRenderable();
}

 

Render a node field

$view_builder = \Drupal::entityTypeManager()->getViewBuilder('node');
$storage = \Drupal::entityTypeManager()->getStorage('node');
$nid = 1;
$node = $storage->load($nid);
$view = $view_builder->viewField($node->get('body'), [
'type' => 'string', // string, entity_reference_label
'label' => 'hidden',
'settings' => ['link' => FALSE],
]);
$output = render($view);

Note : If you want to just get a value, you cal also do like this.
$value= Node::load($nid)->get('body')->value;

Add new comment