Jump to content

Insérer une nouvelle entrée en BDD via AdminController (module)


Recommended Posts

Bonjour à tous !

Je vous explique mon souci : je developpe actuellement un module visant à intégrer un blog dans une boutique Prestashop. J'ai un bon niveau de programmation en PHP et je trouve le nouveau système MVC très bien fait. De ce fait j'arrive a installer mon module, creer la table associer et lister les entrées (pour un article : titre,contenu,date) dans un menu de l'admininstration de Prestashop via une AdminController.

class PostsAdminController extends ModuleAdminController {

    public function __construct() {

        $this->table = 'jbpost';
        $this->className = 'Post';

        parent :: __construct();

        $this->fields_list = array(
            'id_post' => array(
                'title' => '#'
            ),
            'title' => array(
                'title' => $this->module->l('Title')
            ),
            'content' => array(
                'title' => $this->module->l('Content')
            ),
            'date' => array(
                'title' => $this->module->l('Date')
            )
        );
        $this->actions = array('delete','edit');
    }
}

Dans l'interface, il ya bien le bouton "Creer" en haut à droite. Seulement je ne sais pas a quoi l'associer au niveau du code. En cherchant j'ai vue qu'il fallait se servir des HelperForm mais je n'ai pas vue d'exemple concret. Je voudrais simplement pourvoir afficher un formulaire de saisi d'un article en cliquant sur ce bouton "Creer". Pour le moment cela me retourne une erreur "Fatal error: Class 'Post' not found in... AdminController on line 1163".


Je vous remercie, bonne soirée à vous ;) !

Link to comment
Share on other sites

Bonsoir,

 

Je vous proposer de visualiser le dépôt GitHub suivant: https://github.com/PrestaEdit/Canvas-Module-Prestashop-15

 

Et plus particulièrement le ModuleAdminController que voici: https://github.com/PrestaEdit/Canvas-Module-Prestashop-15/blob/master/controllers/admin/AdminExampleController.php qui est associé au modèle ExampleData (https://github.com/PrestaEdit/Canvas-Module-Prestashop-15/blob/master/models/ExampleData.php)

 

A ce niveau, il s'agit assez simplement de voir qu'il est nécessaire de créer un modèle "Post" sur base de celui-ci. Ensuite, concernant le bouton "Ajouter/Add", il est traité via la méthode renderForm() (https://github.com/PrestaEdit/Canvas-Module-Prestashop-15/blob/master/controllers/admin/AdminExampleController.php#L123).

 

;-)

  • Like 1
Link to comment
Share on other sites

  • 4 months later...

Bonjour !

 

Tout d'abord merci pour ton aide J Danse, ça m'a permis de corriger quelques erreurs ! Et désolé de rouvrir ce topic

 

J'ai essayé de bien suivre tes liens, mais étant assez nouveau sur Prestashop (4 semaines), il me reste une erreur que je n'arrive pas à faire disparaître. (A noter que la partie "détails" ne m'intéressant pas, j'ai enlever ce qui me semblait nécessaire (c'est-à-dire le AddRow qui va avec ainsi que la fonction ajaxProcessDetails() + j'ai également pas besoin de tout ce qui est "image" pour le moment ni du "multi-langage")

 

Je ne sais pas si c'est lié à ma version de Prestashop (1.6.0.5) ou si je n'ai pas compris certains choses mais j'obtiens ceci lorsque j'essaye de modifier un élément (et lors d'un ajout la même chose mais ligne 1349).

Fatal error: Class 'Test' not found in /home/www/cd3883c08fdaf8197f1b057064f7936d/web/nouveau/classes/controller/AdminController.php on line 1339

 

De plus, j'aimerai savoir ce qui rend fonctionnel le bouton supprimer, est-ce que le helper le gère tout seul ?

 

Pouvez-vous m'expliquer ce qui pourrait ne pas aller ou que je pourrai mal faire ? (ou ce dont vous avez besoin pour le vous faire une idée ?) :)

 

Merci d'avance et bonne soirée !

Edited by Ikompagwec (see edit history)
Link to comment
Share on other sites

Bonsoir,

 

Votre controller doit hériter de la classe "ModuleAdminController". Lors de son ajout en BO (en code ou manuel), il faut lui indiquer le nom du module courant.

 

Dans le "bootstrap" du module (le fichier du même nom), il faut réaliser un include de notre model. On peut le faire juste après le premier test de sécurité.

 

Concernant la suppression, le Helper va gérer de lui-même l'opération "simple" de suppression en BDD d'un enregistrement sur base de son identifiant (c'est pour cela que l'on doit lui donner le nom de la table et la clé primaire). Il est, bien sur, possible d'ajouter des traitements en reprenant la classe parente dans son propre controller, donc.

 

Est-ce que j'ai pu vous éclairé, ne fut-ce qu'un rien ? ;-)

Edited by J. Danse (see edit history)
Link to comment
Share on other sites

Bonjour,

 

Merci pour votre réponse :)

 

EDIT: je viens de me rendre compte qu'un ancien fichier controller que je croyais avoir supprimé ne l'était pas, d'où mon problème d'AdminController. En revanche maintenant qu'il l'est, il ne trouve plus de controller ("Contrôleur introuvable "). Je crois que c'était pour cela qu'à la base je mettais mon controller directement dans le dossier controller/admin et non pas à travers mon module.

 

Mon controller hérite bien de la classe ModuleAdminController. C'est pourquoi je ne comprends pas pourquoi mon erreur parle d'AdminController.

 

Lors de son ajout en BO (en code ou manuel), il faut lui indiquer le nom du module courant.

Tu parles bien de l'ajout de l'onglet ? Si c'est le cas, je l'ai fait, sinon je ne vois pas de quoi tu parles ;)

 

Je faisais déjà un require_once de mon model au début de mon "bootstrap".

 

Concernant le Helper 'delete', vous dites qu'on lui donne le nom de la table et la clé primaire, à quel moment le fait-on ? Je pense ne jamais le faire. Je définis bien la table au début de mon controller, mais la clé primaire ?

 

 

Est-ce que j'ai pu vous éclairé, ne fut-ce qu'un rien ? ;-)

Oui !  Ca m'a aidé à mieux comprendre ou à être sur de ne pas avoir mal saisi quelque chose. Merci encore une fois ;)

Edited by Ikompagwec (see edit history)
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...