Ticket #913 (closed defect: fixed)
Plugin widgets : notices en php 5.3
Reported by: | bruno | Owned by: | Tomtom33 |
---|---|---|---|
Priority: | normal | Milestone: | 2.2 |
Component: | module:plugins | Version: | dev |
Severity: | normal | Keywords: | |
Cc: |
Description
Lors d'une installation toute fraîche d'un dc 2.2 alpha, si on ne touche pas au widgets, et si on va sur l'accueil du blog, il réside 2 notices dans les sidebars : {{ Notice: Deprecated function called. (dcSettings::old_style_get was called from ...\dc2\plugins\widgets\_public.php [38]) in ...\dc2\inc\core\class.dc.settings.php on line 143
Notice: Trying to get property of non-object in ...\dc2\plugins\widgets\_public.php on line 38 }}
Et effectivment, la ligne 38 du _public.php du plugin :
$widgets = $GLOBALS['core']->blog->settings->widgets->{$wtype};
pointe sur un namespace inexistant. Autant le premier notice sera levé lorsque le message deprecated sera enlevé, autant le second notice subsistera...
Tout rentre dans l'ordre dès lors que les settings existent, ie. lorsqu'on met à jour les bandeaux une fois.
Change History
comment:2 Changed 14 years ago by bruno
- Status changed from closed to reopened
- Resolution fixed deleted
comment:3 Changed 14 years ago by xave
Après avoir pas mal cogité (et causé avec Zeiram, qui connaît quand même bien le sujet) je pense que ce hasNamespace n'est pas la bonne façon de faire : ça ne servirait à peu près que là et serait obsolète une fois qu'on a dégagé la compatibilité avec l'ancienne version.
À bien y réfléchir, le plus propre, ça serait sans doute de créer les settings des widgets à l'installation, puisqu'actuellement, c'est le seul endroit où on considère avoir les settings par défaut lorsqu'ils n'existent pas, partout ailleurs, on initialise à l'install.
Pour faire un contournement propre à ce notice, il faudrait pouvoir savoir si un namespace a été défini ou pas.
Je propose d'ajouter la méthode "hasNamespace" à inc/core/class.dc.settings.php :
La function widgetsHandler du _public.php du plugin widget contiendrait alors le code suivant :