Page 1 of 1

CTLModuleMaker accès variable niveau 1

Posted: Thu Sep 03, 2009 2:14 pm
by nico63
Bonjour,
Je ré ouvre un sujet : http://forum.cmsmadesimple.org/index.php/topic,35559.msg167927.html#msg167927 que j'avais marqué comme résolu, j'avais utilisé {$parentobj->variable} mais la résolution n'était que partielle et me suffisait à l'époque. Mon client me faisant faire quelques changements, en fait il faut absolument que partant du niveau3 quand je regarde une liste, je puisse accéder à une variable de niveau 1 avec la méthode proposée : {MODULENAME_get_levelitem} et décrite dans la FAQ de CTLModuleMaker :
{mymodule_get_levelitem what="category" alias="myfirstcategory" assign="catobject"}

And you can then use the assigned object to display information:

{$catobject->name}
J'ai beau lire et essayer, je n'arrive pas à un résultat.

Y aurait-il un exemple d'application ?

Dans mon cas le module s'appelle sejours4, la première catégorie : categorie et la variable à retrouver : nomcat
Donc je fais : {sejours4_get_levelitem what="categorie" alias="nomcat" assign="catobject"} puis {$catobject->name} mais aucun résultat ne s'affiche.
Je dois faire une erreur quelque part...
Merci d'avance pour l'aide,
Nicolas.

Re: CTLModuleMaker accès variable niveau 1

Posted: Thu Sep 03, 2009 6:13 pm
by plger
J'ai testé à nouveau pour être certain qu'un bug n'était pas apparu dans les dernières version, mais tout devrait fonctionner comme il se doit. À moins que tu n'essaie de d'appeler la fonction d'en dehors du module? (comme il est indiqué dans le faq, la fonction n'est disponible qu'à partir des templates du module).
nico63 wrote: Dans mon cas le module s'appelle sejours4, la première catégorie : categorie et la variable à retrouver : nomcat
Donc je fais : {sejours4_get_levelitem what="categorie" alias="nomcat" assign="catobject"} puis {$catobject->name}
La balise que tu indiques ne correspond pas trop à l'introduction que tu en fais. Elle signifierais que ton niveau s'appelle "categorie" (les choix de niveaux sont indiqués dans l'aide), que dans ce niveau il y a une categorie dont l'alias (et non le nom... en éditant la catégorie, tu devrais voir l'alias) est "nomcat", et que tu emmagasine l'objet dans la variable $catobjet. Ensuite, tu essaie de récupérer la variable (ou champs ou attribut) "name" de l'objet.
Je crois qu'il faudrait vérifier les valeurs de tes paramètres...

Re: CTLModuleMaker accès variable niveau 1

Posted: Fri Sep 04, 2009 2:06 am
by nico63
Merci pour ta réponse, Pierre-Luc,

Ma problématique pour essayer d'être un peu plus clair :
voici mes niveaux : categorie  -> souscategorie -> sejours  Je dois à la fois récupérer des éléments de sejours et un élément de categorie sachant que je parcours une liste dans un des template du module.
Pour sejours c'est bon, pour categorie il y a problème.

J'ai essayé ainsi pour récuperer un élément de categorie et effectivement je faisais une petite erreur, mais comme cela :
{sejours4_get_levelitem what="categorie" alias="GroupesJeunesEte" assign="catobject"}
{$catobject->nomcat}

cela fonctionne à partir du moment ou je pars du principe que je connais l'alias du premier niveau, exemple ici : GroupesJeunesEte, or j'en ai plusieurs --> voici la table Mysql correspondant à ceci :

INSERT INTO `cms_module_sejours4_categorie` (`nomcat`, `id`, `name`, `alias`, `item_order`, `active`, `isdefault`, `date_modified`) VALUES
('Groupes de Jeunes', 1, 'GroupesJeunesEte', 'GroupesJeunesEte', 1, 1, 0, '2009-07-19 14:43:09'),
('Groupes d\\''Adultes', 2, 'GroupesAdultesEte', 'GroupesAdultesEte', 2, 1, 0, '2009-07-19 14:43:45'),
('Lycées / Collèges', 3, 'LyceesCollegesEte', 'LyceesCollegesEte', 3, 1, 0, '2009-07-19 14:44:23'),
('Colos', 4, 'ColosEte', 'ColosEte', 4, 1, 0, '2009-07-19 14:45:13'),
('Famille', 5, 'FamillesEte', 'FamillesEte', 5, 1, 0, '2009-07-19 14:45:34'),
('Seniors', 6, 'SeniorsEte', 'SeniorsEte', 6, 1, 0, '2009-07-19 14:46:10');

Dans mon cas je ne connais pas cet alias au départ, il faut que je remonte l'arbre un peu à la manière de {$item->parent_object->parent_object->nomcat} ce qui n'est pas possible comme tu me l'avais indiqué puisque je parcours une liste.

Donc puis-mettre une variable dans alias=" " à la place d'une expression en "dur" ? ou autre sachant que je dois remonter de deux niveaux. Sinon il faut que je trouve une autre méthode...
Je réfléchis, j'ai peux-être fais une erreur de logique quelque part, mais si tu as une piste ou la solution alors c'est super!
Nicolas.

Re: CTLModuleMaker accès variable niveau 1

Posted: Fri Sep 04, 2009 6:50 am
by plger
Oui, tu pourrais mettre une variable dans le paramètre alias. Par exemple, tu pourrais faire ceci :

Code: Select all

{sejours4_get_levelitem what="souscategorie" alias=$item->parent_alias assign="subcatobject"}
{sejours4_get_levelitem what="categorie" alias=$subcatobject->parent_alias assign="catobject"}
Mais si tu fais ça sur tous les éléments d'une liste, c'est pas très performant: ça implique que pour chaque élément pour lequel tu veux récupérer la catégorie, tu ajoutes 2 requêtes...

Dans la prochaine version, il y aura une action "tree" qui permettra de récupérer tous les niveaux en même temps comme dans le sitemap. En attendant, si tu veux tu peux mettre ici en attachement les fichier sejours4.module.php et action.default.php de ton module (il faudra les renommer avec une extension .txt par exemple) et je vais te créer l'action.

Pierre-Luc

Re: CTLModuleMaker accès variable niveau 1

Posted: Fri Sep 04, 2009 9:17 am
by nico63
Super et Merci beaucoup Pierre-Luc,

Voici les fichiers sejours4.module.php et action.default.php renommés tous deux en .txt en attachments. Tu verras, je fonctionne actuellement sur la version 1.8.4.1

Effectivement l'action "tree" sera precieuse pour le module.

En attendant je vais essayer avec les deux requêtes avec variable dans le paramètre alias.

Nicolas.

Re: CTLModuleMaker accès variable niveau 1

Posted: Fri Sep 04, 2009 9:28 am
by nico63
Après un rapide test, ca marche en tout cas pour l'instant très bien en passant par une variable pour l'alias comme tu me l'a indiqué.
Merci beaucoup. Nicolas.