Division des champs de contenu en différentes régions

11

Ma situation est la suivante: J'ai un séminaire de type de contenu, avec les champs A, B et C. J'ai les régions En-tête, Pied de page, Contenu et Barre latérale gauche. Il y a certains champs dans Séminaire que je veux afficher dans la région Contenu, mais aussi dans la région Gauche de la barre latérale.

Comment dois-je procéder? Toutes mes excuses si cela a déjà été répondu auparavant. Je suis développeur et n'hésite pas à me plonger dans les fonctions hook et préprocesseur. J'ai installé le module Views, mais je ne l'ai jamais utilisé (c'est mon premier site Drupal, si vous ne pouvez pas dire: P).

À votre santé.

EDIT: C'est pour Drupal 7 .

Lester Peabody
la source
Quelle version de Drupal?
keva
Désolé, c'est pour Drupal 7. J'ai ajouté cette information à ma question d'origine.
Lester Peabody
J'accepterai une réponse dès que j'aurai abordé le problème. J'essaie actuellement de configurer mes suggestions pour afficher le contenu de manière appropriée ...
Lester Peabody

Réponses:

11

Il n'y a pas de moyen simple d'ajouter le contenu d'un nœud à différentes régions de la page. Il existe plusieurs façons de résoudre ce problème.

Manière non codante: vues et blocs

Créer une vue

  • Type: Bloc
  • Filtre contextuel: Contenu: Nid
    • valeur par défaut: récupérer à partir de la page actuelle
  • Champs: celui que vous voulez
  • Filtre:
    • Type de contenu: séminaire

(plus les paramètres supplémentaires que vous souhaitez)

Ensuite, allez à la page de blocage de l'administrateur Déplacez le bloc de vue nouvellement créé, dans la région que vous souhaitez qu'il affiche. Il ne doit s'afficher que sur les pages des nœuds du séminaire.

Répéter pour toutes les régions

Coding Way avec theme_preprocess_region ():

le code ressemblerait à quelque chose comme ça

MYTHEME_preprocess_region(&$variables) {
  if (isset($node) && ($node->type == 'seminar' )) {
     //add new variable here.     
  }
}

C'est uniquement pour Drupal 7. Maintenant, c'est disponible dans votre region.tpl.php.

iStryker
la source
1
L'approche vues / blocs est en fait celle que je préfère, mais a suggéré Display Suite car certains la trouvent plus accessible.
jhedstrom
Les vues fonctionnent très bien pour cela, comme je le découvre. Les vues sont fantastiques en général. J'utilise également le module Bloc de menu pour diviser mes menus en fonction de l'endroit où je me trouve sur le site (laissez-moi diviser le menu principal afin qu'il soit toujours affiché et les sous-menus en fonction du menu dans lequel je tombe dans le menu principal). Module totalement génial, fortement recommandé.
Lester Peabody
C'est un peu fou que j'ai posé cette question pendant près d'un mois, j'ai accepté la réponse, mais j'en viens à l'application de cette réponse maintenant (même si j'ai utilisé Views une tonne depuis). Pourriez-vous clarifier un peu votre utilisation de Views pour Drupal 7? Il semble que Argument: nid n'existe pas dans Views 3 pour Drupal 7. Merci.
Lester Peabody
Je l'ai compris. La notion d'argument a été remplacée par des filtres contextuels sous Avancé.
Lester Peabody
D7, Fitler contextuel: Contenu: NID. Edit: voyez que vous l'avez trouvé, avant que je puisse répondre
iStryker
7

Le module Display Suite vous permet de le faire. Vous devrez activer le module Display Suite Extras pour exposer les régions de thème en tant que cibles pour les composants de noeud. Des informations sur la façon de procéder peuvent être trouvées dans les champs Ajouter à une page de blocage de la documentation Display Suite

jhedstrom
la source
5

J'ai eu le même problème. La solution est assez simple. Vous pouvez baser le fait que dans Drupal 7, nous pouvons définir notre propre view_mode, pas seulement FULL et TEASER (comme nous le savons des versions les plus anciennes). Donc, définissez un autre view_mode à utiliser dans votre région: par exemple LEFTHAND. Drupal affiche FULL view_mode dans la région de contenu. Donc, vous devez dire à Drupal d'afficher LEFTHAND dans la région de la barre latérale gauche.

  1. Dans template_preprocess_page ()

    if ($vars['node']) {
    $vars['page']['sidebar_left'][] = node_view($vars['node'], 'lefthand');
    }

  2. Dans node.tpl.php, ajoutez un nouvel affichage pour le mode d'affichage à gauche

    if ($view_mode == 'lefthand') {
    // render content fields here
    }

Patrik Lucan
la source
1
Cette réponse est super-ultra-intelligente, et ne nécessite aucun module externe, autre que de définir des modes d'affichage. Une alternative simple à Display Suite est les modes d'affichage d'entité: drupal.org/project/entity_view_mode
paul-m
J'ai vraiment aimé celui-ci. Enveloppez-le dans une fonction if pour qu'il n'apparaisse que sur certaines pages. J'avais l'habitude if (array_key_exists('block_14',$vars['page']['main_content'])){}de le faire apparaître uniquement sur les pages avec un bloc spécifique.
Dominic Woodman
3

Si la suite d'affichage semble trop pour vos besoins (c'est un excellent module, mais il peut être exagéré si vous avez juste besoin de déplacer quelques champs), il existe un module uniquement dans ce but -> Blocs CCK .

Je sais que cela s'appelle des blocs «CCK», mais cela fonctionne avec Drupal 7 (qui a apporté la fonctionnalité de CCK au cœur).

Chance G
la source
1

Un léger changement dans la réponse de @Patrik Lucan if ($vars['node'])m'a causé des problèmes sur des pages qui n'étaient pas des nœuds, par exemple une page d'accueil personnalisée avec un bloc ou une page de vues.

Changé en:

if (array_key_exists('node', $vars))

Ce qui semble avoir résolu le problème.

Dominic Woodman
la source
0

En attendant, il y a un module pour cela. Depuis la page du module:

Champ comme bloc permet d'afficher facilement un ou plusieurs champs du nœud actuel dans un bloc.

Ce module vise à être une alternative légère aux modules tels que Panels et Display Suite, ou à l'aide de vues pour définir un bloc qui ne récupère qu'un champ.

phils
la source