Le 18 novembre 2011 11:42, Dsls <dsls(a)morefnu.org> a écrit :
> J'ai un behaviour (dans class.dc.blog.php) qui ressemble à
ceci :
>
>
$this->core->callBehavior('coreBlogBeforeGetPosts',$params);
>
> Comment puis-je faire pour que la fonction appelée puisse modifier un
> des éléments du tableau $params ?
Seul moyen propre en php : $params doit être un ArrayObject, pas un array.
Concernant ce behavior en particulier, je suis un peu embêté sur son
comportement actuel : on ne peut pas le contrôler simplement. Par
exemple, on ne sais pas facilement qui est l'appelant, et surtout on
ne peut pas différencier facilement si on est coté public ou coté
admin. du coup ça peut assez vite poser des problèmes au niveau de
l'admin.
Dans ton besoin exprimé dans le ticket demandant cet ajout, quels sont
les appelants que tu voudrais voir ? Je pense qu'il serait préférable
de remplacer ce behavior par des behaviors dans les appelants, voire
modifier le code de tpl:Entries, où on est sûr que les behaviors sont
coté public.
J'ai un plugin sur le feu qui permet de préciser l'ordre d'affichage
des billets en fonction de la catégorie (et uniquement dans le
contexte catégorie). Pour faire ça j'ai codé un behaviour qui remplit
(ou modifie) le $params['order'] en fonction des réglages effectués
côté admin du plugin. Sauf qu'en l'état l'élément du tableau modifié
(avec succès par ma fonction, j'ai tracé ça) n'est pas rémanent une
fois de retour après l'appel. D'où ma question.
En gros je trouvais qu'un behaviour dispo à ce niveau permettait de
jouer avec les $params juste avant que ce ne soit transformé en
requête SQL.