Catégories:
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) ?
- Vous devez vous identifier ou créer un compte pour écrire des commentaires

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
Yoran
1017
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
Christophe Danaux
40
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
Yoran
1017
Dans template.php, j’ai donc :
<?phpfunction 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È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.
Christophe Danaux
40
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
Yoran
1017
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';}
}
}
}
?>
Christophe Danaux
40
Ah la comme ça point d’idée, ça sent le debuggage php ;-)
Yoran - arNuméral
Yoran
1017
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 !
Christophe Danaux
40
Hum… Mais tu travailles sur une plateforme locale non, avant de déployer sur ton hébergeur ?
Yoran - arNuméral
Yoran
1017
Non, je fais tout en direct sur un ftp test et quand c’est bon, il devient un ftp pas test…
Christophe Danaux
40
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 :
<?phpvar_dump($variables);
exit();
?>
Ainsi, un coup de F5 te prouvera que tu passes ou pas dedans.
Yoran - arNuméral
Yoran
1017
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.
Christophe Danaux
40