web-dev-qa-db-fra.com

Comment obtenir $ node-> body $ node-> teaser?

Je migre un grand module personnalisé et un thème depuis Drupal 6 et je ne peux pas trouver comment convertir les références en $node->body et $node->teaser car ce ne sont plus des champs dans l'objet nœud, non?

3
Nic

Utilisez ce code dans un hook de prétraitement:

$node = \Drupal::entityManager()->getStorage('node')->load($nid);
$view_builder = \Drupal::entityManager()->getViewBuilder('node');
$variables['node_full'] = $view_builder->view($node, 'full');
$variables['node_teaser'] = $view_builder->view($node, 'teaser');
$variables['body_full'] = $node->body->view('full');
$variables['body_teaser'] = $node->body->view('teaser');

Et en brindille

{{ node_full }}
{{ node_teaser }}
{{ body_full }}
{{ body_teaser }}

Utilisez le nœud rendu et configurez les modes d'affichage complet, teaser ou un mode d'affichage personnalisé. Le champ rendu unique ne fonctionne pas bien avec un autre code.

9
4k4

J'ai fait des progrès. Il paraît que

{{ node.body.value|raw }}  ** unsafe! **

fonctionne bien, mais je suppose qu'il saute les filtres d'entrée, et

{{ node.body.value }}

affiche le balisage. Je ne sais pas trop comment obtenir le corps avec des filtres d'entrée, mais pas échapper au balisage.

Avis de sécurité:

N'utilisez pas le filtre brut si vous ne pouvez pas garantir que la valeur est à l'abri des entrées utilisateur indésirables!

0
Nic

Vous pouvez obtenir le corps dans twig via:

{{ content }}

Après avoir ajouté ceci à votre fichier THEME.theme:

function THEME_preprocess_node(&$variables) {
  $node = &$variables['node'];
  $node_array = $node->toArray();
  $variables['node_teaser'] = $node_array['body'][0]['summary'];
}

Vous pouvez le récupérer dans templates/node.html.twig avec:

{{ node_teaser }}
0
Mike Gifford