[RESOLU] Utiliser une variable issue de la taxonomie pour rendre le CSS dynamique

Catégories:

Bonjour,

J’aimerais pouvoir utiliser une variable issue de la taxonomie pour rendre un background dynamique. Par exemple, si le mot-clé «Agriculture» est associé à l’article X, l’image du background serait :

div id=»header» style=»background-image:url(/themes/iew/head_$variable.jpg);»

Où $variable serait «Agriculture». Comment peut-on donc récupérer la variable de premier niveau (pas les sous-taxons) d’un vocabulaire précis ?

Si oui, peut-on utiliser un synonyme du taxon ? Le but serait d’éviter, par exemple, «Mobilité & transports» et d’utiliser plutôt «mobilite» l’un et l’autre désignant le même taxon associé à l’article.

Peut-on imaginer de coder une fonction php qui utiliserait cette variable pour définir toute une série de styles concernant par exemple, le background-color, le background-image, la couleur des titres, etc ? Rendre le CSS dynamique en fonction d’un mot-clé en résumé…

Existe-t-il d’autres possibilités ?

Le principe serait utilisé pour mon projet : http://www.iew-test.be

Merci d’avance

#

Bon, venant de Spip, je connais Drupal depuis seulement trois semaines et j’essaie d’apprivoiser la goutte.

J’ai une piste avec, dans le fichier page.tpl.php (http://drupal.org/node/83121) :

<?php

$terms = taxonomy_node_get_terms($node->nid);
rsort($terms);
if (
$terms[0]->tid == 29) {echo 'OK';}
else {echo
'pas OK';}
?>

Le but est que si le node contient le term 29, on affiche OK. Après, je poursuivrai en assignant de nouvelles variables. Mais le problème, c’est que quoique que j’affiche, c’est toujours pas OK qui s’affiche. Ce qui signifie que le tid n’est pas reconnu…

J’ai l’impression de faire n’importe quoi. Help !

#

Bonsoir,
Le problème est que page.tpl.php n’a pas accès au node donc «$node->nid» ne peut être utilisée sur page.tpl.php sauf si on importe le node en utilisant node_load(). Cependant si votre but est de changer le background de la page par rapport à un terme je peux vous donner un snippet. Je viens de le crée donc je ne garantit pas son bon fonctionnement mais le principe est là :

<?php
function theme_preprocess_page(&$variables)
{
  
$node = node_load($_GET['q']);
  
   if (
count ($node->taxonomy))
    {
     
$taxonomy = array_merge($node->taxonomy);
      
$variables['theme_perso'] = $taxonomy[0]->name;
   }
}
?>

Cette fonction retourne la valeur du premier champs taxonomy et le place dans une variables $theme_perso qui est maintenant accessible sur page.tpl.php

Ps : la fonction s’utilise dans le fichier template.php

#

Merci pour le tuyau. Je teste ça dès demain.

Petite question subsidiaire : comment récupérer le terme parent à partir d’un terme enfant ? Exemple : j’ai «Biopiraterie» qui lui-même dépend de «Biodiversité». J’ai un node avec le terme «Biopiraterie» et je veux donc récupérer le terme «Biodiversité»… Histoire de ne pas avoir trop de «if» dans mon code php une fois que l’on redéfini les nouvelles variables.

#

A la relecture de ma snippet j’ai vu une erreur tout d’abord il faut changer node_load($_GET[‘q’]) par node_load(arg(1)). Ensuite pour récupérer le terme parents vous pouvez utiliser la fonction taxonomy_get_parents(). Cela peut donner quelque chose comme cela

<?php
function theme_preprocess_page(&$variables)
{
  
$node = node_load(arg(1));
   
    if (
count ($node->taxonomy))
    {
     
$taxonomy = array_merge($node->taxonomy);   
      
$parents = taxonomy_get_parents($taxonomy[0]->tid); //on prend le terme parents
    
if(!empty($parents))
       {
         
//si taxonomy_get_parents() ne retourne pas une array() vide
          
$parents = array_merge($parents);
         
$variables['theme_perso'] = $parents[0]->name;
        }
      else {
        
//pas de terme parents alors on utilise le nom de la taxonomy
         
$variables['theme_perso'] = $taxonomy[0]->name;
       }
  }
}
?>

#

Le code affiche bien quelque chose : le terme choisi pour un vocabulaire. Mais rien par rapport aux autres vocabulaires. Comment, sans abuser, choisir un vocabulaire spécifique ?

EDITION

Apparemment, il semblerait que le terme parent ne soit pas reconnu et il indique donc directement le terme issu de la deuxième condition.

#

J’ai pas vraiment compris ce que vous voulez faire mais le code fournit fonctionne dans le cas où le terme est enfants d’un autre termes de ce genre :

Vocabulaire Pays :
  Europe
  Asie
  |--> Japon
  |--> Chine

Ou Japon est l’enfant d’Asie, et Asie son parent.
Par contre si vous voulez avoir le nom du vocabulaire c’est une autre fonction qui peut-être celle-ci :

<?php
function theme_preprocess_function(&$variables)
{
 
$node = node_load(arg(1));
 
  if (
count($node->taxonomy) )
  {
   
$taxonomy = array_merge($node->taxonomy);
  
$vocabulaire = taxonomy_vocabulary_load($taxonomy[0]->vid);
    
  
$variables['mon_terme'] = $vocabulaire->name;
  }
}
?>

#

C’est classé comme ça :

Thèmes :

  • Agriculture
    — Agriculture biologique
    — Agro-industrie
    — Elevages industriels
    — PAC
  • Biodiversité
    — etc.

Catégories :

  • Actualité
  • Opinions
  • Ils agissent
  • etc.

J’ai, par exemple, un node avec le terme «Agro-industrie» et le terme «Actualité»

Avec le code actuel, je n’arrive qu’à obtenir la variable qui donne «Actualité» alors que mon but est d’obtenir la variable parent du terme «Agro-industrie», donc «Agriculture». C’est le thème parent qui définira les variables liées aux styles. Mais ça, c’est une autre histoire ;-)

http://www.iew-test.be

EDITION

En fait, l’id du terme parent serait déjà suffisant.

#

Ah d’accord je vois ce que vous voulez dire, il suffit de marcher sur l’array qui est créer par array_merge() sur cette ligne

$taxonomy = array_merge($node->taxonomy);

Pour faire simple vous créer cette fonction :

function theme_preprocess_page(&$variables)
{
  $node = node_load(arg(1));
  $taxonomy = array_merge($node->taxonomy);
  $variables['mon_terme'] = $taxonomy;
}

Une fois sur le page.tpl.php vous faîtes un print_r($mon_therme) qui va vous donner l’array, il n’y aura plus qu’as prendre la key représentants «Thèmes» (je parierai que ca devrai être [1]).
Puis une fois la clé de l’array prise il ne vous reste plus qu’à changer la fonction pour :

function theme_preprocess_page(&$variables)
{
  $node = node_load(arg(1));
  if ( count($node->taxonomy) )
  {
    $taxonomy = array_merge($node->taxonomy);
    $parents = taxonomy_get_parents($taxonomy[LA CLE DE L'ARRAY TROUVER]->tid);
    if(!empty($parents))
    {
      $parents = array_merge($parents);
      $variables['theme_perso'] = $parents[0]->name;
    }
    else {
       $variables['theme_perso'] = $taxonomy[0]->name;
    }
  }
}

#

Impeccable !

Pour rendre l’histoire dynamique, j’ai ajouté une condition pour chaque thème qui renvoie vers un include contenant l’ensemble des paramètres de style.

Un grand merci et bonne soirée ;-)

Syndiquer le contenu