Forum CMS Made Simple Francophone

Aide francophone sur CMS Made Simple

Vous n'êtes pas identifié(e).

Annonce

ATTENTION

  • Prenez le temps de rechercher si quelqu'un n'a pas déjà proposé une solution à votre problème. Sur le forum français et sur le wiki
  • Pensez à mettre à jour votre version de CMS Made Simple. Nous ne faisons de support que sur LA dernière version de CMS Made Simple.
  • Renseignez impérativement le formulaire de nouveau message de manière la plus complète que possible. Dans votre CMS utiliser le menu Administration du site/Informations du système en haut Vue au format texte. Ces informations demandées nous permettent de mieux vous aider
  • Ajoutez [Résolu] au début du titre de votre 1er message lorsqu'une solution a été trouvée.

#1 02/03/2017 18:55:47

debutems
Membre
Inscription : 02/03/2017
Messages : 17

[Résolu] Débutant, problème front

#~~~~~ 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 wink

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 ? tongue

Merci d'avance smile

Dernière modification par debutems (06/03/2017 18:51:27)

Hors ligne

#2 02/03/2017 19:46:20

jce76350
Administrateur
Lieu : Rouen
Inscription : 23/09/2007
Messages : 6 086
Site Web

Re : [Résolu] Débutant, problème front

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.


J-C Etiemble Tutoriels v 2.2.x

Hors ligne

#3 02/03/2017 20:05:25

airelibre
Administrateur
Lieu : Alsace
Inscription : 01/12/2009
Messages : 1 169
Site Web

Re : [Résolu] Débutant, problème front

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 wink Tiens-nous au courant

Hors ligne

#4 03/03/2017 13:18:24

debutems
Membre
Inscription : 02/03/2017
Messages : 17

Re : [Résolu] Débutant, problème front

Bonjour à tous,

Merci pour les réponses smile

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 smile

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 smile ç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é.

Hors ligne

#5 03/03/2017 13:58:02

jce76350
Administrateur
Lieu : Rouen
Inscription : 23/09/2007
Messages : 6 086
Site Web

Re : [Résolu] Débutant, problème front

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.ph … rV2#tutov2


J-C Etiemble Tutoriels v 2.2.x

Hors ligne

#6 03/03/2017 16:44:08

airelibre
Administrateur
Lieu : Alsace
Inscription : 01/12/2009
Messages : 1 169
Site Web

Re : [Résolu] Débutant, problème front

debutems a écrit :

Bonjour à tous,

Merci pour les réponses smile

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 smile

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 smile ç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 :

<input type="text" name="{$actionid}nom">

est récupéré dans ton action cible avec :

$params['nom']

Utilises aussi les balises {form_start} et {form_end} pour générer le <form action= ...

Bonne continuation,

Hors ligne

#7 03/03/2017 16:56:26

debutems
Membre
Inscription : 02/03/2017
Messages : 17

Re : [Résolu] Débutant, problème front

airelibre a écrit :
debutems a écrit :

Bonjour à tous,

Merci pour les réponses smile

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 smile

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 smile ç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 :

<input type="text" name="{$actionid}nom">

est récupéré dans ton action cible avec :

$params['nom']

Utilises aussi les balises {form_start} et {form_end} pour générer le <form action= ...

Bonne continuation,

Merci pour la réponse smile,

Je vais vous faire un petit récapitulatif de mon code actuellement wink peut être que ça aidera 

J'ai dans ma vue (dans mon fichier nommé "default.tpl")

[== 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 :

[== 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 smile 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 ?

Hors ligne

#8 03/03/2017 16:59:29

airelibre
Administrateur
Lieu : Alsace
Inscription : 01/12/2009
Messages : 1 169
Site Web

Re : [Résolu] Débutant, problème front

<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 ?

Hors ligne

#9 03/03/2017 18:00:12

debutems
Membre
Inscription : 02/03/2017
Messages : 17

Re : [Résolu] Débutant, problème front

airelibre a écrit :
<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 smile

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

[== 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 :

[== 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 sad

Hors ligne

#10 03/03/2017 18:05:59

airelibre
Administrateur
Lieu : Alsace
Inscription : 01/12/2009
Messages : 1 169
Site Web

Re : [Résolu] Débutant, problème front

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

Hors ligne

#11 03/03/2017 18:22:47

debutems
Membre
Inscription : 02/03/2017
Messages : 17

Re : [Résolu] Débutant, problème front

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...

Hors ligne

#12 03/03/2017 18:26:49

airelibre
Administrateur
Lieu : Alsace
Inscription : 01/12/2009
Messages : 1 169
Site Web

Re : [Résolu] Débutant, problème front

Scrute l'action fesubmit du module News pour voir les différences avec ton code wink Mais logiquement oui, il devrait avoir le "submit".

Sinon regarde du côté de InitializeFrontend avec RestrictUnknownParams() et SetParameterType() (idem dans le module News)

Hors ligne

#13 06/03/2017 16:39:05

debutems
Membre
Inscription : 02/03/2017
Messages : 17

Re : [Résolu] Débutant, problème front

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 smile 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 :

[== 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

[== 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 wink 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 smile

Dernière modification par debutems (06/03/2017 17:16:36)

Hors ligne

#14 06/03/2017 18:18:38

airelibre
Administrateur
Lieu : Alsace
Inscription : 01/12/2009
Messages : 1 169
Site Web

Re : [Résolu] Débutant, problème front

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 wink Bon dev

Hors ligne

Pied de page des forums