Changer fond de la page d'accueil

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,

Voilà mon problème, je souhaiterais affecter un fond différent pour ma page d'accueil.
Or étant donné que la structure de la page est la même pour tout le site comment puis-je faire?

JE pensais récupérer le numéro du noeud affiché en page d'accueil puis faire un petit test php pour affecter une classe.

Le truc c'est que je n'arrive pas à récupérer le n° de l'article affiché (sans doutes par ce que on peut en avoir plusieurs sur une page d'accueil).

J'ai bien essayé la variable global $nid, mais sans succès. De même pour les solutions proposées dans les autres messages du forum.

Auriez-vous un idée?

Merci de votre aide.

Forum : 
Version de Drupal : 

Comme tu le fais remarquer, une page peut contenu plusieurs noeud, donc pas évident d'être sur de son coup...

Dans un cas similaire, ce que j'ai fait c'est créer dans template.php deux fonctions :

function mon_theme_preprocess_node (&$vars) {
  global $node_courant;
  // Le node courant n'est assigné QUE pour les nid suivant
  if (in_array($vars['node']->nid, array(666,668,670)) {
      $node_courant=$node_courant;
  }
}

function mon_theme_preprocess_page (&$vars) {
  global $node_courant;
  // si le node courant existe, on renseigne une classe pour le modèle node.tpl.php via la variable $body_classes
  if ($node_courant) {
     $vars['body_classes']="page-type-".$node_courant->type;
  }
}

puis dans node.tpl.php

  ...
  <body class='<?php print $body_classes?$body_classes:""?>' >
  ...

Merci Yoran,

Si j'ai bien compris tu as 2 fonctions : 1 pour récupérer le noeud et 1 pour les classes des pages.

Pour la fonction sur le noeud, tu crées un variable global $node_courant.
Ensuite tu vérifies que les noeuds affichés sont soit le 666, le 668 ou le 670.
Après tu affectes à ta variables global le noeud courant. (je ne comprends pas trop $node_courant=$node_courant; où prends-tu sa valeur?)

Pour la 2eme, tu testes si le noeud courant existe et si oui tu crées un variable body-classe-nid pour pouvoir créer autant de classe que de noeuds dans l'absolu.

Après je comprends qu'on affecte la variable comme classe mais pourquoi le ? et :"" dans

<?php
 
print $body_classes?$body_classes:""
?>

La première fonction est appelée pour préparer les variables du modèle node.tpl.php, le second pour page.tpl.php

Pour le node_courant=node_courant, c'est évidement une boulette :))) Il faut lire $node_courant=$vars['node'];

Pour le N et le :"", c'est pour prendre en compte le cas où ta variable n'est pas définies (pour tous les autres noeuds). Tu pourrais faire directement un print $body_classes, mais bon, je trouve cela plus élégant ainsi. A toi de voir.

Ne faut-il pas mettre le <?php print $body_classes?$body_classes:""?>"> dans le fichier page.tpl.php plutôt car il n'y a pas de body dans node.tpl.php ?

Dans mon body j'ai déjà un truc qui appelle $body_classes, ça me donne ça, n'est pas génant
<body class="<?php echo $body_classes; ?> <?php print $body_classes?$body_classes:"" ?>">

Je devrais obtenir logiquement quand j'affiche mon code source

<body class="front not-logged-in page-node no-sidebars front not-logged-in page-node no-sidebars simplemenu-enabled page-type-110" >

Zut deuxième boulette, oui c'est bien page.tpl.php, sinon pas grand intérêt.

Ensuite si tu veux conserver les classes que te fournis déjà phptemplate, laisse ton code tel-quel dans php.tpl.php et remplace par $vars['body_classes'].= $node_cournant->... (note le . avant le =).