problème d'alias : ne prends pas en compte la surcharge de page.tpl.php

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.

Bonjour,

J'ai un problème avec la surcharge de template pour les pages.
Je veux créer deux template de pages dans mon thème.
Le template général page.tpl.php et un pour la page de contact page-contact.tpl.php.

Ce dernier n'est pas pris en compte. Drupal n'en tient tout simplement pas compte et il utilise le page.tpl.php par défaut. Alors que page-node-1.tpl.php est pris en compte et fonctionne correctement.

Apparemment, il s'agit d'un problème de prise en compte des alias.
Auriez-vous une idée d'où cela provient et comment régler le problème ?

Merci.
Zen

Forum : 
Version de Drupal : 

Je m'auto-commente avec la solution pour le prochain. Voici une solution :

<?php
function THEME_preprocess_page(&$vars) {
  if (isset(
$vars['node'])) {
     
$vars['template_files'][] = 'page-' . $vars['node']->path;
  }
}
?>

THEME étant le nom du thème.

Edit modo : un peu de mise en page, c'est plus lisible.

Salut Zen,

Je pense que cette solution est celle dont j'ai besoin aussi, seulement, comment utilise tu cette fonction ?
Dans quelle fichier doit on ajouter cette fonction ?

Est ce que le simple fait de déclarer cette fonction permet d'utiliser plusiquers page-nom_type.tpl.php différentes ?

Merci d'avance pour ta reponse :)

H

Salut,

Je l'ai utilisé dans un module que j'ai crée.

  • Il te suffit de créer un module.
    Si tu ne sais pas comment faire, je te conseille de trouver un tuto sur internet.
    Par exemple: http://www.journaldunet.com/developpeur/php/drupal-creer-un-module/

  • Copier/coller la fonction dans ton fichier first_module.module.
    Et n'oublie pas de mettre dans la signature de fonction le nom du thème à surcharger.
    Ce n'est pas bien compliqué.

Pour ta deuxième question, ça dépend ce que tu veux faire. Tu peux par exemple changer $node->path par $node->type, si tu veux surcharger par type de noeud (et non par URL). Tu peux toujours utiliser la fonction dpr($node); pour voir les alternatives qui s'offre à toi.

J'espère que cela t'auras aidé.
Bonne soirée et bon courage.

Salut Haza,

J'utilise le theme bluemarine. Je constate que le fichier template.php n'existe pas dans ce theme là ... ?
J'ai tenté de déplacer le fichier du theme garland dans le dossier bluemarine, mais cela ne fonctionne pas -> white screen lorsque je rafraichis la page :/
Y a t il une solution ?

Merci d'avance :)

H

Héhé, c'est ce que j'ai tenté entre temps et cela fonctionne bien :)

Merci !

H

UPDATE : Dans le cas concret suivant : j’ai une view de nodes de type news (dans les parametres j’indique que chaque titre est lié à son node). J’ai également un template page-news.tpl.php

Lorsque je clique dans la liste sur le titre de la news que je veux visualiser, j’affiche ma news formatée avec le template page.tpl.php :(

Comment devrais je procéder pour forcer l’utilisation du template page-news.tpl.php lorsque je clique sur le titre de la news ?

Merci d’avance :)

H

je m'auto commente.

J'ai finalement gardé mon template d'origine. Je l'ai simplement completé avec des tests en php sur les urls.

Si dans mon path, je trouve la chaine 'news' alors j'affiche une certaine banniere, et/ou certaines régions.

plus besoins de templates différents (dans mon cas du moins ^^).

:)

H