appel de plusieurs actions et passage de paramètres

Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
#1
Citation :#~~~~~ NE PAS SUPPRIMER CE BLOC ~~~~~
#~ Version du CMS: 1.9.3
#~ Nom de l'hébergeur :
#~ Informations Système :
#~~~~~ NE PAS SUPPRIMER CE BLOC ~~~~~

Bonjour,

Je suis en train de développer un module. Dans ce module, j'ai 2 actions :
- action A pour afficher un formulaire de filtre
- action B pour afficher un listing des éléments correspondants au filtre.

Côté frontend, le formulaire de l'action A est affiché sur toutes les pages et l'action B est affichée sur une page.
Quand je clique sur le bouton "Filtrer" de mon fomulaire, techniquement, j'envoie tous les paramètres vers l'action B.
Tout marche très bien.

Ce que j'essaie de faire :
Lors de l'envoi des paramètres, c'est de les avoir dans l'action B ET aussi dans l'action A.
Je n'arrive pas à voir comment je peux faire cela. Est-ce qu'il faudrait que je parse le contenu de la variable $_REQUEST ?
CMSMS propose-t-il une meilleure solution technique pour faire cela ?

D'avance merci pour votre aiguillage,
Phil-
Répondre
#1
Citation :#~~~~~ NE PAS SUPPRIMER CE BLOC ~~~~~
#~ Version du CMS: 1.9.3
#~ Nom de l'hébergeur :
#~ Informations Système :
#~~~~~ NE PAS SUPPRIMER CE BLOC ~~~~~

Bonjour,

Je suis en train de développer un module. Dans ce module, j'ai 2 actions :
- action A pour afficher un formulaire de filtre
- action B pour afficher un listing des éléments correspondants au filtre.

Côté frontend, le formulaire de l'action A est affiché sur toutes les pages et l'action B est affichée sur une page.
Quand je clique sur le bouton "Filtrer" de mon fomulaire, techniquement, j'envoie tous les paramètres vers l'action B.
Tout marche très bien.

Ce que j'essaie de faire :
Lors de l'envoi des paramètres, c'est de les avoir dans l'action B ET aussi dans l'action A.
Je n'arrive pas à voir comment je peux faire cela. Est-ce qu'il faudrait que je parse le contenu de la variable $_REQUEST ?
CMSMS propose-t-il une meilleure solution technique pour faire cela ?

D'avance merci pour votre aiguillage,
Phil-
Répondre
#2
salut Philalawst

Tu peux très bien factoriser le code de ton actuelle action 1 dans un fichier à part (inc.myfonction.php) et y faire appel depuis ton fichier action A

Code :
include_onde('inc.myfonction.php');

du coup pour ton action B, tu récupère les paramètres, tu include également le fichier

Code :
include_onde('inc.myfonction.php');

en lui passant des paramètres nécessaire. Ensuite tu fait le traitement de ton action B.

c'est clair ?
Répondre
#2
salut Philalawst

Tu peux très bien factoriser le code de ton actuelle action 1 dans un fichier à part (inc.myfonction.php) et y faire appel depuis ton fichier action A

Code :
include_onde('inc.myfonction.php');

du coup pour ton action B, tu récupère les paramètres, tu include également le fichier

Code :
include_onde('inc.myfonction.php');

en lui passant des paramètres nécessaire. Ensuite tu fait le traitement de ton action B.

c'est clair ?
Répondre
#3
Déjà! merci de m'aider.

Et comme je n'arrive pas à voir cmt je peux factoriser mes 2 actions.

voici, en gros, comment je fonctionne ! (j'ai gardé l'essentiel)

Action A "search": mymodule.search.php
Code :
...
print_r($params);

$smarty->assign('start_form', $this->CreateFormStart($id, 'result', $returnid));
$this->smarty->assign("search_input", $this->CreateInputText($id,"text_to_search",isset($params['text_to_search']) ? $params['text_to_search'] : "", 50,255));
$smarty->assign('submit', $this->CreateInputSubmit($id, 'submit', $this->Lang('submit')));
$smarty->assign('end_form', $this->CreateFormEnd());

echo $this->ProcessTemplateFromDatabase('search');
...

Action B "result":mymodule.result.php
Code :
...
print_r($params);

//traitement -> select DB

$smarty->assign_by_ref('items',$items);
echo $this->ProcessTemplate('result.tpl');
...

{MyModule action="result"} est inclus dans le contenu d'une page

{MyModule action="search"} est inclus dans la colone de gauche de mon gabarit


Lorsque je clique sur le bouton "Submit" de mon formulaire, avec le print_r

Action A "search": mymodule.search.php
Je n'ai pas le params['text_to_search']

Action B "result":mymodule.result.php
J'ai le params['text_to_search']

