Transférer une variable d'un template à l'autre

Quelle est la syntaxe à utiliser pour que par exemple un bloc tienne compte d’une variable définie dans function iew_preprocess_page(&$variables) ou function iew_preprocess_node(&$variables) ?

#

Il n’y a pas moyen de faire ainsi «migrer» les variables d’un contexte à l’autre. Si tu veux partager des variables, tu dois les faire apparaître dans chaque fonction preprocess. De plus les blocs sont générés avant la page, ainsi la fonction iew_preprocess_block sera exécuté avant iew_preprocess_page.

Après pour régler le problème, tout dépend de ce que tu cherches à partager.

Yoran - arNuméral

#

En fait, j’ai défini quelques variables liées au node affiché (par rapport à un vocabulaire). Ces variables sont ensuite utilisées pour contextualiser le design du site en fonction de la thématique. J’aimerai que le design d’un bloc soit aussi conditionné à ces variables (couleurs des boîtes). Dois-je redéfinir ces variables dans template.php en modifiant l’ordre des process avec iew_preprocess_block en premier ? Comment faire pour que le preprocess_block tienne compte des données générales du node ?

J’ai le même souci avec l’affichage des views où les variables ne sont pas prises en compte pour chaque élément de la liste (avec preprocess_node), mais seulement pour le node général reprenant cette liste…

http://www.iew-test.be

#

De manière simple, tu ne peux pas. Tu ne peux pas non plus modifier l’ordre des preprocess. Si tu as besoin de variables «globale», fabrique une fonction ajouter_mes_variables(&$variables) et appelle là dans les deux preprocess.

Pour views, je ne dirais rien, je n’utilise pas.

Yoran - arNuméral

#

Dans template.php, j’ai donc :

<?php
function iew_preprocess_block(&$variables)
{
 
$variables['couleur_clair'] = 'ffeabc';
}
?>

Dans block-views-breves-block_1.tpl.php, j’ai :

<?php
 
<div id="fond_bloc" style="background-color:#<¿php print $block->couleur_clair; ¿>">
  <
div class="titre_menu_droite">Br&Egrave;ves</div>
  <
div class="content"><¿php print $block->content; ¿></div>
  </
div>
?>

Et… nada, le fond du bloc reste blanc…

Et avec $node->couleur_clair et $page->couleur_clair, ça ne marche pas non plus.

#

Logique :) Tu confonds l’objet $node/$block et le contexte ($variables) du template.

Pour bien comprendre, ta fonction iew_preprocess_block() est la dernière appelée d’une série du même genre, dont une qui contient un :
$variables[‘block’]=$block ;

En d’autres termes, les $XXX dans ton template correspondent aux $variables[‘XXX’] dans ta fonction preprocess. Du coup essaye plutôt directement $couleur_clair, ça devrait fonctionner (vérifie aussi que tu passes bien dans ta fonction preprocess).

Yoran - arNuméral

#

