Mathieu Posted May 17, 2018 Share Posted May 17, 2018 Bonjour ! J'ai un problème étrange avec un module. Il met à jour la disponibilité produit via un champ dans l'admin. Le hook est bien installé : public function install() { if (parent::install() == false || !$this->registerHook('header') || !$this->registerHook('backOfficeHeader') || !$this->registerHook('displayAdminProductsExtra') || !$this->registerHook('ActionProductUpdate') ) return false; if (file_exists(dirname(__FILE__).'/sql/install.php')) require_once(dirname(__FILE__).'/sql/install.php'); if(!$this->adminInstall()) return false; return true; } Dans la base, j'ai bien la ligne correspondant au hook et au plugin (13 pour le hool si j'ai bien suivi ? ). Sauf que, la fonction hookActionProductUpdate n'est visiblement pas utilisée : public function hookActionProductUpdate($params) { error_log("TEST LANCEMENT"); require_once(_PS_MODULE_DIR_."/productsavailability/classes/ProductsAvailabilityModel.php"); require_once(_PS_MODULE_DIR_."/productsavailability/controllers/admin/AdminProductsAvailabilityController.php"); $ModuleController = new AdminProductsAvailabilityController(); $ModuleController->update_availability_text(); return true; } Rien dans les logs. J'ai tenté dans mon modèle d'afficher des infos : <?php if (!defined('_PS_VERSION_')) exit; class ProductsAvailabilityModel extends ObjectModel { public $id; public $context; public static $definition = array( 'table' => 'product_availability', 'primary' => 'id_availability', 'fields' => array( 'id_availability' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true), 'id_lang' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true), 'name' => array('type' => self::TYPE_STRING, 'validate' => 'isString', 'required' => true, 'size' => 255), 'niveau' => array('type' => self::TYPE_INT, 'validate' => 'isString'), 'replacement' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool') ) ); public function __construct() { $product = new Product((int)Tools::getValue('id_product')); $this->context = Context::getContext(); } public function getAvailabilityTexts() { error_log('test2'); return Db::getInstance()->ExecuteS('SELECT * FROM `'._DB_PREFIX_.'product_availability`'); } public static function getAvailabilityName($id_availability) { error_log("RN1"); if (!(int)$id_availability) return false; else { $resultat = Db::getInstance()->getRow('SELECT name FROM `'._DB_PREFIX_.'product_availability` WHERE id_availability='.$id_availability); return $resultat['name']; } } public function updateAvailabilityText() { error_log("TESTTEST"); $product = new Product((int)Tools::getValue('id_product')); $values = explode('-',Tools::getValue('text_in_stock')); $product->id_availability = $values[0]; $product->available_now = $this->getAvailabilityName($product->id_availability); $product->available_later = $this->getAvailabilityName($product->id_availability); $product->update(); return $this->getAvailabilityName(Tools::getValue('text_in_stock')); } protected function l($string, $class = 'AdminTab', $addslashes = false, $htmlentities = true) { // if the class is extended by a module, use modules/[module_name]/xx.php lang file $currentClass = get_class($this); if (Module::getModuleNameFromClass($currentClass)) return Translate::getModuleTranslation(Module::$classInModule[$currentClass], $string, $currentClass); return Translate::getAdminTranslation($string, get_class($this), $addslashes, $htmlentities); } }; Il n'y a que getAvailabilityTexts qui me donne un résultat. Le reste non. Je tourne en rond, j'ai beau tester des choses impossible de trouver. Si vous avez une piste je suis preneur !! Merci d'avance Link to comment Share on other sites More sharing options...
coeos.pro Posted May 17, 2018 Share Posted May 17, 2018 1- tu mets !$this->registerHook('ActionProductUpdate') as essayé avec !$this->registerHook('actionProductUpdate') 2- le module s'est bien installé ? aucun message d'erreur ? essaye peut être de le réinitialiser 3- as tu essayé de greffer le module dans la configuration du module ? 4- je viens de tester sur 1731 et le hook actionProductUpdate est bien lancé avec comme arguments : Array ( [id_product] => 19 ) 5- si tu fais un simple public function hookActionProductUpdate($params) { Configuration::updateValue('xxx', 1); } tu ne retrouves pas xxx dans la table ps_configuration ? 6- pour finir en beauté, tu appelles la fonction update_availability_text alors que son nom est updateAvailabilityText Link to comment Share on other sites More sharing options...
Mathieu Posted May 17, 2018 Author Share Posted May 17, 2018 Merci pour ta réponse @coeos.pro ! Alors : 1/ J'ai modifié ça dans le code mais pas de changement 2/ C'est un site qu'un autre dev a essayé de passer de 1.5 à 1.6. Quelques problèmes donc je prends la suite. Je peux essayer de desinstaller/reinstaller mais j'ai peur de perdre les données non ? 3/ Même chose que plus haut, les produits sont déjà associés à des dispos (ça fonctionnait en 1.5 visiblement) 4/ Je ne sais pas quoi répondre 5/ La fonction hookActionProductUpdate n'est pas lancée du tout, quoi que je mette dedans. 6/ Cette fonction vient de mon AdminProductsAvailabilityController : class AdminProductsAvailabilityController extends ModuleAdminController { protected $model; public function __construct() { $this->model = new ProductsAvailabilityModel(); if (!Tools::getValue('id_product')) $this->multishop_context_group = false; } public function load_availability_text() { error_log('demo2'); return($this->model->getAvailabilityTexts()); } public function update_availability_text() { error_log('demo'); return($this->model->updateAvailabilityText()); } } Je rame Link to comment Share on other sites More sharing options...
Mathieu Posted May 17, 2018 Author Share Posted May 17, 2018 (edited) Pour info ça a bien l'air greffé. J'ai supprimé l'accroche et je l'ai remise mais aucun résultat. Je deviens fou ! Et quand j'essaye de réinitialiser le module (ou desinstaller), j'ai cette erreur : [PrestaShop] Fatal error in module file :/home/www/migration.point2vente.com/htdocs/classes/module/Module.php(2943) : eval()'d code: require_once(): Failed opening required 'kses.php' (include_path='/home/www/migration.point2vente.com/htdocs/tools/htmlpurifier/standalone:.:/usr/share/php:/usr/share/pear') Edited May 17, 2018 by Mathieu (see edit history) Link to comment Share on other sites More sharing options...
Mathieu Posted May 17, 2018 Author Share Posted May 17, 2018 Du coup, le problème venait bien du hook. Il n'existait tout simplement pas dans le controller par défaut ... Du coup j'ai fait un override en rajoutant le hook à la fonction d'update. Merci pour ton aide en tout cas ! 1 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