Sujet fermé
Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5

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

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

Merci d'avance Smile
#2

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 v 2.2.xx
#3

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
#4

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é.
#5

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

J-C Etiemble v 2.2.xx
#6

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 :

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

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

Code :
$params['nom']

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

Bonne continuation,
#7

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 :

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

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

Code :
$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")

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

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

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 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
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 Sad
#10

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
#11

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

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)
#13

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 :

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 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
#14

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
Sujet fermé


Atteindre :


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