Template de page (page.tpl.php) spécifique pour un type de contenu

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonsoir,

je bosse actuellement avec Drupal 6 sur un site type portail d'information avec plusieurs types de contenus.

Pour faire bref, j'ai des articles classiques (nom machine => story) et des brèves (nom machine => breve)

Je sais qu'on peut templater un noeud en fonction de son type en créant le fichier node-breve.tpl.php

Mais cela me permet de "tuner" seulement l'affichage de mon contenu (le contenu de la variable $content qu'on appelle dans page.tpl.php)

Je voudrais aller plus loin et surcharger le template page.tpl.php en fonction de mon type de contenu pour pouvoir notamment appeler la variable content dans un endroit différent par rapport au template de base. Cela me donnerait un fichier page-breve.tpl.php

Est ce que ça marche ?
J'ai lu des trucs à propos de fonctions preprocess dans le fichier template.php, mais j'avoue que je n'ose pas trop toucher ce fichier ? Y-a-t-il moyen de faire sans ?

Forum : 
Version de Drupal : 

Bonsoir,

Il vous suffit d'ajouter à votre fichier template.php :

function phptemplate_preprocess_page(&$vars) {
  if (arg(0) == 'node') {
    $vars['template_files'][]  = 'page-' . $vars['node']->type;
  }
}

Ce qui vous donnera au final pour un node de type story la possibilité de créer un fichier page-story.tpl.php

Salut à toi, merci pour ta réponse. De mon côté j'ai écris cela dans mon template.php

if (arg(0) == 'node') {
$vars['theme_hook_suggestions'][] = 'page-' . $vars['node']->type;
}

Cela ne fonctionne pas même après avoir vidé mon cache.
Mon objectif étant d'appliquer un style de page.tpl.php pour mon type de contenu "galerie" de façon à ce que j'obtienne :
"page--galerie.tpl.php" pour le moment cela fonctionne en mettant l'ID de mon noeud "page--node--17.tpl.php mais cela n'est pas dynamique.

Merci pour votre aide précieuse.

Est-ce que tu utilises bien un double '_' (underscore):

if (arg(0) == ‘node’) {
$vars[‘theme_hook_suggestions’][] = ‘page__’ . $vars[‘node’]->type ;
}

par contre, ton template doit bien être de la forme page--galerie.tpl.php (avec un '-' moins et pas un underscore...)

Bonjour,
Quelqu'un peut-il m'aider ? car moi je suis contraint de bosser sur Dupal 5 et je ne trouve pas le moyen de résoudre le problème posé dans cette version.
Merci

Bon après moult recherches j'ai réussi à faire ce que je voulais, c'est à dire avoir un template de page pour mon type de contenu "galerie" pour Drupal 7. En fait il suffit d'écrire ceci dans le fichier template.php

function nomdevotretheme_preprocess_page(&$vars) {
if (isset($vars['node'])) {
if ($vars['node']->type != '') {
$vars['theme_hook_suggestions'][] = 'page__node__' . $vars['node']->type;
}
}
}

Ce qui vous permettra d'avoir un tpl personnalisé par type de contenu : "page--node--galerie.tpl.php", "page--node--typedecontenu.tpl.php". Comme le précise Vincent59 n'oubliez pas les double tirets pour Drupal 7 ;-)

Surtout pensez bien à vider le cache Drupal une fois votre template.php modifié.

Merci à kustolovic et vincent59 ainsi qu'à la communauté Drupal FR !!

/**
* Override or insert variables into the page template.
*/

function TONTHEME_preprocess_page(&$variables) {
if (isset($variables['node']->type)) {
// If the content type's machine name is "my_machine_name" the file
// name will be "page--my-machine-name.tpl.php".
$variables['theme_hook_suggestions'][] = 'page__' . $variables['node']->type;
}