Jump to content
Sign in to follow this  
ELBibich

ajouter page / controller dans un module

Recommended Posts

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.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

Faut faire une gestion d'erreur et d'avertissement après :)

Share this post


Link to post
Share on other sites
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?

Share this post


Link to post
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
Sign in to follow this  

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More