Jump to content

problème avec displayFlags


Recommended Posts

Bonjour,

 

Pour la création d'un module multilangue, j'ai utilisé la fonction intégrée "displayFlags"

 

Test réalisé avec 2 langages (en et fr qui est par défaut).

 

J'utilise le code suivant :

$defaultLanguage = intval(Configuration::get('PS_LANG_DEFAULT'));
foreach ($languages as $language)
$this->_html .= '<div id="titre_'.$language['id_lang'].'" style="display: '.($language['id_lang'] == $defaultLanguage ? 'block' : 'none').'; float: left;">
Titre : <input type="text" name="titreinput_'.$language['id_lang'].'" id="titreinput_'.$language['id_lang'].'" value="'.(($this->error AND isset($_POST['titre_'.$language['id_lang']])) ? $_POST['titre_'.$language['id_lang']] : '').'" />
</div>';
$this->_html .= $this->displayFlags($languages, $defaultLanguage, 'titre', 'titre', true);

Cela fonctionne correctement, le div s'affiche bien, je peux choisir la langue, sauf que lorsque je choisi la langue (autre que la langue par défaut), j'ai le champs multilangue affiché qui se répéte dans les différentes langues, alors que le flag affiché est bien celui du pays choisi.

 

Si je resélection le pays par défaut, après cela tout fonctionne correctement, il n'y a plus aucun problème.

 

Si je recharge la page, je choisi en premier "fr" (langue par défaut), rien ne change, je reste en français, et le fait de l'avoir sélectionné une fois, je ne rencontre pas le bug ci-dessus.

 

Pour me dépanner, j'ai effectuer une solution de contournement en ajoutant à la suite le code :

$this->_html .= '<script type="text/javascript">changeLanguage(\'titre\', \'titre\', '.$defaultLanguage.', \'\');</script>';

 

Mais cela n'est pas propre, j'aimerai comprendre ce qui ne va pas.

 

Merci d'avance si quelqu'un à une idée...

Link to comment
Share on other sites

Il faut sortir ton displayflags de la boucle foreach

$defaultLanguage = intval(Configuration::get('PS_LANG_DEFAULT'));
foreach ($languages as $language)
{$this->_html .= '<div id="titre_'.$language['id_lang'].'" style="display: '.($language['id_lang'] == $defaultLanguage ? 'block' : 'none').'; float: left;">
Titre : <input type="text" name="titreinput_'.$language['id_lang'].'" id="titreinput_'.$language['id_lang'].'" value="'.(($this->error AND isset($_POST['titre_'.$language['id_lang']])) ? $_POST['titre_'.$language['id_lang']] : '').'" />
</div>';}
$this->_html .= $this->displayFlags($languages, $defaultLanguage, 'titre', 'titre', true);

Link to comment
Share on other sites

Bonjour et merci de ta réponse.

 

Mais le displayflags n'est pas dans la boucle foreach.

 

N'ayant pas mis de crochet "{ }" au foreach, celui ne boucle que la première ligne.

 

Par sécurité j'ai mis les crochets comme dans ton code afin de tester, mais cela ne change rien.

 

Merci quand même, il est toujours sympa d'avoir une réponse...

Link to comment
Share on other sites

Non, cet ajout ne change rien.

 

Le div de choix du langage n'est bien affiché qu'une fois, c'est le input qui le devient plusieurs fois.

 

Exemple 1 :

Lorsque je charge la page, je suis bien en FR (image 1)

Je clique sur le flag, j'ai bien le choix du langage (image 2)

Je choisi EN, et là j'ai 2 fois mon input (image 3)

je clique à nouveau sur le flag et je choisi FR, je reviens comme l'image 1

Maintenant si je choisi EN, cela fonctionne correctement, j'ai bien que l'anglais (image 4)

 

Autre exemple pour ne pas avoir le bug :

 

Lorsque je charge la page, je suis bien en FR (image 1)

Je clique sur le flag, j'ai bien le choix du langage (image 2)

Je choisi FR, j'aio bien que le FR comme l'image 1.

Si maintenant je refais un choix pour EN, cette fois ça fonctionne, j'ai bien l'image 4

 

J'ai l'impression que cela fonctionne, mais à la condition de choisir en premier la langue par défaut, après plus de bug.

 

Comme je l'ai dit, pour contourner le problème , pour le moment simulé ce clic sur le flag de la langue par défaut en ajoutant en dessous mon foreach :

<script type="text/javascript">changeLanguage('titre', 'titre', '.$defaultLanguage.', '');</script>

Code correspondant au clic sur le flag par défaut.

 

Mais normalement je ne devrais pas avoir besoin, c'est pourquoi je cherche à comprendre, car en même temps je n'aime pas trop le code "bidouillé" pour que ça marche :(

post-99555-0-64748700-1349532985_thumb.png

post-99555-0-36976700-1349532991_thumb.png

post-99555-0-22143300-1349532998_thumb.png

post-99555-0-02008900-1349533004_thumb.png

Link to comment
Share on other sites

A tout hasard essaies ça:

$defaultLanguage = (int)(Configuration::get('PS_LANG_DEFAULT'));
$languages = Language::getLanguages(false);
$divLangName = 'titre¤';
$this->_html .= '<script type="text/javascript">id_language = Number('.$defaultLanguage.');</script>';
foreach ($languages as $language)
{
 $this->_html .= '
 <div id="titre_'.$language['id_lang'].'" style="display: '.($language['id_lang'] == $defaultLanguage ? 'block' : 'none').'; float: left;">
  Titre:  <input type="text" name="titreinput_'.$language['id_lang'].'" id="titreinput_'.$language['id_lang'].'" value="...." />';
 $this->_html .='</div>';
  }
$this->_html .= $this->displayFlags($languages, $defaultLanguage, $divLangName, 'titre', true);

 

J'utilise une structure de la sorte sur un module et ça fonctionne.

Edited by franckm1000 (see edit history)
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...