De fait, maintenant ça fonctionne. Par contre, j’ai un petit souci que je ne m’explique pas : je liste une série de «else if» (un pour chaque thème qui appelle les variables) et curieusement, à partir d’un certain nombre de lignes, j’ai un message d’erreur. Et maintenant, malgré que j’aie supprimé le code posant problème, on dirait que toutes les variables sont inopérantes car tout reste blanc… :-(

Voici le contenu du template.php :

<?php
function iew_preprocess_block(&$variables)
{
 
$node = node_load(arg(1));
  include
'param_general.php';
  if (
count($node->taxonomy) )
  {
   
$taxonomy = array_merge($node->taxonomy);
   
$parents = taxonomy_get_parents($taxonomy[1]->tid);
    if(!empty(
$parents))
   {
   
$parents = array_merge($parents);
     
$variables['theme_perso'] = $parents[0]->tid;
    
$variables['nom_theme'] = $parents[0]->name;
     
$variables['nom_sous_theme'] = $taxonomy[1]->name;
   
$variables['nom_categorie'] = $taxonomy[0]->name;
     if (
$parents[0]->tid == 1) {include 'param_agriculture.php';}
     else if (
$parents[0]->tid == 2) {include 'param_biodiversite.php';}
   else if (
$parents[0]->tid == 9) {include 'param_climat.php';}
     else if (
$parents[0]->tid == 10) {include 'param_consommation.php';}
      else if (
$parents[0]->tid == 11) {include 'param_dechets.php';}
   else if (
$parents[0]->tid == 12) {include 'param_eau.php';}
   else if (
$parents[0]->tid == 13) {include 'param_energie.php';}
   else if (
$parents[0]->tid == 14) {include 'param_foret.php';}
     else if (
$parents[0]->tid == 15) {include 'param_mobilite.php';}
      else if (
$parents[0]->tid == 16) {include 'param_sante.php';}
     else if (
$parents[0]->tid == 17) {include 'param_societe.php';}
   else if (
$parents[0]->tid == 18) {include 'param_territoires.php';}
}
  else {
  
$variables['theme_perso'] = $taxonomy[0]->tid;
   
$variables['nom_theme'] = $parents[0]->name;
     
$variables['nom_sous_theme'] = $taxonomy[1]->name;
   
$variables['nom_categorie'] = $taxonomy[0]->name;
     if (
$taxonomy[0]->tid == 1) {include 'param_agriculture.php';}
    else if (
$taxonomy[0]->tid == 2) {include 'param_biodiversite.php';}
      else if (
$taxonomy[0]->tid == 9) {include 'param_climat.php';}
    else if (
$taxonomy[0]->tid == 10) {include 'param_consommation.php';}
     else if (
$taxonomy[0]->tid == 11) {include 'param_dechets.php';}
      else if (
$taxonomy[0]->tid == 12) {include 'param_eau.php';}
      else if (
$taxonomy[0]->tid == 13) {include 'param_energie.php';}
      else if (
$taxonomy[0]->tid == 14) {include 'param_foret.php';}
    else if (
$taxonomy[0]->tid == 15) {include 'param_mobilite.php';}
     else if (
$taxonomy[0]->tid == 16) {include 'param_sante.php';}
    else if (
$taxonomy[0]->tid == 17) {include 'param_societe.php';}
      else if (
$taxonomy[0]->tid == 18) {include 'param_territoires.php';}
      else if (
$taxonomy[0]->tid == 19) {include 'param_tourisme.php';}
   }
  }
}

function iew_preprocess_node(&$variables)
{
 
$node = node_load(arg(1));
  include
'param_general.php';
  if (
count($node->taxonomy) )
  {
   
$taxonomy = array_merge($node->taxonomy);
   
$parents = taxonomy_get_parents($taxonomy[1]->tid);
    if(!empty(
$parents))
    {
     
$parents = array_merge($parents);
     
$variables['theme_perso'] = $parents[0]->tid;
   
$variables['nom_theme'] = $parents[0]->name;
     
$variables['nom_sous_theme'] = $taxonomy[1]->name;
   
$variables['nom_categorie'] = $taxonomy[0]->name;
    
  
   if (
$parents[0]->tid == 1) {include 'param_agriculture.php'; include 'param_node_agriculture.php';}
     else if (
$parents[0]->tid == 2) {include 'param_biodiversite.php'; include 'param_node_biodiversite.php';}
      else if (
$parents[0]->tid == 9) {include 'param_climat.php'; include 'param_node_climat.php';}
      else if (
$parents[0]->tid == 10) {include 'param_consommation.php'; include 'param_node_consommation.php';}
     else if (
$parents[0]->tid == 11) {include 'param_dechets.php'; include 'param_node_dechets.php';}
   else if (
$parents[0]->tid == 12) {include 'param_eau.php'; include 'param_node_eau.php';}
   else if (
$parents[0]->tid == 13) {include 'param_energie.php'; include 'param_node_energie.php';}
   else if (
$parents[0]->tid == 14) {include 'param_foret.php'; include 'param_node_foret.php';}
   else if (
$parents[0]->tid == 15) {include 'param_mobilite.php'; include 'param_node_mobilite.php';}
     else if (
$parents[0]->tid == 16) {include 'param_sante.php'; include 'param_node_sante.php';}
   else if (
$parents[0]->tid == 17) {include 'param_societe.php'; include 'param_node_societe.php';}
   else if (
$parents[0]->tid == 18) {include 'param_territoires.php'; include 'param_node_territoires.php';}
   else if (
$parents[0]->tid == 19) {include 'param_tourisme.php'; include 'param_node_tourisme.php';}
    }
    else {
     
$variables['theme_perso'] = $taxonomy[0]->tid;
     
$variables['nom_theme'] = $parents[0]->name;
     
$variables['nom_sous_theme'] = $taxonomy[1]->name;
   
$variables['nom_categorie'] = $taxonomy[0]->name;
     if (
$taxonomy[0]->tid == 1) {include 'param_agriculture.php'; include 'param_node_agriculture.php';}
    else if (
$taxonomy[0]->tid == 2) {include 'param_biodiversite.php'; include 'param_node_biodiversite.php';}
     else if (
$taxonomy[0]->tid == 9) {include 'param_climat.php'; include 'param_node_climat.php';}
     else if (
$taxonomy[0]->tid == 10) {include 'param_consommation.php'; include 'param_node_consommation.php';}
    else if (
$taxonomy[0]->tid == 11) {include 'param_dechets.php'; include 'param_node_dechets.php';}
      else if (
$taxonomy[0]->tid == 12) {include 'param_eau.php'; include 'param_node_eau.php';}
      else if (
$taxonomy[0]->tid == 13) {include 'param_energie.php'; include 'param_node_energie.php';}
      else if (
$taxonomy[0]->tid == 14) {include 'param_foret.php'; include 'param_node_foret.php';}
      else if (
$taxonomy[0]->tid == 15) {include 'param_mobilite.php'; include 'param_node_mobilite.php';}
    else if (
$taxonomy[0]->tid == 16) {include 'param_sante.php'; include 'param_node_sante.php';}
      else if (
$taxonomy[0]->tid == 17) {include 'param_societe.php'; include 'param_node_societe.php';}
      else if (
$taxonomy[0]->tid == 18) {include 'param_territoires.php'; include 'param_node_territoires.php';}
      else if (
$taxonomy[0]->tid == 19) {include 'param_tourisme.php'; include 'param_node_tourisme.php';}
    }
  }
}

function iew_preprocess_page(&$variables)
{
 
$node = node_load(arg(1));
  include
'param_general.php';
  if (
count($node->taxonomy) )
  {
   
$taxonomy = array_merge($node->taxonomy);
   
$parents = taxonomy_get_parents($taxonomy[1]->tid);
    if(!empty(
$parents))
    {
     
$parents = array_merge($parents);
     
$variables['theme_perso'] = $parents[0]->tid;
     
$variables['nom_theme'] = $parents[0]->name;
     
$variables['nom_sous_theme'] = $taxonomy[1]->name;
   
$variables['nom_categorie'] = $taxonomy[0]->name;
     if (
$parents[0]->tid == 1) {include 'param_agriculture.php';}
     else if (
$parents[0]->tid == 2) {include 'param_biodiversite.php';}
   else if (
$parents[0]->tid == 9) {include 'param_climat.php';}
     else if (
$parents[0]->tid == 10) {include 'param_consommation.php';}
      else if (
$parents[0]->tid == 11) {include 'param_dechets.php';}
   else if (
$parents[0]->tid == 12) {include 'param_eau.php';}
   else if (
$parents[0]->tid == 13) {include 'param_energie.php';}
   else if (
$parents[0]->tid == 14) {include 'param_foret.php';}
     else if (
$parents[0]->tid == 15) {include 'param_mobilite.php';}
      else if (
$parents[0]->tid == 16) {include 'param_sante.php';}
     else if (
$parents[0]->tid == 17) {include 'param_societe.php';}
   else if (
$parents[0]->tid == 18) {include 'param_territoires.php';}
   else if (
$parents[0]->tid == 19) {include 'param_tourisme.php';}
    }
    else {
     
$variables['theme_perso'] = $taxonomy[0]->tid;
   if (
$taxonomy[0]->tid == 1) {include 'param_agriculture.php';}
    else if (
$taxonomy[0]->tid == 2) {include 'param_biodiversite.php';}
      else if (
$taxonomy[0]->tid == 9) {include 'param_climat.php';}
    else if (
$taxonomy[0]->tid == 10) {include 'param_consommation.php';}
     else if (
$taxonomy[0]->tid == 11) {include 'param_dechets.php';}
      else if (
$taxonomy[0]->tid == 12) {include 'param_eau.php';}
      else if (
$taxonomy[0]->tid == 13) {include 'param_energie.php';}
      else if (
$taxonomy[0]->tid == 14) {include 'param_foret.php';}
    else if (
$taxonomy[0]->tid == 15) {include 'param_mobilite.php';}
     else if (
$taxonomy[0]->tid == 16) {include 'param_sante.php';}
    else if (
$taxonomy[0]->tid == 17) {include 'param_societe.php';}
      else if (
$taxonomy[0]->tid == 18) {include 'param_territoires.php';}
      else if (
$taxonomy[0]->tid == 19) {include 'param_tourisme.php';}
    }
  }
}
?>

#

Ah la comme ça point d’idée, ça sent le debuggage php ;-)

