web-dev-qa-db-fra.com

Utilisez Addscriptions pour plusieurs modules sur la même page

Je passe quelques params à JS dans mon module personnalisé à l'aide de AddscriptOptions fournies par Joomla:

$document->addScriptOptions("mod_mymodule", $params));

Cela fonctionne bien, tant qu'il n'y a qu'une instance du même module sur 1 page. Mais comment le faire fonctionner pour plusieurs modules sur la même page?

Je penserais à passer 1 objet comme si:

$document->addScriptOptions("mod_mymodule", (object)array($params => $module->id)));

Dans mon fichier JavaScript, je peux enregistrer l'objet:

console.log(Joomla.getOptions('mod_mymodule'));

// Output:
  {
  105: {...}
  }

Donc, le problème est que seul le premier module est transmis dans l'objet. J'ai besoin de chaque module à transmettre dans l'objet avant de passer à mon fichier JS. Je peux donc faire boucler l'objet pour créer le script souhaité pour chaque module.

Ajout : Je pense que je me rapproche, mais je ne travaille toujours pas:

$currentOptions = $document->getScriptOptions('mod_mymodule');
if ($currentOptions) :
    $currentOptions->{$module->id}->{$params};
else :
    $document->addScriptOptions("mod_mymodule", (object)array($module->id => $params));
endif ;

Je pense que la logique est là, ou pas? Erreur de syntaxe? Je ne suis pas sûr..

Des idées? Merci!

1
TVBZ

Ok .. trouvé la solution. Nous y voilà:

$configs = $document->getScriptOptions('mod_mymodule');

if ($configs) :
    $configs[$module->id] = $params;
else :
    $configs = array($module->id => $params);
endif ;

$document->addScriptOptions("mod_mymodule", $configs);

La logique n'était pas si difficile. Je suis toujours jolie à PHP et Joomla! développement.

J'espère que ce sera d'une certaine utilisation pour quelqu'un d'autre. Acclamations!

1
TVBZ