Jump to content

Vintelec

Members
  • Posts

    15
  • Joined

  • Last visited

Everything posted by Vintelec

  1. I was waiting to be sure, but it's good: I managed to get my module working! In 1.7.7.0, my template was not good. And for the previous versions, you have to add this for the main route, as specified in the doc : _legacy_controller: AdminOrderPreparation _legacy_link: AdminOrderPreparation I got fooled because the demo module didn't have them, except that it's made for 1.7.7.0 minimum so... my bad. I thought I had already tested with these lines though but there was probably another error at the same time. I didn't test for 1.7.5.0 because I'm using the new Grid system which requires 1.7.6, so I'm going to upgrade my store to 1.7.6.8. But I think it should work too. Good programming to all of you!
  2. J'attendais d'être sûr, mais c'est bon : j'ai réussi à faire marcher mon module ! En 1.7.7.0, c'était mon template qui était pas bon. Et pour les versions antérieures, il faut bien rajouter ceci pour la route principale, comme précisé dans la doc : _legacy_controller: AdminOrderPreparation _legacy_link: AdminOrderPreparation Je me suis fais avoir parce que le module de démo ne les comportait pas, sauf qu'il est fait pour la 1.7.7.0 minimum donc... my bad. Je pensais avoir déjà testé avec ces lignes pourtant mais il y avait sûrement une autre erreur en même temps. Je n'ai pas testé pour la 1.7.5.0 parce que j'utilise le nouveau système de Grid qui requiert la 1.7.6, donc je vais faire évoluer ma boutique vers la 1.7.6.8. Mais je pense que ça doit fonctionner aussi. Bonne programmation à tous !
  3. So, I've made progress and here are my results: I tested the demo module "democontrollertabs" with two versions of PrestaShop : The 1.7.5.0, the version I currently use with my store. ==> Same result as with my module, i.e. the error "The controller is missing or invalid". The 1.7.7.0 beta 2, the last version released so far. ==> The demo module works correctly. On the other hand, my module always gives the same error. 🤯 I confess that I don't understand much anymore... I changed a couple of things in my code, precisely to get as close as possible to the demo module. By the way, it seems to me that I should add the vendor folder in the .gitignore ? I'm not going to stop there and keep searching for the science 😂 but any help will be welcome!
  4. Alors, débrief : J'ai testé le module de démo "democontrollertabs" avec deux versions de PrestaShop : La 1.7.5.0, la version que j'utilise actuellement avec ma boutique. ==> Même résultat qu'avec mon module, c'est-à-dire l'erreur "The controller is missing or invalid". La 1.7.7.0 bêta 2, dernière version sortie à ce jour. ==> Le module de démo fonctionne correctement. Par contre, mon module donne toujours la même erreur. 🤯 J'avoue que je n'y comprends plus grand chose... J'ai mis à jour le git, j'ai changé deux trois trucs, justement pour me rapprocher le plus possible du module de démo. D'ailleurs, il me semble que je devrais rajouter le dossier vendor dans le .gitignore ? Je ne vais pas m'arrêter là et continuer de chercher pour la science 😂 mais toute aide sera la bienvenue !
  5. Oui voilà, dans la doc c'est même censé marcher en 1.7.5 pour l'installation manuelle d'onglets 😕 J'ai fais un repository Git, voici le lien : https://github.com/Kaudaj/orderpreparation Mais peut-être que vous pouvez plutôt tester avec le module de démo dans un premier temps vu qu'il est officiel et censé fonctionner ? J'ai fais un clearcache, et regénéré le dossier vendor, toujours pareil. Les issues du projet de démo n'ont pas de rapport avec mon problème malheureusement. Merci encore une fois de prendre le temps de m'aider.
  6. La documentation m'indiquait seulement "composer dumpautoload", donc mon classmap était vide. J'ai rajouté le -a et j'ai maintenant un classmap complet dans le fichier autoload_classmap.php : <?php // autoload_classmap.php @generated by Composer $vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( 'Kaudaj\\Module\\OrderPreparation\\Controller\\Admin\\AdminOrderPreparationController' => $baseDir . '/src/Controller/Admin/AdminOrderPreparationController.php', 'Kaudaj\\Module\\OrderPreparation\\Model\\PreparationLine' => $baseDir . '/src/Model/PreparationLine.php', 'Kaudaj\\Module\\OrderPreparation\\Repository\\PreparationLineRepository' => $baseDir . '/src/Repository/PreparationLineRepository.php', ); Par contre, toujours la même erreur côté backoffice quand je clique sur l'onglet du backoffice après réinstallation du module... Aussi, mon fichier autoload_namespaces.php retourne un tableau vide : <?php // autoload_namespaces.php @generated by Composer $vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( ); Est-ce que c'est important ? EDIT : J'ai essayé d'installer le module d'exemple d'onglets de Prestashop pour la 1.7.7 (https://github.com/PrestaShop/example-modules/tree/master/democontrollertabs). J'y ai juste changé la version minimum à la 1.7.5 et j'ai généré le dossier vendor avec "composer dumpautoload -a". Résultat : même erreur qu'avec mon module. Est-ce que le problème, c'est la 1.7.5 ? Si vous ne trouvez pas de solution, je vais essayer d'installer le module avec une installation Prestashop de test sous la 1.7.7 quand j'aurai le temps, pour voir si ça vient de là.
  7. Bonjour @jikail, Merci de prendre le temps de m'aider. J'ai bien fais un dumpautoload avant d'installer mon module dans le back-office. Je viens de supprimer le vendor, et j'ai refais un dumpautoload pour être sûr : toujours la même erreur. Etant novice en Symfony, pouvez-vous m'expliquer ce que vous entendez par votre seconde question ? Voici le contenu de mon dossier vendor généré automatiquement : Dites moi si vous voulez que je vous transmette le contenu de l'un de ces fichiers.
  8. J'ai posté mon problème sur le forum international, mais il reste d'actualité... Personne qui code ses modules avec Symfony ici ? 😥
  9. Hello, I have been trying for several days to develop a module for order preparation. I am under version 1.7.5 and I code according to the new recommendations of PrestaShop for 1.7, so with Symfony. I tried to fix all my errors by myself, but I can't find the cause of this one. At the installation, my module adds a tab in the order parameters. But here's the thing, I have the following result when I click on the tab : However, I followed this documentation to the letter: https://devdocs.prestashop.com/1.7/modules/concepts/controllers/admin-controllers/ Here is my code for the tab, in the main file orderpreparation.php : private function installTab(): bool { $tabId = (int) Tab::getIdFromClassName('AdminOrderPreparation'); if (!$tabId) { $tabId = null; } $tab = new Tab($tabId); $tab->active = 1; $tab->class_name = 'AdminOrderPreparation'; //$tab->route_name = 'admin_order_preparation'; $tab->name = array(); foreach (Language::getLanguages() as $lang) { $tab->name[$lang['id_lang']] = $this->trans('Order Preparation', array(), 'Modules.Orderpreparation.Admin', $lang['locale']); } $tab->id_parent = (int) Tab::getIdFromClassName('AdminParentOrders'); $tab->module = $this->name; return (bool) $tab->save(); } private function uninstallTab() { $tabId = (int) Tab::getIdFromClassName('AdminOrderPreparation'); if (!$tabId) { return true; } $tab = new Tab($tabId); return $tab->delete(); } My controller code : declare(strict_types=1); namespace Kaudaj\Module\OrderPreparation\Controller\Admin; use Doctrine\Common\Cache\CacheProvider; use PrestaShopBundle\Controller\Admin\FrameworkBundleAdminController; use PrestaShopBundle\Security\Annotation\AdminSecurity; use Kaudaj\Module\OrderPreparation\Model\PreparationLine; use Kaudaj\Module\OrderPreparation\Repository\PreparationLineRepository; class AdminOrderPreparationController extends FrameworkBundleAdminController { private $cache; private $form_filename; /** * @var PreparationLinesRepository */ private $repository; public function __construct(CacheProvider $cache) { $this->cache = $cache; $this->repository = new PreparationLineRepository(); $this->form_filename = _PS_MODULE_DIR_ . $this->module->name . DIRECTORY_SEPARATOR . "orderpreparationform.html"; parent::__construct(); } /** * @AdminSecurity( * "is_granted('read', request.get('_legacy_controller'))", * message="You do not have permission to update this." * ) * * @return Response */ public function indexAction() { return $this->render( '@Modules/orderpreparation/views/templates/admin/orderpreparation.html.twig', array( "ajax_dl_link" => $this->context->link->getAdminLink($this->module->name) ) ); } } My routes.yml file : admin_order_preparation: path: /order-preparation methods: [GET] defaults: _controller: 'Kaudaj\Module\OrderPreparation\Controller\Admin\AdminOrderPreparationController::indexAction' And finally, my composer.json file : { "name": "kaudaj/order-preparation", "description": "Kaudaj - Order Preparation", "autoload": { "psr-4": { "Kaudaj\\Module\\OrderPreparation\\": "src/" }, "config": { "prepend-autoloader": false }, "type": "prestashop-module" } } If you need more information about the context or some code I didn't publish, feel free to ask me. Thank you in advance for your help!
  10. Bonjour, Je tente depuis plusieurs jours de développer un module pour la préparation de commande. Je suis sous la version 1.7.5 et je code selon les nouvelles recommandations de PrestaShop pour la 1.7, donc avec Symfony. J'ai essayé de régler toutes mes erreurs tout seul, mais je ne trouve pas la cause de celle-ci. A l'installation, mon module ajoute un onglet dans les paramètres de commande. Seulement voilà, j'ai le résultat suivant quand je clique sur l'onglet : Pourtant, j'ai suivi cette documentation à la lettre : https://devdocs.prestashop.com/1.7/modules/concepts/controllers/admin-controllers/ Voici mon code pour l'onglet, dans le fichier principal orderpreparation.php : private function installTab(): bool { $tabId = (int) Tab::getIdFromClassName('AdminOrderPreparation'); if (!$tabId) { $tabId = null; } $tab = new Tab($tabId); $tab->active = 1; $tab->class_name = 'AdminOrderPreparation'; //$tab->route_name = 'admin_order_preparation'; $tab->name = array(); foreach (Language::getLanguages() as $lang) { $tab->name[$lang['id_lang']] = $this->trans('Order Preparation', array(), 'Modules.Orderpreparation.Admin', $lang['locale']); } $tab->id_parent = (int) Tab::getIdFromClassName('AdminParentOrders'); $tab->module = $this->name; return (bool) $tab->save(); } private function uninstallTab() { $tabId = (int) Tab::getIdFromClassName('AdminOrderPreparation'); if (!$tabId) { return true; } $tab = new Tab($tabId); return $tab->delete(); } Le code de mon contrôleur : declare(strict_types=1); namespace Kaudaj\Module\OrderPreparation\Controller\Admin; use Doctrine\Common\Cache\CacheProvider; use PrestaShopBundle\Controller\Admin\FrameworkBundleAdminController; use PrestaShopBundle\Security\Annotation\AdminSecurity; use Kaudaj\Module\OrderPreparation\Model\PreparationLine; use Kaudaj\Module\OrderPreparation\Repository\PreparationLineRepository; class AdminOrderPreparationController extends FrameworkBundleAdminController { private $cache; private $form_filename; /** * @var PreparationLinesRepository */ private $repository; public function __construct(CacheProvider $cache) { $this->cache = $cache; $this->repository = new PreparationLineRepository(); $this->form_filename = _PS_MODULE_DIR_ . $this->module->name . DIRECTORY_SEPARATOR . "orderpreparationform.html"; parent::__construct(); } /** * @AdminSecurity( * "is_granted('read', request.get('_legacy_controller'))", * message="You do not have permission to update this." * ) * * @return Response */ public function indexAction() { return $this->render( '@Modules/orderpreparation/views/templates/admin/orderpreparation.html.twig', array( "ajax_dl_link" => $this->context->link->getAdminLink($this->module->name) ) ); } } Mon routes.yml : admin_order_preparation: path: /order-preparation methods: [GET] defaults: _controller: 'Kaudaj\Module\OrderPreparation\Controller\Admin\AdminOrderPreparationController::indexAction' Ainsi que mon composer.json : { "name": "kaudaj/order-preparation", "description": "Kaudaj - Order Preparation", "autoload": { "psr-4": { "Kaudaj\\Module\\OrderPreparation\\": "src/" }, "config": { "prepend-autoloader": false }, "type": "prestashop-module" } } Si vous avez besoin de plus d'informations sur le contexte ou de code que je n'ai pas publié, n'hésitez pas à me le demander. Merci d'avance pour votre aide !
  11. Désolé @Guillaume77, je n'avais pas vu votre réponse. J'ai laissé de côté l'importation de fichiers depuis quelques temps donc mes souvenirs ne sont plus très frais. Par contre, je suis sûr que cela marchait à l'époque avec ces modifications 🤔 ... Mais je n'ai pas précisé qu'il faut taper le nom du fichier original (donc pas le nom chiffré dans le dossier download !) comme ceci : "[nom_du_fichier].[extension]" Ou s'il y en a plusieurs, on les sépare par une virgule. Donc si on veut joindre les fichiers "datasheet.pdf" et "datasheet_bis.pdf" au produit, on choisit la colonne "url du fichier" et on entre : datasheet.pdf, datasheet_bis.pdf Encore une fois, on parle ici de fichiers joints/attachés à un produit et non pas à un fichier de produit virtuel ! J'espère qu'on parle bien de la même chose 😅 Si c'est encore d'actualité pour vous et que vous rencontrez des soucis, je reste à votre écoute !
  12. Non, je pense que vous vous trompez, j'ai déjà essayé cette méthode, sans succès. Je pense que Prestashop, comme je l'ai dis précédemment, n'implémente tout simplement pas le processus d'association fichiers/produits (dans le cas des fichiers joints). En effet, la fonction qui permet cette association n'est pas utilisée dans le code d'import (AdminImportController.php). J'ai donc codé moi-même cette fonctionnalité : A rajouter dans classes/Attachment.php, n'importe où entre deux fonctions : /** * Get attachment ID by name. * * @param string $name Attachment Name * * @return int Attachment ID */ public static function getAttachmentIDByName($name) { return (int) Db::getInstance()->getValue(' SELECT id_attachment FROM ' . _DB_PREFIX_ . 'attachment WHERE file_name = "' . $name . '"',false ); } et dans controllers/AdminImportController.php, dans la fonction productImportOne, après la ligne 1679 : "AdminImportController::arrayWalk($info, array('AdminImportController', 'fillInfo'), $product);" //Product attachments if(!empty($info['file_url'])) { $attachments = explode(",",$info['file_url']); $attachments_ids=array(); foreach($attachments as $attachment) array_push($attachments_ids,Attachment::getAttachmentIDByName($attachment)); Attachment::attachToProduct($info['id'],$attachments_ids); } (on peut mettre le code plus loin mais attention de ne pas le mettre après le product->add(), sinon c'est trop tard, le produit a été ajouté !) Voilà, et avec ça, pour moi ça marche niquel ! A condition bien sûr d'avoir ajouté le fichier dans le backoffice dans la catégorie "Fichiers" au préalable ! Merci quand même de m'avoir répondu 😀 Prestashop'ment vôtre.
  13. Bonsoir, Merci de prendre le temps de m'aider. Il me semble que c'est ce que j'ai fais... les fichiers sont localisés dans le dossier download, j'ai donc écrit l'url exactement comme pour les images mais avec le dossier download. Par contre, les noms des fichiers sont chiffrés, mais je ne peux pas écrire le chiffrage dans l'url (ça n'a pas de sens pour le excel). Mais je pense que j'ai trouvé le problème : la colonne URL du fichier est, je pense, destinée à l'url du fichier du produit virtuel (si la ligne du produit que j'importe ajoute un produit de type virtuel). Donc, rien à voir avec ce que je veux faire. Je pense que je vais partir sur un peu de codage dans le AdminImportController, puisque ça a l'air d'être encore une fonction non gérée par Prestashop...
  14. Bonjour chers marchands et amis codeurs, J'ai un problème avec l'import de fichiers attachés aux produits. En effet, j'ai ajouté plusieurs fichiers pdf avec le backoffice qui se trouvent maintenant dans le dossier download à la racine de mon site. Mais je ne parviens pas à les associer automatiquement avec mes produits lors de l'import de ces derniers. J'ai bien vu qu'il y avait une colonne "URL du fichier", j'y ai donc rentré l'URL "https://nom_de_ma_boutique/download/nom_du_fichier" mais cela ne fonctionne pas. J'ai compris que Prestashop chiffrait le nom du fichier mais il faut bien que j'utilise le vrai nom du fichier pour l'importation... Comment faire ? Est-ce que cette colonne n'est pas fonctionnelle ou est-ce que je m'y prends mal ? Pour info, j'utilise la dernière version de Prestashop (1.7.5) Merci d'avance de votre aide ! PS : Si vous souhaitez avoir plus d'informations sur ma boutique, n'hésitez pas à me le faire savoir, j'ai peut-être été trop concis...
  15. Bonjour, J'ai commencé à configurer mon site il y a un mois sur Prestashop et j'ai un problème très embêtant en back office : la fonction mail() de php ne semble pas fonctionner ! En effet, j'ai fais de nombreux tests d'inscription et de commande et aucun mail reçu que ce soit du côté du client ou de mon côté, sur notre adresse professionnelle. Pourtant, l'adresse mail fonctionne correctement et je n'ai aucun problème pour envoyer ou recevoir des mails en dehors de Prestashop. Seul l'envoi automatique de Prestashop ne fonctionne pas. J'ai constaté un étrange message d'erreur sur les logs de mail (/logs/mail.log) qui dit : "EE mail size limit exceeded" J'ai donc essayé d'envoyer les mails en version texte seulement pour réduire la taille du mail mais rien n'y fait... J'ai également testé d'utiliser les paramètres SMTP et ça coince aussi (enfaite c'est encore pire, le mail test ne marche même plus, j'obtiens : "Connection could not be established with host smtp.ionos.fr [Connection timed out #110]"). J'ai aussi installé le module "Alertes e-mail" puisque beaucoup disaient que l'erreur venait de là, mais toujours pas d'e-mails envoyés. Je précise que mon hébergeur est 1&1 IONOS, avec qui je n'ai eu aucun soucis jusqu'à maintenant. Je m'en remets donc à vous. En vous remerciant par avance de votre aide, Tom Combet.
×
×
  • Create New...

Important Information

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