même en factorisant, je vais tjs avoir ce problème de paramètres. non ?!

Phil-
Répondre
#3
Déjà! merci de m'aider.

Et comme je n'arrive pas à voir cmt je peux factoriser mes 2 actions.

voici, en gros, comment je fonctionne ! (j'ai gardé l'essentiel)

Action A "search": mymodule.search.php
Code :
...
print_r($params);

$smarty->assign('start_form', $this->CreateFormStart($id, 'result', $returnid));
$this->smarty->assign("search_input", $this->CreateInputText($id,"text_to_search",isset($params['text_to_search']) ? $params['text_to_search'] : "", 50,255));
$smarty->assign('submit', $this->CreateInputSubmit($id, 'submit', $this->Lang('submit')));
$smarty->assign('end_form', $this->CreateFormEnd());

echo $this->ProcessTemplateFromDatabase('search');
...

Action B "result":mymodule.result.php
Code :
...
print_r($params);

//traitement -> select DB

$smarty->assign_by_ref('items',$items);
echo $this->ProcessTemplate('result.tpl');
...

{MyModule action="result"} est inclus dans le contenu d'une page

{MyModule action="search"} est inclus dans la colone de gauche de mon gabarit


Lorsque je clique sur le bouton "Submit" de mon formulaire, avec le print_r

Action A "search": mymodule.search.php
Je n'ai pas le params['text_to_search']

Action B "result":mymodule.result.php
J'ai le params['text_to_search']

même en factorisant, je vais tjs avoir ce problème de paramètres. non ?!

Phil-
Répondre
#4
:/ c'est spécial comme nom de fichier...

normalement c'est monaction3.action.php il me semble pour définir une page php qui sera appelée dès que le tag sera {moduleManage module='xxx' action='monaction3'} ou plus simplement {xxx action='monaction3'}

tu m'a donné des noms d'exemple ou tu as vraiment géré ton module ainsi ? si tu l'as géré ainsi, comme fais tu la liaison vers l'action sélectionnée ?

Je te réponds sur la factorisation dès que je suis sur de comprendre ton code Wink
Répondre
#4
:/ c'est spécial comme nom de fichier...

normalement c'est monaction3.action.php il me semble pour définir une page php qui sera appelée dès que le tag sera {moduleManage module='xxx' action='monaction3'} ou plus simplement {xxx action='monaction3'}

tu m'a donné des noms d'exemple ou tu as vraiment géré ton module ainsi ? si tu l'as géré ainsi, comme fais tu la liaison vers l'action sélectionnée ?

Je te réponds sur la factorisation dès que je suis sur de comprendre ton code Wink
Répondre
#5
Effectivement! je me suis trompé en écrivant le post

Dans mon module, j'ai :

Action A "search":
nom de fichier : .../modules/mymodule/action.search.php
Appel dans le template : {MyModule action="search"}

Action B "result":
nom de fichier : .../modules/mymodule/action.result.php
Appel dans le template : {MyModule action="result"}

Tu as compris mon problème? ...ou je l'ai expliqué comme une vache espagnole ^^
Répondre
#5
Effectivement! je me suis trompé en écrivant le post

Dans mon module, j'ai :

Action A "search":
nom de fichier : .../modules/mymodule/action.search.php
Appel dans le template : {MyModule action="search"}

Action B "result":
nom de fichier : .../modules/mymodule/action.result.php
Appel dans le template : {MyModule action="result"}

Tu as compris mon problème? ...ou je l'ai expliqué comme une vache espagnole ^^
Répondre
#6
ok donc je te propose ceci :

tu vides ton action B de tout code hormis

Code :
print_r($params);


et tu relances tes tests. ca me parait improbable que $params disparaisse d'un appel à l'autre. La seule raison c'est l'écrasement de cette valeur durant l'éxecution de ton code d'une manière ou d'une autre.
Répondre
#6
ok donc je te propose ceci :

tu vides ton action B de tout code hormis

Code :
print_r($params);


et tu relances tes tests. ca me parait improbable que $params disparaisse d'un appel à l'autre. La seule raison c'est l'écrasement de cette valeur durant l'éxecution de ton code d'une manière ou d'une autre.
Répondre
#7
Bonsoir,

Pour l'action A "search" :
J'ai mis le print_r($params); au tout début.

Pour l'action B "result" :
J'ai laissé tout supprimé sauf le print_r($params);

