web-dev-qa-db-fra.com

Drupal 8: Champs de noeud Rendeirng dans une autre région

mon type de contenu contient plusieurs champs; body, field_meta_tags, field_image, field_date, etc.

Dans node.html.twig, en utilisant le filtre sans, je peux remplacer le rendu standard de {{ content }} Par {{ content|without('field_image') }} et tout le contenu, moins l'image, s'affichera.

Comment puis-je exposer cette variable à une autre région et rendre l'image via un modèle différent, peut-être une région - hero-image.html.twig?

Merci!

6
Confused Drupaler

La façon la plus simple de le faire est de créer une vue avec un affichage de bloc et de définir l'ID de nœud comme filtre contextuel. La sortie de la vue doit être "Contenu" et un mode d'affichage - ce mode d'affichage peut être défini avec son propre modèle twig dans le thème. Vous pouvez ajouter un mode d'affichage à Admin > Structure > Display Modes > View Modes, puis accédez au type de contenu dont vous avez besoin et configurez l'affichage. En mode affichage, vous pouvez sélectionner et choisir les champs à afficher et les formats qu'ils utilisent.

Voici un bon article le détaillant , et vidéo YouTube parcourant les modes d'affichage et ce qu'ils sont.

Une fois la vue créée, vous pouvez placer le bloc dans l'administrateur du bloc et définir ses paramètres de visibilité pour qu'il ne s'affiche que sur le ou les types de contenu que vous avez configurés.

5
Kevin

J'ai trouvé du code ici: Quelle est la meilleure pratique pour afficher les champs d'un nœud dans différentes régions? Placé ceci dans mon [theme_name].theme fichier:

function THEME_preprocess_region(&$variables) {
  //TODO: change for you region name
  if ($variables['region'] == 'sidebar_right') {
    if ($node = \Drupal::routeMatch()->getParameter('node')) {
      //TODO: change for you node type
      if ($node->getType() == 'article') {
        //If you need a flag for this type
        $variables['is_article'] = TRUE;
        //Here is your field
        $variables['node_field'] = $node->get('field_descricao')->view();
      }
    }
  }
}

Avec

{% if node_field %} 
  {{ node_field }}
{% endif %}

Placé dans region--footer.html.twig (ou l'équivalent pour la région que vous avez déclarée ci-dessus). Évidemment, field_descricao est le champ que vous rendez et node_field est ce que vous souhaitez que votre nouvelle variable soit.

Cela renvoie un lien vers mon contenu (qui n'est plus une image mais une référence de nœud). Je cherche toujours un moyen de rendre le contenu complet, mais c'est plus proche que moi.

Toute information supplémentaire grandement appréciée!

1
Confused Drupaler

Consultez le module expérimental "Blocs d'outils de chaos", qui fait partie de Drupal 8.3+. Il n'y a aucune documentation pour le moment, mais c'est assez facile.

  • Activer le module de blocs d'outils de chaos
  • Créez un mode d'affichage comme expliqué ci-dessus. Réglez-le pour afficher uniquement le champ souhaité.
  • Dans Disposition des blocs -> Placer le bloc, choisissez Vue d'entité et configurez comme vous le souhaitez.
  • J'ai dû ajouter un petit CSS personnalisé pour empêcher le titre de s'afficher. Quelque chose comme .node - view-mode-display_mode_name {header {display: none; "}
0
joe casey