Messages : 34
Sujets : 4
Inscription : Mar 2017
Réputation :
0
02/03/2017, 18:55:47
(Modification du message : 06/03/2017, 18:51:27 par debutems.)
Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: 2.1.2
#~ Url du site :
#~ Hébergeur / Soft : wampserver
#~ Informations Système :
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~
Bonjour à tous,
C'est une première pour moi, j'ai l'opportunité de pouvoir travailler sur ce CMS Made Simple (j'ai uniquement travaillé avec des frameworks tels que Symfony, Django etc...).
Auparavant je n'avais jamais travaillé avec un CMS quel-qu’il soit. Il faut avouer que ça me change grandement
Maintenant que j'ai préparé le contexte, je vais revenir au vrai sujet.
(J'ai suivi la doc : Module_Writing_Tutorial.pdf
J'ai dans un premier temps créé sur le back-office un fichier nommé action.defaultadmin.php avec une fonction CreateTemplate afin d’accéder à ma vue nommée defaultadmin.tpl qui elle comprend un formulaire. Suite au submit de mon formulaire, je peux peupler la BDD avec les informations du form ($PARAM['name']). Jusqu'ici pas de problème sur le back.
Pour le Front, je voulais utiliser la même technique c'est à dire créer un fichier action.default.php puis accéder à ma vue avec mon formulaire mais lors du submit, impossible de récupérer les informations avec $PARAM.
Du coup j'ai fait pas mal d'essai, en utilisant par exemple le module FormBuilder qui est quand même super pratique, mais idem, je n'arrive pas à revenir sur mon controller..
Quelqu'un aurait une idée ? :p
Merci d'avance
Messages : 11,049
Sujets : 231
Inscription : Sep 2007
Réputation :
1
Il me semble (réflexion personnelle) qu'il faudrait déjà que tu maîtrises bien le CMS avant de passer directement à la création de module.
Messages : 2,487
Sujets : 18
Inscription : Dec 2009
Réputation :
0
Bonjour et bienvenue,
tu peux t'appuyer sur le module news et en particulier l'action de submit en frontend.
Il faut bien penser à la restriction des $params lors de l'initialisation du module. Mais de manière générale, le fonctionnement est le même qu'en back - faire attention au returnid aussi
Si tu as déjà réussis tout le tuto sur l'écriture de module, tu ne dois plus être très loin de la solution Tiens-nous au courant
Messages : 34
Sujets : 4
Inscription : Mar 2017
Réputation :
0
Bonjour à tous,
Merci pour les réponses
jce76350 , concernant la création d'un module directement, tu as surement raison, mais je n'ai pas forcément trouvé de doc me permettant de comprendre globalement le CMS. Si tu en as en stock, je suis adepte de lecture
airelibre, je vous remercie de votre réponse, je vais m'appuyer alors sur le module news pour bien comprendre le passage de la vue vers le controller suite à un submit ça me donnera des pistes, je reviendrais vers vous.
J'ai en effet réussi le tuto sur l'écriture de module qui est vraiment très bon, on avance étape par étape, c'est très agréable. Je le trouve néanmoins un peu limité sur la partie front, ils proposent dans le tuto de simplement afficher par un foreach un objet me semble t'il, et donc pas de formulaires ce qui m'aurait grandement aiguillé.
Messages : 11,049
Sujets : 231
Inscription : Sep 2007
Réputation :
1
Citation : mais je n'ai pas forcément trouvé de doc me permettant de comprendre globalement le CMS
voir ma signature et en particulier http://jc.etiemble.free.fr/abc/index.php...rV2#tutov2
Messages : 2,487
Sujets : 18
Inscription : Dec 2009
Réputation :
0
debutems a écrit :Bonjour à tous,
Merci pour les réponses
jce76350 , concernant la création d'un module directement, tu as surement raison, mais je n'ai pas forcément trouvé de doc me permettant de comprendre globalement le CMS. Si tu en as en stock, je suis adepte de lecture
airelibre, je vous remercie de votre réponse, je vais m'appuyer alors sur le module news pour bien comprendre le passage de la vue vers le controller suite à un submit ça me donnera des pistes, je reviendrais vers vous.
J'ai en effet réussi le tuto sur l'écriture de module qui est vraiment très bon, on avance étape par étape, c'est très agréable. Je le trouve néanmoins un peu limité sur la partie front, ils proposent dans le tuto de simplement afficher par un foreach un objet me semble t'il, et donc pas de formulaires ce qui m'aurait grandement aiguillé.
En théorie, tu récupères les paramètres via $params[NAME] après avoir posté tes données en n'oubliant pas l'ajout du {$actionid} devant tous les "name" dans ton formulaire
Exemple :
Code : <input type="text" name="{$actionid}nom">
est récupéré dans ton action cible avec :
Utilises aussi les balises {form_start} et {form_end} pour générer le <form action= ...
Bonne continuation,
Messages : 34
Sujets : 4
Inscription : Mar 2017
Réputation :
0
airelibre a écrit :debutems a écrit :Bonjour à tous,
Merci pour les réponses
jce76350 , concernant la création d'un module directement, tu as surement raison, mais je n'ai pas forcément trouvé de doc me permettant de comprendre globalement le CMS. Si tu en as en stock, je suis adepte de lecture
airelibre, je vous remercie de votre réponse, je vais m'appuyer alors sur le module news pour bien comprendre le passage de la vue vers le controller suite à un submit ça me donnera des pistes, je reviendrais vers vous.
J'ai en effet réussi le tuto sur l'écriture de module qui est vraiment très bon, on avance étape par étape, c'est très agréable. Je le trouve néanmoins un peu limité sur la partie front, ils proposent dans le tuto de simplement afficher par un foreach un objet me semble t'il, et donc pas de formulaires ce qui m'aurait grandement aiguillé.
En théorie, tu récupères les paramètres via $params[NAME] après avoir posté tes données en n'oubliant pas l'ajout du {$actionid} devant tous les "name" dans ton formulaire
Exemple :
Code : <input type="text" name="{$actionid}nom">
est récupéré dans ton action cible avec :
Utilises aussi les balises {form_start} et {form_end} pour générer le <form action= ...
Bonne continuation,
Merci pour la réponse ,
Je vais vous faire un petit récapitulatif de mon code actuellement peut être que ça aidera
J'ai dans ma vue (dans mon fichier nommé "default.tpl")
Code : [== HTML ==]
<div class="downloadWrapper">
{form_start }
<div class="pageoverflow">
<p class="pageinput">
<input type = "submit" name="{$actionid}submit" value="{$mod->Lang('submit')}"/>
<input type = "submit" name="{$actionid}cancel" value="{$mod->Lang('cancel')}"/>
</p>
</div>
<div class="pageoverflow">
<p class = "pagetext">
File:
</p>
<p class= "pageinput">
<input type="file" enctype = "multipart/form-data" name="{$actionid}image" />
</p>
</div>
<!-- </form> -->
{form_end}
</div>
Tandis que dans mon controller j'ai :
Code : [== PHP ==]
[......]
if(isset($params['submit'])){
var_dump("on rentre dans le submit");
exit();
}
$users = $query->GetMatches();
$tpl = $smarty->CreateTemplate($this->GetTemplateResource('default.tpl'), null,null, $smarty);
$tpl->assign('users', $users);
$tpl->display();
J'ai mis un var_dump histoire de voir si je rentre dans mon submit mais rien à faire pas de exit ^^
J'ai de temps en temps une erreur du type : "Warning: Parameter submit is not known by module UserTest dropped in"
Es-ce qu'il y a quelque chose qui vous choque ?
Messages : 2,487
Sujets : 18
Inscription : Dec 2009
Réputation :
0
Code : <input type = "submit"
Les espace sont une erreur de copier/coller ou ils sont réellement dans ton code ?
Tu as bien déclaré le type de variable qu'était submit dans l'initialisation du frontend du module ?
Messages : 34
Sujets : 4
Inscription : Mar 2017
Réputation :
0
airelibre a écrit :Code : <input type = "submit"
Les espace sont une erreur de copier/coller ou ils sont réellement dans ton code ?
Tu as bien déclaré le type de variable qu'était submit dans l'initialisation du frontend du module ?
Merci pour tes réponses
Les espace étaient effectivement une erreur ^^.
L'initialisation du frontend du module est configurable à quel endroit ?
Pour l'interface admin du back j'avais fait comme cela :
Le template : edit_user.tpl
Code : [== HTML ==]
{form_start hid=$user->id}
<div class="pageoverflow">
<p class="pageinput">
<input type="submit" name="{$actionid}submit" value="{$mod->Lang('submit')}"/>
<input type="submit" name="{$actionid}cancel" value="{$mod->Lang('cancel')}"/>
</p>
</div>
<div class="pageoverflow">
<p class = "pagetext">
{$mod->Lang('name')}:
</p>
<p class= "pageinput">
<input type="text" name="{$actionid}name" value="{$user->name}" />
</p>
</div>
{form_end}
Pour le controller : Code : [== PHP ==]
if(!defined('CMS_VERSION')) exit;
if(!$this->CheckPermission(UserTest::MANAGE_USERS_PERM)) return;
$user = new UserTestItem();
if(isset ($params['submit'])){
$user->name = trim($params['name']);
$user->save();
$this->SetMessage($this->Lang('user_saved'));
$this->RedirectToAdminTab();
}else{
$tpl = $smarty->CreateTemplate($this->GetTemplateResource('edit_user.tpl'), null, null, $smarty);
$tpl->assign('user', $user);
$tpl->display();
}
J'ai l'impression que c'est très ressemblant avec le front mais je dois me tromper
Messages : 2,487
Sujets : 18
Inscription : Dec 2009
Réputation :
0
Commence par ne pas utiliser RestrictUnknownParams dans ta classe de module principale au niveau de la méthode InitializeFrontend (tu l'activeras une fois que ca fonctionne sans).
Ensuite fais un print_r($params); en tête de ton contrôleur pour voir ce qui passe
Messages : 34
Sujets : 4
Inscription : Mar 2017
Réputation :
0
airelibre a écrit :Commence par ne pas utiliser RestrictUnknownParams dans ta classe de module principale au niveau de la méthode InitializeFrontend (tu l'activeras une fois que ca fonctionne sans).
Ensuite fais un print_r($params); en tête de ton contrôleur pour voir ce qui passe
Post submit le print_r affiche : "Array ( [returnid] => 49 [action] => default )"
Pré submit le print_r affiche : "Array ( [module] => UserTest [action] => default )"
Mais idem je ne rentre pas dans le isset($params['submit')) ce qui est logique vu qu'il n'existe pas...
Messages : 2,487
Sujets : 18
Inscription : Dec 2009
Réputation :
0
Scrute l'action fesubmit du module News pour voir les différences avec ton code Mais logiquement oui, il devrait avoir le "submit".
Sinon regarde du côté de InitializeFrontend avec RestrictUnknownParams() et SetParameterType() (idem dans le module News)
Messages : 34
Sujets : 4
Inscription : Mar 2017
Réputation :
0
06/03/2017, 16:39:05
(Modification du message : 06/03/2017, 17:16:36 par debutems.)
airelibre a écrit :Sinon regarde du côté de InitializeFrontend avec RestrictUnknownParams() et SetParameterType() (idem dans le module News)
L'erreur venait effectivement d'ici, je vous remercie j'ai ajouté mes nouveaux params avec SetParameterType(), et du coup aucune problème pour récupérer un input txt.
Le soucis est maintenant de récupérer un input file :
Code : [== HTML ==]
<div class="pageoverflow">
<p class = "pagetext">
File:
</p>
<p class= "pageinput">
<input type="file" name="{$actionid}fileupload" />
</p>
</div>
Malgré l'ajout dans SetParameterType() de la variable
Code : [== PHP ==]
$this->SetParameterType('fileupload',CLEAN_FILE);
Je ne récupère pas mon fichier en question dans le controller... Ce qui est un poil embêtant Mais peut être que je suis à côté de la plaque et qu'il n'est pas possible de récupérer un fichier de cette manière.
(Es-ce que je déplace le sujet en résolu ? ou je peux continuer pour ce petit problème de "file" ?)
Le but étant de récupérer les informations du fichier dans le controller et de pouvoir ensuite le traiter, pourquoi pas le stocker dans le cloud ou autre.
Merci d'avance pour les éventuelles pistes
Messages : 2,487
Sujets : 18
Inscription : Dec 2009
Réputation :
0
Pour les fichiers, il faut en effet attaquer directement $_FILES il me semble - les fichiers ne sont pas traités par le type de paramètre.
Tu peux marquer en [Résolu] si c'est ok pour toi Bon dev
|