[resolu] taxonomy image & taxonomy menu & i18n (language switcher)

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,
Je me permet d'éditer le titre pour qu'il corresponde mieux et le message pour qu'il soit plus compréhensible.

J'ai eu deux problèmes:
-Créer un bloc avec taxonomy image
-Avoir le language switcher i18n qui fonctionne avec taxonomy menu

En réalité c'est parce que le "switcher" ne prend pas la traduction du terme mais ajoute simplement le suffixe de la langue au début de l'url.

J'ai fixer ça via une fonction dans le thème -> http://drupalfr.org/node/1838#comment-7119

Donc pour résumé:
-j'ai le module i18n qui me permet de traduire les node et le terme
-j'ai le module Taxonomy_image qui me permet d'avoir une image associè à une taxonomie
-j'ai taxonomy menu qui crée un menu depuis la taxonomie
-et le petit "patch" qui vas aider le "switcher de langue" à bien prendre la traduction de la taxonomie comme url.

Je posterai l'url du site pour que vous voyer ce que ça donne dès que c'est finis

Version de Drupal : 

Alors j'ai trouvé une solution assez simple, c'est de récupérer les arguments dans l'url ce qui donne:

<?php
if (arg(0) == 'taxonomy_menu' && is_numeric(arg(1)) && is_numeric(arg(2))) {
    
$term_id arg(2);
     print
taxonomy_image_display($term_id);
}
?>

Ca fonctionne nickel :)

EDIT: non ça fonctionne pas nickel...
Le problème vient du switch de langue avec i18n celui-ci gardant évidement l'url intact et change uniquement le prefix de langue. Alors ça me garde la même image et je suis obligé de cliquer sur le lien du menu (le menu taxonomie s'adapte, la taxonomie étant traduite) pour que j'ai la bonne image.
aaaaaaaaahrrgggggg et moi qui croyait être sortie de ce problème...

Personne a une solution magique?

Bon je vois une solution... faire une requête dans la table term_data en cherchant tid de la langue active correspondant au tid de l'url. Le champs language indiquant la langue de term et grâce au champs trid je peux savoir facilement "qui vas avec qui".

Bon ça fait une requête un peu "inutile" je trouve.

Bon bon bon pour l'instant... pause... lol

Bon le patch n'est pas encore totalement fonctionnel... J'ai donc créer en m'inspirant du patch une fonction dans mon thème. Je sais c'est pas forcément l'endroit mais au moins comme ça je ne touche pas au module i18n (mise à jour facilité).
Donc sa permet au "langage switcher" de passer sur la traduction du terme. Je pense que ça peut être très utiles pour les gens qui utilise taxonomy_menu + i18n. Les feedback sont comme toujours bienvenu :).

<?php
/<strong>
 *
Personlisation des icônes du language switcher
 
* Gestion du language switcher avec le module taxonomy_menu
 
*
 <
em>/
function
votreTheme_i18n_link($text, $target, $lang, $separator='&nbsp;'){
 
$output = '<span class="i18n-link">';
 
$attributes = ($lang == i18n_get_lang()) ? array('class' => 'active') : NULL;

  if(
preg_match("/(taxonomy_menu\/)(.</em>)$/",$target,$matches)) { //url de taxonomy_menu ?
   
$tids = explode ("/", $matches[2]);
   
$vid = array_shift($tids);  
    if (
$str_tids = votreTheme_translation_taxonomy_menu_tids($tids, $lang)) {
     
$target = $lang . "/taxonomy_menu/$vid/$str_tids";
      }
  }
 
$output .= l(theme('i18n_language_icon', $lang), $target, $attributes, NULL, NULL, FALSE, TRUE);
 
$output .= '</span>';
  return
$output;
}

/</
strong>
<
em>Returns an url for the translated taxonomy_menu listing, if exists
</em>
$tids: array of term ids at the tail end of a taxonomy_menu URL
*/
function
votreTheme_translation_taxonomy_menu_tids($tids, $lang) {

$translated_tids = array();
$separator = "/";
foreach (
$tids as $tid)
{
 
  if (
$translated_tid = translation_term_tid($tid, $lang)) {
     
$translated_tids[] = $translated_tid;
    }
}


if (!empty(
$translated_tids[0]))
{
  return
implode($separator, $translated_tids);
}
else
{
  return
implode($separator, $tids);
}
}
?>