Utiliser un gabarit différent pour chaque vocabulaire

Il serait dommage de ne pas profiter de la puissance de la taxonomie lorsque vous devez organiser votre contenu pour le tout nouveau projet sur lequel vous venez de vous lancer. Seulement une question se pose, comment faire pour avoir une mise en page différente si vous êtes dans la catégorie des « Professionnels » ou dans celle des « Amateurs » ?
Avec le fonctionnement de base de Drupal vous ne pourrez pas faire ce que  vous voulez mais grâce à ce snippet vous allez pouvoir vous économiser quelques cheveux blancs.

C’est une surchage de phptemplate_preprocess_page() qu’il faut utiliser, vous y testez la catégorie parcourue par l’utilisateur et vous lui servez un template en conséquence.

function phptemplate_preprocess_page(&$vars) {
  $vars['tabs2'] = menu_secondary_local_tasks();

	/**
        * Début du snippet
        */

	// Drapeau pour la sélection d'un template particulier
	$override_single = false;

	if((arg(0) == 'taxonomy') AND (arg(1) == 'term'))
	{
		$override_single = true;
		// Récupérer les termes qui composent le vocabulaire à filtrer
		$term = taxonomy_get_term(arg(2));
		// Selon l'id de la catégorie choisir le template à utiliser
		switch($term->vid)
		{
			case 1: // Si le terme est "Professionnels"
				$filename = 'page-categorie-professionnels';
				break;
			case 2: // Si le terme est "Amateurs"
				$filename = 'page-categorie-amateurs';
				break;
			default: // Par défaut utiliser la mise en page par défaut des autres catégories
				$filename = 'page-taxonomy';
				break;
		}
	}

  // Si un template.tpl.php précis doit être appelé
  if($override_single)
		$vars['template_file'] = $filename;
   /**
   * Fin du snippet
   */

  // Hook into color.module
  if (module_exists('color')) {
    _color_page_alter($vars);
  }
}

Note : Ce snippet est à utiliser dans votre fichier template.php et est fonctionnel sous Drupal 6. L’exemple pris est celui pour Garland.

En espérant que ce snippet vous sera utile ! N’hésitez pas à demander des améliorations ou partager vos astuces du même genre.

2 thoughts on “Utiliser un gabarit différent pour chaque vocabulaire

  1. Hello Julien, pour ma part j’utilise une fonction qui n’est pas toute à fait la même.

    function _phptemplate_variables($hook, $vars = array()) {
    switch ($hook) {
    case ‘page’:
    $node_taxonomy_object = $vars[‘node’]->taxonomy;
    if ($node_taxonomy_object)
    {
    foreach($node_taxonomy_object as $term)
    {
    $suggestions = « page-taxonomy-term-« .$term->tid;
    }
    $vars[‘template_files’] = $suggestions;
    }
    break;
    }
    return $vars;
    }

    Bon c’est quasiment le même fonctionnement à la fin: on assigne un template pour chaques termes
    Pour la source, je ne retrouve plus le site 🙁

    Bonne continuation 🙂

Comments are closed.