Jump to content

Bruno G

Members
  • Posts

    21
  • Joined

  • Last visited

Everything posted by Bruno G

  1. Hi, When I create a page in CMS, all the "data-target", "data-toggle", "aria-expanded".... attributes from Bootstrap are removed and not even saved in database. Since I don't want to directly save my content in database, I wanted to know if there is a way to disable this annoying plugin that modify my HTML without asking me for permission. I believe its TinyMCE but not sure about it. The tinyMCE js file is minified and I don't know how to configure it, and all the answers I have found about it are too old. Thank you Edit : It works by disabling "HTMLPurifier" libray in general settings of the shop, but does it disable it only for back-office or also in front office ?
  2. I have the same problem in PS 1.7.6, and i can't find how to do it from the database (ps_product_attribute.default_on doesn't change anything) EDIT : It works, and to make it work, you have to set it in tables fields : ps_product.cache_default_attribute ps_product_shop.cache_default_attribute ps_product_attribute.default_on ps_product_attribute_shop.default_on
  3. I have created a module in Prestashop 1.7.6 which update products + product attribute stocks by 2 ways : In the back office (the settings of the module) it works perfectly From a cron by the server every night using a declared service called by this kind of command line : php /var/www/MyPrestashopSite/bin/console mymodule:update updateProducts --no-debug For many other services that I have created and I use it works perfectly, but for this one, I use the "new" stock management in Prestashop, and when I use the \StockAvailable methods, it always call the Context and trigger an error of StockManagementRepository line 130 : 'Determining the active language requires a contextual employee instance.' This error prevent my module from updating product + product attributes stock out of Context. In my code I tried to use the following methods, to get and modify the stock in the cleanest possible way : \StockAvailable::getQuantityAvailableByProduct(...) \StockAvailable::setQuantity(...) \StockAvailable::updateQuantity(...) Note that I force the $shopId to 1 to avoid getting the Context as much as possible. Do you know how to update a stock in a clean way (not just modifying the stocks, product attributes and products tables) in Prestashop from a cron (out of the context and without employee connexion), and without calling the Prestashop webservice ? Thank you.
  4. Ouais du coup c'est ce que j'ai fait.. Même l'utilisation du ajaxDie est marquée comme deprecated ça craint. Une idée de date/version de l'implémentation de Symfony sur le front à tout hasard ? Merci pour ta réponse en tout cas
  5. Bonjour, Sur la doc de Prestashop concernant les front controllers de module je suis assez perplexe : https://devdocs.prestashop.com/1.7/modules/concepts/controllers/front-controllers/ Il est expliqué qu'on doit créer une classe "exemple.php" contenant une classe dont le nom est charté NomDuModuleNomDuFIchierModuleFrontController. Ce fichier sera situé dans le dossier du module dans controllers/front et non sans src/Controllers par exemple. Rien qu'à cet endroit, je ne comprends pas pourquoi le fichier n'a pas le nom de la classe, pourquoi il n'est pas dans un dossier qui respecte les règles PSR et je me demande comment va-t'on faire pour gérer l'autoloader ! Ce contrôleur créé doit utiliser les méthodes de la classe qu'il étend : ModuleFrontController soit initContent pour get et postProcess pour POST et l'adresse serait générée par la méthode Context::getContext()->link->getModuleLink(nomDuModule, 'nomDuFichier'); Quid du fichier config/routes.yml ? Comment ajouter de nouvelles méthodes sensées juste renvoyer une JsonResponse pour un appel ajax tout simple par exemple. Je suis assez perplexe et cette page de doc pourtant actuelle me semble très archaïque et à l'opposé de l'intégration de Symfony dans Prestashop alors qu'un front controller de module me semble assez utilisé pour les développeurs de modules.... Merci à vous d'éclairer ma lanterne au cas où il y aurait une nouvelle manière de faire comme pour les contrôleurs admin https://devdocs.prestashop.com/1.7/modules/concepts/controllers/admin-controllers/
  6. I call some methods of my modules from cron with the implementation of Symfony Commands. It works perfectly, but sometimes, when I create a user for instance, and a module like PSrecaptcha has a hook with this kind of context call, it triggers a notice which stops the execution of my script. /** * HookActionObjectCustomerAddBefore * Magic Hook */ public function hookActionObjectCustomerAddBefore() { if (!$this->isModuleActive() || Configuration::get('RECAPTCHA_REGISTRATIONFORM') == '0') { return; } if ($this->context->controller->controller_type == 'front') { if (!$this->verifyRecaptcha()) { $params['create_account'] = 1; $params['captchaErrorMsg'] = $this->l('Invalid captcha challenge, please retry.'); Tools::redirect($this->context->link->getPageLink( 'authentication', true, null, $params, true )); } } } The following notice is triggered obviously... : Notice: Trying to get property 'controller_type' of non-object Of course, since this is called in command line there is no context. Do you have an elegant way to solve this, for example : Modifying the Psrecaptcha code and checks if context exists before the call to the context (is it safe anymore ?). The problem with this solution is that I'm not responsible of the code of every module that hooks themselves everywhere and call Context : I can't modify them all. Find a way to continue the execution of the command even if it triggers a notice like with " --no-debug" option, but will it hide all errors ? Find a way to bypass all context calling or bypass all hooks when the script is launched from command line. I work with PS 1.7.6.3 Thank you
  7. For 1.7 yes but I don't know for 1.6... I don't think so because they started working with Symfony with 1.7
  8. I suggest that you take a look at src/PrestaShopBundle/Resources/views/Admin/Product/CatalogPage/Forms/form_products.html.twig which includes src/PrestaShopBundle/Resources/views/Admin/Product/CatalogPage/Lists/products_table.html.twig To create the content of the table, src/PrestaShopBundle/Controller/Admin/ProductController creates a list with the method listAction givent to the template src/PrestaShopBundle/Resources/views/Admin/Product/CatalogPage/Lists/list.html.twig good day
  9. I have a issue I am stuck on for 3 days now. I created a controller in a module (modulename/src/Controller) with the new Symfony system : class TestController extends FrameworkBundleAdminController { public static function getTest(){ return new JsonResponse("test); } } And then declared the route in routes.yml as following: getTest: path: mymodule/gettest methods: [GET] defaults: _controller: 'Mymodule\Controller\TestController::getTest' When I call the URI adminfolder/modules/mymodule/gettest everything works fine but ONLY if i have the token of the module list page "http://...../adminfolder/index.php/improve/modules/manage" The aim of this controller is to send a JSON response called by AJAX. The thing is I cant NEVER find how to generate the token. I have tried Tools::getAdminTokenLite('whatever'); with every possible thing (AdminModules, AdminModulesManage, ModuleController, etc etc etc) and I never get the same token as I see in the admin module list page and I can't find how to get it even from my back office admin module. The token itself doesn't even lpooks the same : I get tokens like ..8ee59a385ba5225cc52b.. with the Tools::getAdminTokenLite() method and the token in http://...../adminfolder/index.php/improve/modules/manage looks like LettERSOnLYWithCaps-a_CapsLowAnd1234_CAPSAND123. The only place I can find this token is in $_SESSION as a csrf_token, but as it appears in links of admin menu tab (when you click on "modules" tab), its taken from somewhere, but where ? Could you tell me how to get this token that I can use it to reach my endpoint from ajax please ?
  10. The problem is that you can get the Tools::getValue('module_name') only if you submitted your module configuration form and this is stupid that Prestashop include it in the "example module". I recommend that you use : if (Tools::getValue('configure') == $this->name) { $this->context->controller->addJS($this->_path.'views/js/back.js'); $this->context->controller->addCSS($this->_path.'views/css/back.css'); }
  11. You also can go in your template file themes/YOURTHEME/modules/ps_customeraccountlinks/ps_customeraccountlinks.tpl If you want to remove an item by key, for example, credit slips which is id 3 : {foreach from=$my_account_urls item=my_account_url key=k} {if $k !== 3} <li> <a href="{$my_account_url.url}" title="{$my_account_url.title}" rel="nofollow"> {$my_account_url.title} </a> </li> {/if} {/foreach} you can also remove by title of link by doing {if $my_account_url.title !== "theTitleToRemove"}
  12. Bonjour et merci de ta réponse ! Au final je l'ai fait avec le fichier install.sql du module (appelé lors de l'installation) : $sql[] = 'INSERT IGNORE INTO `' . _DB_PREFIX_ . 'hook` (`id_hook`, `name`, `title`, `description`, `position`) VALUES (NULL, \'actionSubmitCustomerAddressForm\', \'When a customer update or insert an address\', \'Triggered after the validation of a customer address form\', \'1\')'; Au final ça fonctionne bien mais j'ai l'impression que ta méthode est plus propre...
  13. Bonjour, Je cherche à trigger un hook lorsqu'un customer a ajouté une nouvelle adresse ou modifié une adresse existante APRES validation de Prestashop. Actuellement, dans la liste des hooks, nous avons actionValidateCustomerAddressForm. Selon la documentation : Lorsque nous allons voir dans cette classe, ce hook est effectivement placé AVANT validation par Prestashop car il permet de modifier la validation elle-même : if (($hookReturn = Hook::exec('actionValidateCustomerAddressForm', array('form' => $this))) !== '') { $is_valid &= (bool) $hookReturn; } Néanmoins, il existe un autre hook dans cette classe qui correspond exactement à ce que je souhaite dans la méthode submit() : Hook::exec('actionSubmitCustomerAddressForm', array('address' => &$address)); Je ne trouve ce hook nulle part dans la liste des hooks, ni dans la base de données (dans les tables des hooks). Comment m'en servir ? Merci à vous
  14. J'ai le même problème : même en copiant le thème "Classic" fourni par Prestashop, cette erreur apparait lorsque j'essaie de l'installer. Pareil avec le "Starter Theme" pour les développeurs qui ne contient pas de CSS ou de JS... Edit : il suffit de mettre directement le theme sur le serveur sans passer par l'interface de Prestashop et ça marche...
  15. Bonjour, j'aimerai faire appel aux méthodes statiques des classes d'un module (que j'ai développé et pour lesquelles j'utilise un espace de nom détaillé dans le composer.json) à partir d'un autre module. Pour ce faire je fais bien use NomDeLespaceDeNomDuModule\LaClasseAUtiliser; Puisque visiblement Prestashop ne trouve pas l'espace de nom du module cible (alors que cela marche très bien de manière interne au module) j'essaie de rendre accessibles ces classes dans des méthodes publiques de ma classe NomDuModule. Ainsi, il serait possible de faire un new NomDuModule(), puis de faire appel à une méthode nomDuModule->maMéthode() qui retourne ce que la classe interne au module aurait retourné. Hélas, Prestashop nous force à implémenter la classe NomDuModule dans le fichier nomdumodule.php, ce qui n'est pas respectueux des règles de nommage des classes pour l'autoloader qui, pour un new NomDuModule () cherche à inclure un fichier appelé NomDuModule .php et non nomdumodule.php et cela génère une erreur : (1/1) RuntimeException Case mismatch between class and real file names: "NomDuModule .php" vs "nomdumodule.php". Source : https://devdocs.prestashop.com/1.7/modules/creation/module-file-structure/ Si j'essaye de renommer correctement le fichier de la classe principale du module, cela ne fonctionne pas non plus car le module ne veut plus s'installer (il faut absolument que le nom du fichier soit en minuscule). Je sais qu'il est possible de passer outre l'autoloader en faisant un vieux include_once(), require_once() etc... mais le but ici est d'essayer de respecter un minimum les bonnes pratiques et de ne pas coder comme un chien, donc si quelqu'un a une autre solution que celle-ci je suis preneur . Merci à vous P.S. : notez que j'ai modifié le nom du module par nomdumodule mais vous vous en seriez douté.
  16. Bonjour, Je suis également intéressé par la solution à ce problème : j'essaie de consommer le webservice Prestashop via SalesForce et effectivement, avec la première URL (comme donnée dans la doc Prestashop) cela ne fonctionne pas, alors qu'avec la seconde URL, cela fonctionne. Merci
  17. Well, my problem was totally different : I had a full partition and the file where hosts are listed was swapped and broken (in a debian server). I had to remove stuff in partition, and re-generate this file where hosts are listed (I dont remember the name). This was not a Prestashop error at all.
  18. Hi, I would like to change the template of the invoice depending on the payment method : I have 2 payment method : one classic (CB) and one for later (1 month, and customer has to call me). For the second payment method, I would like to send a different invoice (from another template that I have created) but just a quotation because its not paid. I can't configure a different template for each payment method in the back-office nor in the payment module add-on. Where is it possible to do it please ?
  19. You just have to remove the "Gamification" module which slows the back-office. You can also modify classes/Tools.php and set line 3395 from true to protected static $is_addons_up = false;
  20. I had the same problem and I fixed it with following actions : -Set php.ini timeout to more than 30s -Modify classes/Tools.php line 3395 -> protected static $is_addons_up = false; instead of true -Now you can connect to your back-office, you can disable gamification module which slows incredibly the back-office
  21. I have exactly the same problem for all Prestashop websites of the same server. It suddenly happened without modifying any configuration anywhere... Does someone have a solution ?
  22. I don't know how you can override the prepareProductForTemplate method since its private (I.E. can't be called by a parent or a child class). The Prestashop override is made by extending core classes (here ProductListingFrontController extends ProductListingFrontControllerCore) which means that you cant override private methods. The solution would be to also override the method prepareMultipleProductsForTemplate which calls this method and is protected... IN the code : abstract class ProductListingFrontController extends ProductListingFrontControllerCore { protected function prepareProductForTemplateWithCombinations(array $rawProduct) { ... } protected function prepareMultipleProductsForTemplate(array $products) { return array_map(array($this, 'prepareProductForTemplateWithCombinations'), $products); } }
×
×
  • Create New...

Important Information

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