THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline


Bonjour,

Ce petit message pour remettre le bug des caractéristiques au goût du jour !

http://forum.thelia.fr/viewtopic.php?id=47
https://sourceforge.net/tracker/?func=b … tid=906132

Les carctérisiques ont toutes le même nom dans le gestionnaire et la même id ce que je peux vérifier dans la table "rubcaracteristique".

Synoptase, as-tu réussi à résoudre ce problème d'affichage ?

Un commentaire a été rajouté sur le bug tracker de Thelia  mais ce commentaire n'est pas clair du tout (ohhhh loin de là smile)

merci

Offline


j'ai le problème aussi. Qq1 a trouve une solution ? effectivement, le message sur le bug tracker est... obscur smile

Chag

Offline


J'ai passé + de 2 heures pour debugger ce problème

J'ai tout testé, mis en place des fonctions de déserialisation afin de voir d'où vient le prob (je suis remonté jusquà la classe Json.php)

en fait, j'ai bien ciblé le problème mais c'est à n'y rien comprendre sad

dans la boucle while() (fonction charger() de la page rubcaractéristique.php) si on met un echo à chaque itération (echo $caracteristiquedesc->titre)

cela s'affiche bien...

donc je teste le array_push($tab,$caracteristiquedesc);
ou tab[] = $caracteristiquedesc ;
....

et bien j'ai bien à retourner le prob dans tout les sens :  $caracteristiquedesc qui est une instance de la classe Caracteristiquedesc() est changé dans chaque item de $tab

comme s'il y avait un global ... c'est à n'y rien comprendre !!

Offline


Yop, j'avais commencé aussi mais pas eu le temps d'avancer autant que toi.
j'essaierai de jeter un oeil ce WE.

Chag

Offline


L'erreur se situe au niveau javascript je pense.

Offline


non parce que j'ai désactivé le js afin de voir ce qu'il y a en sortie php

le problème se trouve dans l'itération qui met les différents objets dans l'array AVANT le parsing en json

Offline


J'ai eu ce problème, et ça venait d'une fonction de conversion de caractères.. jettez voir un oeil aux autres sujets à propos des caractéristiques..

Offline


Je ne sais pas si ça peut aider mais bizarrement, ce bug ne se produit chez moi qu'en local sur mon serveur Wamp.

Offline


C'est une faute fréquente de conception orienté objet à mon avis.

Dans la boucle while() qui charge le tableau, les affectaction de tab[$i] de toutes les itérations sont faites avec la même instance de caracteristiquedesc, et donc, en fin de boucle, toutes les case du tableau pointent vers cette seule et unique instance. Les valeurs d'attributs de celle-ci changent lorsqu'on fait caracteristiquedesc->charger(), mais ça reste la même instance. Donc, en fin de boucle, toutes les cases du tableau permettent d'accéder aux même valeurs, celle de la dernière itération qui a "rechargé" l'instance en question.

Pour corriger cela, il faut affecter des instances différentes aux éléments du tableau (ou revoir complètement la façons dont on s'en sert en n'y enregistrant que les références et les titres par exemple). Une solution bête et méchante peut être simplement d'ajouter une instanciation de caracteristiquedesc avant de "recharger" :

$caracteristiquedesc = new Caracteristiquedesc();
$caracteristiquedesc->charger($row->id);
$caracteristiquedesc->titre = htmlentities($caracteristiquedesc->titre);
$tab[$i] = $caracteristiquedesc;
$i++;

[edit] Cette modif est bien à faire dans le fichier admin/rubcaracteristique.php, dans la seconde boucle de la fonction charger().

Last edited by 3.14R (30-05-2007 13:55:11)

Offline


Evidemment, même problème dans rubdeclinaison.php...

Offline


Merci pour la correction, ce bug trainais depuis un bail.

Offline


J'ai un léger soucis avec le code précédemment donné...
Je ne vois absolument pas où le placer...

Je l'ai mis en replacement de cette ligne qui se trouve être la numéro 59 (fichier non modifié)

$caracteristiquedesc = new Caracteristiquedesc();

Mais rien n'a changé...


Projet de maison d'édition littéraire spécialisé en Science-Fiction (activité lancée fin 2007)

"Deux choses sont infinies : l'Univers et la bêtise humaine. Mais en ce qui concerne l'Univers, je n'en ai pas encore acquis la certitude absolue."
~ Albert Einstein ~

Offline


Dans la fonction charger(), essaie de remplacer la 2ème boucle while :

while($row = mysql_fetch_object($resul)){                		

                		$res = $rubcaracteristique->charger($rubrique, $row->id);
                		if(($type=="h" && $res) || ($type=="d" && !$res)) continue;

                        $caracteristiquedesc->charger($row->id);
                        $caracteristiquedesc->titre = htmlentities($caracteristiquedesc->titre);
			$tab[$i] = new Caracteristiquedesc();
                        $tab[$i++] = $caracteristiquedesc;
                }

par celle-ci :

while($row = mysql_fetch_object($resul)){                		

                		$res = $rubcaracteristique->charger($rubrique, $row->id);
                		if(($type=="h" && $res) || ($type=="d" && !$res)) continue;

						$caracteristiquedesc = new Caracteristiquedesc();
                        $caracteristiquedesc->charger($row->id);
                        $caracteristiquedesc->titre = htmlentities($caracteristiquedesc->titre);
						$tab[$i] = $caracteristiquedesc;
						$i++;
						
                }

Ca devrait fonctionner wink

Offline


Trop classe, merci beaucoup, ça marche impeccable smile
Merci merci !


Projet de maison d'édition littéraire spécialisé en Science-Fiction (activité lancée fin 2007)

"Deux choses sont infinies : l'Univers et la bêtise humaine. Mais en ce qui concerne l'Univers, je n'en ai pas encore acquis la certitude absolue."
~ Albert Einstein ~

Offline


Thelia Version 1.2.2

Idem pour les déclinaisons dans admin/rubdeclinaison.php

Fonction charger()

Remplacer la boucle while  par celle-ci :

                while($row = mysql_fetch_object($resul)){	
                	$res = $rubdeclinaison->charger($rubrique, $row->id);
                	if(($type=="h" && $res) || ($type=="d" && !$res)) continue;
                        $declinaisondesc = new Declinaisondesc();
                        $declinaisondesc->charger($row->id);
                        $declinaisondesc->titre = htmlentities($declinaisondesc->titre);
                        $tab[$i] = $declinaisondesc;
                        $i++;
                }