Jump to content

[Résolu] Affichage sur le front office


Recommended Posts

Bonjour,

 

Comme l'indique mon statut je suis tout nouveau sur PrestaShop et j'aimerais développer des modules pour ce CMS.

 

Je suis la documentation publiée pour les développeurs de module et j'aurais quelques questions à poser sur la partie permettant l'affichage sur le front office.

 

En premier lieu, si je suis exactement l'écriture de la fonction hookDisplayLeftColumn, la valeur de $my_module_link que j'utilise dans la suite de l'exemple (tpl) est incorrecte. On me dit en effet dans la doc que je dois créer un fichier display.php à la racine du module et vers lequel le lien $my_module_link pointera. Le lien retourné par $this->context->link->getModuleLink('mymodule', 'display') est https://monsite.com/module/mymodule/display. Deux problèmes : module est au singulier alors qu'il est au pluriel et display ne porte pas d'extension php. Est-ce une erreur de la doc, un bug dans la méthode getModuleLink() ou moi qui n'ai pas compris le truc ?

 

L'affichage du contenu par la méthode du hook fonctionne, je vois bien le contenu au bon endroit même si le lien n'est pas bon quand je clique dessus.

 

On parle ensuite dans cette doc de la possibilité d'afficher du contenu grâce à l'utilisation d'un controller (php) et d'une vue (tpl). Bien. Je crée les documents demandés tels que présentés dont display.php dans /controllers/front et display.tpl dans /views/templates/front à partir de la racine de mon module. La doc indique qu'il suffit d'enregistrer les deux fichiers, recharger la page et cliquer sur le lien pour voir le contenu affiché dans un thème grâce à un controller. Eh bien non ça ne fonctionne pas déjà parce que le lien me donne une erreur 404. Et si je vais chercher directement mon php dans /controllers/front/display.php j'ai une erreur fatale comme quoi la classe ModuleFrontController est introuvable.

 

Si vous avez eu le courage de me lire jusqu'ici et que vous comprenez ma demande je vous remercie d'avance pour l'aide apportée.

 

Cordialement,


Sébastien

Edited by bshqsdnb
Erreur dans le titre (see edit history)
Link to comment
Share on other sites

Je ne comprends pas assez votre question pour pouvoir aider. Vos explications ne sont pas assez claires. Tout ce que je peux vous dire, c'est que je suis passé par là ("mon premier module") et que j'ai galéré plusieurs semaines avant d'arriver à produire du code qui fonctionne vraiment. Je n'ai jamais trouvé aucun tuto qui fonctionne du premier coup. Mais à force... j'ai fini par piger comment ça marche.
Courage ;)!

Link to comment
Share on other sites

Bonjour,

 

Déjà un tout grand merci pour votre réponse Pierre.

 

Je vais essayer d'être plus clair.

 

Dans l'exemple on appelle la méthode $this->context->link->getModuleLink() avec comme arguments 'mymodule' et 'display'. Cette méthode me retourne un lien du type "https://monsite.com/module/mymodule/display". Plus loin dans l'exemple on demande de créer un fichier display.php à la racine du module.

 

2 problèmes selon moi :

  • la méthode renvoie un lien erroné vers le module, ce doit être un bug ? En effet le terme "module" est au singulier dans ce lien alors qu'il est au pluriel dans mon arborescence, je devrais donc avoir "https://monsite.com/moduleS/mymodule/display"
  • j'ai aussi comme retour le mot display à la fin de l'URL et pas display.php que l'on m'a demandé de créer. Ne faudrait-il pas écrire $this->context->link->getModuleLink('mymodule', 'display.php') au lieu de $this->context->link->getModuleLink('mymodule','display') ?

 

Existe-t-il un endroit où sont listées toutes les méthodes et leurs différentes implémentations ?

 

Merci !

 

Sébastien

 

 

Link to comment
Share on other sites

Les choses avancent.

 

J'ai recherché la méthode getModuleLink dans le code source et j'y ai appris la signification des arguments.

 

Le premier est le type du lien (soit un module) et le deuxième le "controller" associé. J'ai été dupé par la réécriture d'url qui m'a fait croire qu'il s'agissait d'un lien direct mal formé vers un fichier php. On se rend mieux compte de cela avec la réécriture désactivée.

 

Je rencontre toutefois un problème avec l'exemple dont voici le front controller :

