Différentes mises en page dans un même thême.

Quand on commence à s'amuser avec Drupal, on se pose rapidement des petites questions sur la manière dont on va s'y prendre pour se faire son petit thème préféré.

Jusque là, normalement, rien de trop dur. Mais si on commence a vouloir avoir des mises en pages différente en fonction de l'endroit où l'on se trouve, les choses peuvent se compliquer quelque peu.

Décomposition des urls

Dans un premier temps, le moteur de template de Drupal (PhpTemplate) décompose automatiquement les urls pour en extraire "le lieu" où l'on se trouve.
Ainsi, l'adresse http://example.com/?q=node/1/edit sera décomposé et le moteur saura que l'on se trouve dans un node, qu'il s'agit du numéro 1, et que l'on est en train de l'éditer

Grâce à ceci, il devient possible de créer des fichiers page.tpl.php un peu personnalisé.

Ainsi, un fichier
- page-node-edit.tpl.php sera le fichier utilisé pour toutes les pages d'édition
- page-node-1.tpl.php sera le fichier utilisé pour le node 1, et uniquement celui-ci
- page-node.tpl.php sera le fichier utilisé pour les nodes
- page.tpl.php sera le fichier utilisé si aucun autre fichier n'est présent

A rajouter, la possibilité d'avoir un fichier nommé page-front.tpl.php qui sera utilisé pour la première page du site.

Un template pour un noeud particulier

Si l'on souhaite utiliser un node.tpl.php spécifique pour un node bien particulier, il faut rajouter le code suivant le template.php

template.php

<?php
function _phptemplate_variables($hook, $vars = array()) {
  switch ($hook) {
    case 'node':
      $vars['template_files'] = array('node-'. $vars['nid']);
      break;
  }
  return $vars;
}
?>

On peut maintenant créer un fichier node-21.tpl.php qui sera appliqué uniquement pour le node 21.

Un thème en fonction du type de noeud

Une solution pour gérer facilement ses mises en page est également d'utiliser les types de contenus de Drupal. Avoir une mise en page différentes pour les "story", les "page" ou les billets de blog, ce n'est pas si compliqué que ça.

Commençons par créer un fichier nommé page-default.tpl.php, et copions le contenu de page.tpl.php dans ce nouveau fichier.

Maintenant, on va pouvoir attaquer en tranquillité le fichier page.tpl.php

page.tpl.php

<?php
/**
* Ce snippet charge differentes page?type.tpl.php
* automatiquement en fonction du type du node
*/

if ($is_front) {
include 'page->front.tpl.php';
return; }

if ($node->type == 'book') {
include 'page-book.tpl.php';
return; }

if ($node->type == 'image') {
include 'page-image.tpl.php';
return; }

if ($node->type == 'forum') {
include 'page-forum.tpl.php';
return; }

// Si aucun ne correspond, on fini sur la page par default
include 'page-default.tpl.php';
return;
?>

Comme on peut le voir, ce fichier sera appellé des qu'on arrive sur une page du site (presque tout le temps donc), et il tout simplement inclure les fichiers adequat en fonction du type de noeud que l'on va trouver sur la page.

Il ne reste donc plus qu'a créer les fichiers page-forum.tpl.php, page-book.tpl.php et autres si nécessaire.

Si on est en présence d'un type non listé, il va inclure le fichier par défaut, à savoir page-default.tpl.php

Philippe (non vérifié) Says:

Pour ce tutorial très bien expliqué

»

Poster un nouveau commentaire

Le contenu de ce champ est gardé secret et ne sera pas montré publiquement.
CAPTCHA
Suite a de nombreux spam (plusieurs centaines/heure), je suis dans l'obligation d'imposer un captcha, en attendant de trouver une parade