JP31 Posted October 22, 2018 Share Posted October 22, 2018 Bonjour, je cherche à apprendre davantage comment fonctionne prestashop. Je suis donc la doc ici : https://devdocs.prestashop.com/1.7/modules/concepts/hooks/use-hooks-on-modern-pages/ Seulement, en suivant tous les points comme indiqué. Je me retrouve avec une erreur : Attempted to load class "ProductRepository" from namespace "Foo\Repository". Did you forget a "use" statement for another namespace? Ma structure est la suivant : Module -->foo -->config -->services.yml -->src -->Repository -->ProductRepository.php -->foo.php services.yml : # modules/foo/config/services.yml services: product_repository: class: \Foo\Repository\ProductRepository arguments: ['@doctrine.dbal.default_connection', '%database_prefix%'] ProductRepository.php <?php // src/Repository/ProductRepository.php namespace Foo\Repository; use Doctrine\DBAL\Connection; class ProductRepository { /** * @var Connection the Database connection. */ private $connection; /** * @var string the Database prefix. */ private $databasePrefix; public function __construct(Connection $connection, $databasePrefix) { $this->connection = $connection; $this->databasePrefix = $databasePrefix; dump('ok'); } /** * @param int $langId the lang id * @return array the list of products */ public function findAllbyLangId($langId) { $prefix = $this->databasePrefix; $productTable = "${prefix}product"; $productLangTable = "${prefix}product_lang"; $query = "SELECT p.* FROM ${productTable} p LEFT JOIN ${productLangTable} pl ON (p.`id_product` = pl.`id_product`) WHERE pl.`id_lang` = :langId"; $statement = $this->connection->prepare($query); $statement->bindValue('langId', $langId); $statement->execute(); return $statement->fetchAll(); } } et foo.php <?php if (!defined('_PS_VERSION_')) { exit; } class Foo extends Module { public function __construct() { $this->name = 'foo'; $this->tab = 'front_office_features'; $this->version = '1.0.0'; $this->author = 'Jordan NativeWeb'; $this->need_instance = 0; $this->ps_versions_compliancy = [ 'min' => '1.6', 'max' => _PS_VERSION_ ]; $this->bootstrap = true; parent::__construct(); $this->displayName = $this->l('Foo'); $this->description = $this->l('2eme module'); $this->confirmUninstall = $this->l('Etes vous sûr de vouloir supprimer ce module ?'); if(!Configuration::get('MYMODULE_NAME')) { $this->warning = $this->l('Aucun nom trouvé'); } } /** * Module installation. * * @return bool Success of the installation */ public function install() { return parent::install() && $this->registerHook('displayDashboardToolbarIcons'); } /** * Add an "XML export" action in Product Catalog page. * */ public function hookDisplayDashboardToolbarIcons($hookParams) { if ($this->isSymfonyContext() && $hookParams['route'] === 'admin_product_catalog') { $products = $this->get('product_repository')->findAllByLangId(1); dump($products); } } public function uninstall() { if (!parent::uninstall() || !Configuration::deleteByName('MYMODULE_NAME') ) { return false; } return true; } } Je suis sous la dernière version de Prestashop, et j'avoue ne pas comprendre. Avez vous une idée ? Merci par avance Link to comment Share on other sites More sharing options...
JP31 Posted October 23, 2018 Author Share Posted October 23, 2018 Pas d'idée ? Link to comment Share on other sites More sharing options...
DGStark Posted November 28, 2018 Share Posted November 28, 2018 Salut, Il faut utiliser "composer" pour charger les classes de ton module. J'en sais pas plus que toi pour l'instant, je dois me renseigner sur la démarche à suivre Link to comment Share on other sites More sharing options...
DGStark Posted November 28, 2018 Share Posted November 28, 2018 51 minutes ago, DGStark said: Salut, Il faut utiliser "composer" pour charger les classes de ton module. J'en sais pas plus que toi pour l'instant, je dois me renseigner sur la démarche à suivre Voila, Du coup, il a fallu que je crée un fichier composer.json à la racine de mon module foo. composer.json { "name" : "prestashop/foo", "description": "Foo module demo", "autoload": { "psr-4": { "Foo\\": "src/" } }, "type" : "prestashop-module" } Ensuite j'ai lancé la commande composer dumpautoload toujours depuis la racine de mon module foo. Et voila, j'obtiens bien le résultat attendu. Composer est déjà installé sur mon pc, donc je n'ai pas eu besoin de le faire, mais sinon installe le . Si t'as besoin de plus d'infos je me suis appuyé sur ces liens. https://getcomposer.org/doc/00-intro.md https://github.com/sarjon/demo-grid-module 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