[1.6.0.5]+ Reference error: $ is undefined dans le BackOffice
-
Lorsqu'un module injecte un js dépendant de jQuery au travers de $this->context-controller->addJS() celui-ci est chargé dans la page bien avant que les dépendances jQuery existent.
Le bug est lié à l'AdminController qui appelle le hookBackOfficeHeader avant d'avoir appelé $this->setMedia
Pour corriger, changer dans classes/controller/Controller.php
public function init() { if (_PS_MODE_DEV_ && $this->controller_type == 'admin') { set_error_handler(array(__CLASS__, 'myErrorHandler')); } if (!defined('_PS_BASE_URL_')) { define('_PS_BASE_URL_', Tools::getShopDomain(true)); } if (!defined('_PS_BASE_URL_SSL_')) { define('_PS_BASE_URL_SSL_', Tools::getShopDomainSsl(true)); } }par
public function init() { if (_PS_MODE_DEV_ && $this->controller_type == 'admin') { set_error_handler(array(__CLASS__, 'myErrorHandler')); } if (!defined('_PS_BASE_URL_')) { define('_PS_BASE_URL_', Tools::getShopDomain(true)); } if (!defined('_PS_BASE_URL_SSL_')) { define('_PS_BASE_URL_SSL_', Tools::getShopDomainSsl(true)); } if ($this instanceof AdminController) { $this->setMedia(); } } -
Le code à corriger a été changé afin de ne pas interférer avec certains contrôleurs (Category avec les scènes activés par exemple), qui implémentent du code dans setMedia() pour lequel init() doit avoir été exécuté au préalable (Product::initPricesComputation())