<?php
class mymoduledisplayModuleFrontController extends ModuleFrontController
{
    public function initContent()
    {
        parent::initContent();
        $this->setTemplate('module:mymodule/views/templates/front/display.tpl');
    }
}

Le fichier display.tpl est un simple "Hello World" placé au bon endroit.

Si je charge la page je reçois une erreur interne du server (500) et ceci dans le log apache :

[Tue Dec 26 10:44:58.123746 2017] [:error] [pid 30177] [client 109.134.3.94:55239] PHP Fatal error:  Uncaught Error: Class 'mymoduledisplayModuleFrontController' not found in /var/www/html/classes/controller/Controller.php:142\nStack trace:\n#0 /var/www/html/classes/Dispatcher.php(371): ControllerCore::getController('mymoduledis...')\n#1 /var/www/html/index.php(28): DispatcherCore->dispatch()\n#2 {main}\n  thrown in /var/www/html/classes/controller/Controller.php on line 142

 

La version PrestaShop concernée est 1.7.2.4.

 

Merci d'avance,

 

Sébastien

Link to comment
Share on other sites

Bonjour,

les choses sont plus compliquées: les URLs provenant du front-office (partie "publique" de ta boutique PS) sont interceptés par le dispatcher (/classes/dispatcher.php). C'est lui qui appelle ton contrôleur, avec les paramètres s'il y en a. Vérifie que ton contrôleur (display.php) est bien dans le répertoire /controllers/front de ton module et que les accès au fichier sont corrects. Je suppose que tu travailles sur un serveur de développement Ubuntu. Dans ce cas, n'oublie pas de faire un chown www-data est chmod 777 sur tous les fichiers et répertoires de ton module.

Alors non, il n'y a pas de référence de toutes les méthodes (genre PS Developer Reference Guide), ou alors je ne l'ai pas trouvé. Pour ma part, j'ai commencé à développer pour PS en suivant le bouquin de Fabien Serny, Développez vos propre modules e-commerce, dispo en pdf, payant mais pas cher. L'avantage, c'est que le bouquin est très didactique. L'inconvénient, c'est qu'il concerne PS 1.6 et que, contrairement à ce que l'auteur annonce, une partie du code proposé ne fonctionne pas sous 1.7, ce qui oblige à beaucoup chercher avant d'arriver à le faire fonctionner, surtout quand tu es débutant sous PS!

Les choses ont commencé à aller mieux pour moi quand j'ai installé un environnement complet de développement: serveur Ubuntu, Apache+PHP+MySQL et sur mon PC de bureau NetBeans. Puis j'ai installé Xdebug: INDISPENSABLE! Une fois que tu auras installé le debugger, démarre-le dans le fichier dispatcher.php, methode dispatch(). Tu comprendras alors la complexité de Prestashop ;).

  • Thanks 1
Link to comment
Share on other sites

Impeccable je comprends bien mieux comme ça, dommage que le tuto fourni par PrestaShop ne soit pas plus exhaustif à ce sujet mais je suppose que c'est pour laisser le champ libre à divers auteurs de livres et tutos de pallier à cela. Si la référence que vous me donnez n'est totalement applicable à la version 1.7 je vais essayer de trouver quelque chose qui le serait ou attendre un peu que ça sorte.

 

En attendant je vais lire le code des classes de PrestaShop j'en apprendrai certainement pas mal.

 

Concernant le souci de display.php j'ai bien un environnement Ubuntu Server 16.04 LTS + Apache 2 + PHP 7 + MySQL Community 5.7.20. Tous les fichiers de mon répertoire PrestaShop appartiennent à l'utilisateur et au groupe www-data avec un masque 775.

 

Je ne connaissais pas le débogueur php par contre, c'est très intéressant. Je vais le lancer et voir ce que ça donne.

 

En tous cas merci pour ces précieux conseils !

 

Sébastien

Link to comment
Share on other sites

Je pense que l'absence de tuto est en partie délibérée. D'un autre côté, un logiciel e-commerce comme Prestashop comporte beaucoup de fonctionnalité, donc le code est complexe, bien plus qu'un Wordpress par exemple. J'ai commencé à écrire des articles techniques sur PS, mais cela prend énormément de temps. Ils sont accessibles ici: https://okai.be/articles-techniques/. Cela te donnera peut-être d'autres idées.

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