[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())