ELBibich Posted November 3, 2011 Share Posted November 3, 2011 Bonjour, Voila, je suis en train de faire un module et il faudrait que j'affiche une page "spéciale" utilisant un nouveau controller. Je vois pas bien comment faire... Si, peut-être en faisant une classe dans mon module héritant de FrontController ?? Mais du coup, comment je pointe dessus ? Je dois mettre le chemin complet jusqu'à mon module ? style http://www.ma-boutique.com/modules/monmodule/moncontroller.php Merci d'avance pour vos réponses. Julien. Link to comment Share on other sites More sharing options...
Sbizz Posted November 3, 2011 Share Posted November 3, 2011 Bonjour. C'est assez simple : - Il vous faut un fichier à la racine, par exemple : page.php. Votre client pointera donc sur www.monsite.com/page.php. Ce fichier contiendra seulement deux lignes : une inclusion et un appel à votre nouveau controller. - Il faut ensuite créer un controller dans /controllers/, le mieux étant de suivre la même norme que Prestashop (donc même nom) : PageController.php. De même, vous copierez les autres controllers : hérité de FrontController, ayant les fonctions qu'il faut, etc. - Pour finir, il faut un modèle, permettant de gérer l'accès à la base de données, qui se trouvera dans /classes/. Vous suivez ensuite le principe des autres controllers.. Link to comment Share on other sites More sharing options...
ELBibich Posted November 3, 2011 Author Share Posted November 3, 2011 J'avais bien pensé à faire ça mais c'est pas vraiment pratique pour diffuser le module... Je voudrais tout inclure dans mon module et pas demander de copier certains fichiers dans tel ou tel répertoire. Et pour les mises à jour ... Je crois qu'il va falloir pointer directement sur le fichier dans mon module... Merci Link to comment Share on other sites More sharing options...
Sbizz Posted November 3, 2011 Share Posted November 3, 2011 La fonction copy est votre amie. Link to comment Share on other sites More sharing options...
DevNet Posted November 3, 2011 Share Posted November 3, 2011 Bonjour, Vous pouvez rajouter ces 2 méthodes dans votre classe du module : private function installModuleFiles() { @copy(_PS_MODULE_DIR_.$this->name.'/cpy/newpagecontroller.php', _PS_ROOT_DIR_.'/newpagecontroller.php'); @copy(_PS_MODULE_DIR_.$this->name.'/cpy/controllers/NewModuleController.php', _PS_ROOT_DIR_.'/controllers/NewModuleController.php'); return true; } private function uninstallModuleFiles() { unlink(_PS_ROOT_DIR_.'/newpagecontroller.php'); unlink(_PS_ROOT_DIR_.'/controllers/NewModuleController.php'); return true; } Ceci demande au préalable de créer un dossier dans votre module : /cpy et /cpy/controllers, afin d'y placer les 2 fichiers en attente de copy automatique. Cette installation / désinstallation automatique peut se gérer par les méthodes de classes public function install() et public function uninstall() en appelant respectivement les 2 nouvelles méthodes private function installModuleFiles() et private function uninstallModuleFiles() . Bien cordialement Link to comment Share on other sites More sharing options...
ELBibich Posted November 3, 2011 Author Share Posted November 3, 2011 ok ca me semble pas mal. Par contre, il faut que les répertoires de destination possèdent les droits en écriture et c'est pas garanti ? Merci. Link to comment Share on other sites More sharing options...
Sbizz Posted November 3, 2011 Share Posted November 3, 2011 Faut faire une gestion d'erreur et d'avertissement après Link to comment Share on other sites More sharing options...
ELBibich Posted November 4, 2011 Author Share Posted November 4, 2011 ouep. Merci à tous. au boulot maintenant. Link to comment Share on other sites More sharing options...
jd440 Posted April 26, 2018 Share Posted April 26, 2018 On 03/11/2011 at 8:49 PM, Sbizz said: Bonjour. C'est assez simple : - Il vous faut un fichier à la racine, par exemple : page.php. Votre client pointera donc sur www.monsite.com/page.php. Ce fichier contiendra seulement deux lignes : une inclusion et un appel à votre nouveau controller. - Il faut ensuite créer un controller dans /controllers/, le mieux étant de suivre la même norme que Prestashop (donc même nom) : PageController.php. De même, vous copierez les autres controllers : hérité de FrontController, ayant les fonctions qu'il faut, etc. - Pour finir, il faut un modèle, permettant de gérer l'accès à la base de données, qui se trouvera dans /classes/. Vous suivez ensuite le principe des autres controllers.. Bonjour Est ce que cette procédure fonctionnerait sur la V1.6? Si j'ai compris un fichier controller/Avis.php <?php error_reporting(E_ALL); include(dirname(__FILE__).'/config/config.inc.php'); // require_once(dirname(__FILE__).'/init.php'); include_once(_PS_CONTROLLER_DIR_.'front/AvisController.php'); new Avis(); Puis un fichier controller/AvisController.php classe/Avis.php class AvisControllerCore extends FrontController { /** string Internal controller name */ public $php_self = 'avis'; /** @var avis Current avis object */ protected $avis; /** @var bool If set to false, customer cannot view the current avis. */ public $customer_access = true; /** * Sets default medias for this controller */ public function setMedia() { parent::setMedia(); //TODO : check why cluetip css is include without js file $this->addCSS(array( _THEME_CSS_DIR_.'avis.css' => 'all', )); } public function init() { parent::init(); } /** * Initializes page content variables */ public function initContent() { parent::initContent(); $this->setTemplate(_PS_THEME_DIR_.'avis.tpl'); } et enfin un fichier classe/Avis.php class AvisCore extends ObjectModel { [~] } Est ce cela? Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now