Submitted by souhiji on
J'ai une question concernant toujours l'affichage d'image dans mon header.
J'ai différents type de contenus (article, page, verbiages,...), et différentes sections (visiter, connaître, vivre...). j'aimerais que dans chaque section l'image de mon header soit différente sachant que toutes ces sections utiliserons les mêmes type de contenu. Exemple:
--> dans ma home mon image de header est le Vatican (c'est un exemple lol)
--> dans ma section visiter j'aimerais que ça soit l'image des châteaux de la Loire
--> dans ma section connaître autre chose...et ainsi de suite.
Comment dois-je procéder? Merci
L'avantage de Drupal (et le
Permalien Soumis par blaise35 le 20 Octobre, 2009 - 12:29
L'avantage de Drupal (et le piège également) est que plusieurs solutions existent pour un seul est même problème. A toi de choisir la solution la plus adaptée à la situation et à tes connaissances.
En voici une parmis d'autre.
Dans le document de thème flow (http://drupal.org/files/theme_flow_6_0.pdf) tu verras la liste des functions de preprocess qui sont appellées à chaque fois que la fonction theme est appellée.
Ces fonctions de preprocess définissent les variables qui sont disponibles dans ton template. L'idée est donc de définir une fonction de preprocess pour le theme "page" et de définir une variable $image_header selon la situation.
exemple :
function montheme_preprocess_page(&$variables) {
$image_header = "images/vatican.jpg";
if(arg(0) == "section1") {
$image_header = "images/section1.jpg";
}
$variables["image_header"] = $image_header;
}
Dans ton page.tpl.php tu auras donc une variable $image_header qui contiendra l'adresse de ton image : vatican.jpg par défaut, section1.jpg si le 1ème argument de l'adresse (ex: section1/qui-sommes-nous) est section1.
A toi de définir les conditions...
Une autre solution serait d'utiliser des blocs avec des règles de visibilité.
Une méthode serait de faire
Permalien Soumis par DavP le 20 Octobre, 2009 - 13:33
Une méthode serait de faire un page.tpl.php pour chaque type de contenu en utilisant les suggestions. :-)
Tu as page.tpl.php pour les pages par défauts.
Tu crée page-front.tpl.php pour la page d'accueil (tu copies le contenu de page.tpl.php dedans)
Tu fais la même chose avec page-story.tpl.php pour les pages de types articles (story est le nom de variable du type de contenu article sauf si tu l'as modifié bien sûr)
Et par exemple, page-verbiages.tpl.php pour tes types de contenu verbiages
Il faut dans cet exemple que verbiages soit le nom de variable du type de contenu verbiages.
Tu peux vérifier ça dans la liste des types de contenu, c'est dans la colonne "type" juste à côté de "nom". :-)
Une fois que t'as un template pour chaque type de contenu, tu personnalises les attributs html dans chacun pour avoir ce que tu veux.
Dans la balise du header par exemple, tu mettras un id ou class = "headerhome" pour page-front.tpl.php; puis "headerstory" pour les articles etc.
PS: J'ai fait un tuto sur ce genre de chose, tu peux y jeter un oeil si tu veux. ;-)
Merci A tous pour vos
Permalien Soumis par souhiji le 20 Octobre, 2009 - 13:41
Merci A tous pour vos contributions, c'est vraiment très sympa de votre part. J'essaierais ces méthodes afin de m'y familiariser et je ne manquerais pas de faire une retour à ce propos. Encore une fois, merci
L'idée de DavP est trés
Permalien Soumis par blaise35 le 20 Octobre, 2009 - 14:14
L'idée de DavP est trés bonne. Tu auras un template différent pour chaque type de contenu.
Tu peux mixer les deux idées en ajouter des suggestion de template dans la fonction de preprocess en utilisant la variables "template_files" :
Ainsi, la fonction theme('page') utilisera le template page-section1.tpl.php à la place du page.tpl.php
A mixer avec tes conditions.
En effet ça semble un
Permalien Soumis par souhiji le 20 Octobre, 2009 - 14:19
En effet ça semble un excellent compromis merci. Cela dis, ça veux signifier qu'il faudra définir dans "function montheme_preprocess_page(&$variables)" toute les sections manuellement comme dans ton exemple Blaise. C'est bien ça?
Oui c'est cela. Ensuite tout
Permalien Soumis par blaise35 le 20 Octobre, 2009 - 14:27
Oui c'est cela.
Ensuite tout dépend de la manière dont sont conçus tes sections : par le menu ? par la taxonomie ?
Si c'est par le menu tu peux inspecter le trail actuel (menu_get_active_trail()) pour déterminer la section principale
Dans cet exemple, tu te basera sur le mlid du menu item de la section.
En effet j'avais choisi de
Permalien Soumis par souhiji le 20 Octobre, 2009 - 14:33
En effet j'avais choisi de le faire au travers des primary links (liens primaires). ça me parait plus simple à définir en effet lol. Merci je te fais un retour sous peu.
Voilà donc comment j'ai
Permalien Soumis par souhiji le 20 Octobre, 2009 - 14:40
Voilà donc comment j'ai défini mes sections dans mon template.php :
<?php
function france_preprocess_page(&$variables)
{
$trail = menu_get_active_trail();
if($trail[1]) {
$variables['template_files'][] = 'page-connaitre-'.$trail[1]['mlid'];
$variables['template_files'][] = 'page-visiter-'.$trail[1]['mlid'];
$variables['template_files'][] = 'page-vivre-'.$trail[1]['mlid'];
$variables['template_files'][] = 'page-etudier-'.$trail[1]['mlid'];
$variables['template_files'][] = 'page-travailler-'.$trail[1]['mlid'];
$variables['template_files'][] = 'page-entreprendre-'.$trail[1]['mlid'];
}
}
?>
Qu'en penses-tu?
Je pensais plus a quelque
Permalien Soumis par blaise35 le 20 Octobre, 2009 - 15:13
Je pensais plus a quelque chose du genre :
Tu as tout à fais raison.
Permalien Soumis par souhiji le 20 Octobre, 2009 - 15:23
Tu as tout à fais raison. En testant même de cette façon:
<?php
function montheme_preprocess_page(&$variables) {
$trail = menu_get_active_trail();
if($trail[1]) {
$variables['template_files'][] = 'page-section-'.$trail[1]['mlid'];
}
}
?>
et en faisant un dsm($trail) j'obtiens bien la distinction de mes sections (une fois le menu bien organisé). Mais ce n'est certe pas complet; Je ferais suivant les 'case'.
Mille Merci
Salut à tous, Pour
Permalien Soumis par souhiji le 21 Octobre, 2009 - 11:59
Salut à tous,
Pour résoudre mon soucis, j'ai suivis les pistes qui m'avaient été données et voilà donc ce que j'ai fais:
<?php
function montheme_preprocess_page(&$variables)
{
$trail = menu_get_active_trail();
$trails = $trail[1]['page_arguments'][0];
foreach($trails as $key =>$value)
{
if($key == 'nid'){
switch($value){
case '3':
$variables['template_files'][] = 'page-connaitre';
break;
case '11':
$variables['template_files'][] = 'page-visiter';
break;
case '7':
$variables['template_files'][] = 'page-vivre';
break;
case '8':
$variables['template_files'][] = 'page-etudier';
break;
case '9':
$variables['template_files'][] = 'page-travailler';
break;
case '10':
$variables['template_files'][] = 'page-entreprendre';
break;
}
}
}
}
?>
Comme vous le remarquerez je suis passé par les 'nid' et ça semble marcher pluto bien. Je tiens à remercier tous ceux qui ont eu l'amabilité de me guider sur ce sujet. Merci à tous
Hello juste une petite
Permalien Soumis par nyl auster le 21 Octobre, 2009 - 12:14
Hello
juste une petite question, je suis pas sur d'avoir suivi : tu crées 6 templates (= maintenance 6 fois plus embetante) juste pour pouvoir changer la bannière ? C'est pas un peu disproportionné comme solution, alors qu'un bloc avec des paramètres de visibilité peut faire la même chose -si j'ai bien suivi la demande initiale- ?
En utilisant les blocs, il
Permalien Soumis par DavP le 21 Octobre, 2009 - 12:22
En utilisant les blocs, il faudrait faire un bloc par bannière et ajouter à chaque bloc un script pour qu'il s'affiche en fonction du type de contenu (sauf pour la page d'accueil où il suffit juste de cocher la case et ajouter
<front>
.Je sais pas si c'est plus simple mais c'est une autre possibilité en effet.
D'où ma première solution
Permalien Soumis par blaise35 le 21 Octobre, 2009 - 12:30
D'où ma première solution qui ne consistait qu'a définir une variable de template dans le preprocess pour faire un simple print dans un seul et unique page.tpl.php.
Salut nyl auster, Tu n'as
Permalien Soumis par souhiji le 21 Octobre, 2009 - 12:35
Salut nyl auster,
Tu n'as pas totalement tors, mais je ne faisais que donner une suite, en pensant aux autres personnes qui auraient suivis ce sujet, ou qui seraient intéressé car pouvant rencontrer ce cas de figure à l'avenir. Cela dit, il est clair que ça serait un peu long également en terme de temps de développement.
D'accords aussi avec toi
Permalien Soumis par souhiji le 21 Octobre, 2009 - 12:38
D'accords aussi avec toi Blaise35. Comme je disais, je pensais aussi aux autres, et j'avais mis mon bout de code en 'exemple'. lol Merci à tous deux pour vos contributions
"En utilisant les blocs, il
Permalien Soumis par nyl auster le 21 Octobre, 2009 - 12:43
"En utilisant les blocs, il faudrait faire un bloc par bannière et ajouter à chaque bloc un script pour qu'il s'affiche en fonction du type de contenu"
ok j'avais mal compris la première question (ceci la première piste de blaise 35 me parait quand même plus simple :-) ).
Sinon j'utilise souvent ce module
http://drupal.org/project/context
il sert typiquement à créer des "sections" sur un site.
il permet par exemple d'afficher un bloc seulement quand on se trouve sur un type de contenu particulier, ou bien sur un élément de menu particulier etc...
attention toutefois, un bloc ne doit pas être placé dans la page classique des blocs pour pouvoir être placé par contexte.
Juste une piste en plus pour ceux qui cherchent à obtenir cela (je procède souvent avec context pour ma part pour obtenir ce résultat) :-)