Quand je fais mon test (clic sur le bouton submit du formulaire affiché par l'action A), je vois l'output des 2 print_r(); (sur la même page, je précise)

voici ce que j'ai
Pour l'action A, j'ai
Code :
Array ( [action] => annonces_filters [module] => MyModule)

Pour l'action B :
Code :
Array ( [returnid] => 58 [text_to_search] => "bla bla bla" [submit] => Valider [action] => result)

Et donc mon souci, c'est que j'aimerais voir dans l'output du print_r de l'action A, l'entre "text_to_search"

Tu me suis toujours ?
Répondre
#7
Bonsoir,

Pour l'action A "search" :
J'ai mis le print_r($params); au tout début.

Pour l'action B "result" :
J'ai laissé tout supprimé sauf le print_r($params);

Quand je fais mon test (clic sur le bouton submit du formulaire affiché par l'action A), je vois l'output des 2 print_r(); (sur la même page, je précise)

voici ce que j'ai
Pour l'action A, j'ai
Code :
Array ( [action] => annonces_filters [module] => MyModule)

Pour l'action B :
Code :
Array ( [returnid] => 58 [text_to_search] => "bla bla bla" [submit] => Valider [action] => result)

Et donc mon souci, c'est que j'aimerais voir dans l'output du print_r de l'action A, l'entre "text_to_search"

Tu me suis toujours ?
Répondre
#8
ok j'ai peut être une bonne idée du coup.

remplace

Code :
{MyModule action="search"}

par

Code :
{MyModule action="search" text_to_search=$param['text_to_search']}

ensuite ouvre ton fichier NomDeMonModule.module.php

cherche dans la fonction "SetParameters()" le code

Code :
$this->RestrictUnknownParams();

Si tu ne le trouves pas ca devrait être bon.

Si tu le trouves, tu ajoutes en dessous :

Code :
$this->CreateParameter('text_to_search', '', '');
$this->SetParameterType('text_to_search',CLEAN_STRING);

ce qui aura pour effet de laisser passer le paramètre text_to_search pour le frontal de ton module (question de sécurité)

J'espère que ma mémoire est encore bonne :/
Répondre
#8
ok j'ai peut être une bonne idée du coup.

remplace

Code :
{MyModule action="search"}

par

Code :
{MyModule action="search" text_to_search=$param['text_to_search']}

ensuite ouvre ton fichier NomDeMonModule.module.php

cherche dans la fonction "SetParameters()" le code

Code :
$this->RestrictUnknownParams();

Si tu ne le trouves pas ca devrait être bon.

Si tu le trouves, tu ajoutes en dessous :

Code :
$this->CreateParameter('text_to_search', '', '');
$this->SetParameterType('text_to_search',CLEAN_STRING);

ce qui aura pour effet de laisser passer le paramètre text_to_search pour le frontal de ton module (question de sécurité)

J'espère que ma mémoire est encore bonne :/
Répondre
#9
J'ai essayé ce que tu m'as proposé, rien n'y fait.

J'ai activé le mode debug et j'obtiens l'erreur :

Code :
Notice: Undefined index: params in D:\projects\php\cmsms\www\tmp\templates_c\%%76^763^76313DB0%%tpl_body%3A22.php on line 77

Faudrait que je trouve un module qui utilise le même principe, histoire de voir comment il fonctionne.
Répondre
#9
J'ai essayé ce que tu m'as proposé, rien n'y fait.

J'ai activé le mode debug et j'obtiens l'erreur :

Code :
Notice: Undefined index: params in D:\projects\php\cmsms\www\tmp\templates_c\%%76^763^76313DB0%%tpl_body%3A22.php on line 77

Faudrait que je trouve un module qui utilise le même principe, histoire de voir comment il fonctionne.
Répondre
#10
@ bess heu ...
la discussion serait pas mieux dans
Modules, Tags [ Nouveaux messages ]
Aide concernant l'utilisation des modules, balises et balises utilisateur
J-C Etiemble v 2.2.xx
Répondre
#10
@ bess heu ...
la discussion serait pas mieux dans
Modules, Tags [ Nouveaux messages ]
Aide concernant l'utilisation des modules, balises et balises utilisateur
J-C Etiemble v 2.2.xx
Répondre
#11
J'ai fait un module pour tester les 2 actions (en supprimant tout ce qui est inutile) :

Sur le site voici, ce que j'obtiens, on voit bien que dans le "PRINT R: Search" de gauche, je n'ai pas le "text_to_search" après avoir cliqué sur le bouton "submit"
[Image: actions.jpg]

Comment puis-je faire pour qu'il s'y retrouve ?

S'il faut je peux envoyer mon module de test.


Merci,
Philippe
Répondre
#11
J'ai fait un module pour tester les 2 actions (en supprimant tout ce qui est inutile) :

Sur le site voici, ce que j'obtiens, on voit bien que dans le "PRINT R: Search" de gauche, je n'ai pas le "text_to_search" après avoir cliqué sur le bouton "submit"
[Image: actions.jpg]

Comment puis-je faire pour qu'il s'y retrouve ?

S'il faut je peux envoyer mon module de test.


Merci,
Philippe
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)