web-dev-qa-db-fra.com

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

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

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 le module Views installé, 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.

11
Lester Peabody

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)

Accédez ensuite à la page de blocage de l'administrateur Déplacez le bloc de vue nouvellement créé dans la région que vous souhaitez afficher. 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 pour Drupal 7 seulement. Maintenant, c'est disponible dans votre region.tpl.php.

11
iStryker

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 la page Ajouter des champs à un bloc de la documentation Display Suite

7
jhedstrom

J'ai eu le même problème. La solution est assez simple. Vous pouvez baser le fait qu'en 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 pour 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
    }

5
Patrik Lucan

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 à cet effet -> 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).

3
Chance G

Légère modification de la réponse de @Patrik Lucan, if ($vars['node']) me posait des problèmes sur des pages qui n'étaient pas des nœuds, par exemple page d'accueil personnalisée avec bloc ou page de vues.

Changé en:

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

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

1
Dominic Woodman

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

Field as Block fournit un moyen simple d'afficher 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.

0
phils