By: nohrad
Date: 2007-06-18
Time: 14:13
|
Bug TBS avec php 5.2.1Bonjour,
Depuis la mise à jour de php par mon hébergeur (OVH, phpinfo --> http://90plan.ovh.net/infos/test.beta), j'obtiens une erreur de type NOTICE avec TBS : Error 8 (E_NOTICE) Indirect modification of overloaded property Page::$_UserFctLst has no effect. Dans le fichier /xxx/class.template.php à la ligne 2333 J'ai trouvé quelque chose lié à php à propos de cette erreur, mais je ne sais pas encore ce qu'il faut modifier dans la clas TBS. http://www.nexen.net/actualites/trucs/heritage_des_tableaux_en_php_5.2.0.php Voilà, si quelqu'un sait comment "patcher" la class TBS je suis preneur ;-) |
||||
By: Skrol29
Date: 2007-06-18
Time: 15:24
|
Re: Bug TBS avec php 5.2.1Salut,
Est ce-que ton script surcharge la classe TBS ? Peux-tu fournir un petit script qui permettrait de reproduire le message ? |
||||
By: nohrad
Date: 2007-06-18
Time: 16:08
|
Re: Bug TBS avec php 5.2.1J'ai effectivement une classe nommée page qui étend la class TBS.
Voici un bout de cette class qui pose peut-être problème
|
||||
By: Skrol29
Date: 2007-06-20
Time: 17:26
|
Re: Bug TBS avec php 5.2.1Salut,
Ton extension n'y est probablement pour rien. Mais je n'arrive pas à reproduire le bug. Je suis pourtant sur la bonne version de PHP. Pourrais-tu donner plus d'indications sur ton code ? Le message d'erreur semble indiqué que tu fais appel à une fonction personnalisée sur "onload", "onformat" ou autre. |
||||
By: nohrad
Date: 2007-06-20
Time: 19:18
|
Re: Bug TBS avec php 5.2.1J'ai un peu avancé sur l'origine de l'erreur. Cela vient à mon avis de la fusion avec une fonction utilisateur qui permet de faire des traductions.
Je te donne tout d'abord la trace retourné par mon gestionnaire d'exception
Ensuite voilà comment interprété tout ça : La page index.php inclut le fichier append.php. Ce fichier permet notamment de lancer une méthode de la classe Page appelé CloseTemplate (la classe Page est ma classe qui étend la classe TBS). Voilà la méthode close Template
D'après la trace l'erreur vient de la fonction translate que j'utilise lors de la fusion du champs lang ($this->MergeField('lang','translate',true);) Voici le code de cette fonction :
Voilà pour l'instant ce que j'ai réussit à identifier, mais je ne voit toujours pas pourquoi j'ai une telle erreur qui se produit. |
||||
By: nohrad
Date: 2007-07-01
Time: 10:22
|
Re: Bug TBS avec php 5.2.1Voilà j'ai trouvé d'où venait le problème. C'était lié à la fonction magique __get que j'utilisais dans ma class page qui étendait la classe TBS.
En fait, si on fait un objet qui utilise ces fonctions, qu'une des propriétés indirecte de cet objet est un array, il ne faut pas utiliser directement cette table mais l'assigner a la fin... Plus d'infos sur l'erreur : http://blog.thepimp.net/index.php/tag/overloaded%20property. Et la modification du code TBS (ligne 2333)
|
||||
By: nohrad
Date: 2007-07-01
Time: 12:26
|
Re: Bug TBS avec php 5.2.1Il semblerait qu'il y ai encore des problèmes avec TBS et des erreurs "overloaded property".
Le fichier class.template.php est toujours le fichier de la classe TBS. Dans mon template j'ai un simple champs TBS du type [user.login]. En mon code de fusion est tout simplement le suivant
La subtilité de la chose c'est que $user est une instance de la classe user dont voici une partie du code
Encore une fois j'utilise les méthodes magiques __get et __isset. Voilà, un exemple de ce que permet de faire la méthode __get
Ainsi dans mon template TBS je peux avoir les champs suivants : [user.id] / [user.id_user] / [user.name] / [user.Name]... Mais comme tu voix cela bloque au niveau de la classe avec ces méthodes magiques... Est-ce que tu as des idées ??? PS : la solution que j'ai trouvé pour l'instant c'est de faire un $TBS->MergeField('user',$user->UserInfo) et de reformater tous les champs de mon templates (id devient id_user ; Name devient name...). Mais cela n'est pas l'idéla, car cela devait permettre d'avoir une liberté de notation pour l'utilisateur final qui peut modifier les templates... |