Yoran - arNuméral

#

Aaaaargh ! J’approchais du but et voilà que plus rien ne va ! Plus aucune variable n’est transmise. C’est comme si template.php n’existait plus… J’ai vidé le cache, replacer une version light avec moins de fonctions, rien à faire…

Je n’ai aucune idée pour résoudre le problème. Dois-je contacter mon hébergeur ? Réinstaller Drupal ? Y a-t-il quelqu’un qui a déjà subit la même chose ? Ce CMS me rend dingue !

#

Hum… Mais tu travailles sur une plateforme locale non, avant de déployer sur ton hébergeur ?

Yoran - arNuméral

#

Non, je fais tout en direct sur un ftp test et quand c’est bon, il devient un ftp pas test…

#

Hébé, tu as du courage…

Ce que tu peux faire pour vérifier que tu passes bien dans la procédure de ton template.php (attention, truc de vieux barbare :-) c’est insérer un :

<?php
  var_dump
($variables);
  exit();
?>

Ainsi, un coup de F5 te prouvera que tu passes ou pas dedans.

Yoran - arNuméral

#

Merci pour le coup de main, mais j’ai péché par excès d’optimisme et de confiance. A force de chipoter avec Drupal, j’ai perdu trop de temps et ai gagné mon C4. Je jette le gant et voguerai vers quelque chose de plus accessible, mais autre que Spip dont j’ai fait le tour.

Syndiquer le contenu