Cambiar la versión jQuery en Prestashop 1.5

En realidad esto vale para cambiar o añadir cualquier archivo .js a la cabecera de las páginas en Prestashop.

La clase FrontController.php es la que se encarga de insertar estos archivos en el head de las páginas y en Prestashop 1.5 está en la carpeta /classes/controller/FrontController.php.

El método que se encarga de importar los archivos .js y .css es el setMedia, que os muestro a continuación:

[codesyntax lang=»php»]

	public function setMedia()
	{
		// if website is accessed by mobile device
		// @see FrontControllerCore::setMobileMedia()
		if ($this->context->getMobileDevice() != false)
		{
			$this->setMobileMedia();
			return true;
		}
		$this->addCSS(_THEME_CSS_DIR_.'global.css', 'all');
		$this->addjquery();
		$this->addjqueryPlugin('easing');
		$this->addJS(_PS_JS_DIR_.'tools.js');

		if (Tools::isSubmit('live_edit') && Tools::getValue('ad') && Tools::getAdminToken('AdminModulesPositions'.(int)Tab::getIdFromClassName('AdminModulesPositions').(int)Tools::getValue('id_employee')))
		{
			$this->addJqueryUI('ui.sortable');
			$this->addjqueryPlugin('fancybox');
			$this->addJS(_PS_JS_DIR_.'hookLiveEdit.js');
			$this->addCSS(_PS_CSS_DIR_.'jquery.fancybox-1.3.4.css', 'all'); // @TODO
		}
		if ($this->context->language->is_rtl)
			$this->addCSS(_THEME_CSS_DIR_.'rtl.css');

		// Execute Hook FrontController SetMedia
		Hook::exec('actionFrontControllerSetMedia', array());
	}

[/codesyntax]

Si queremos modificar algo, lo más recomendable es NO modificar este archivo, sino sobreescribirlo (Override). Para ello tenemos el archivo /override/classes/controller/FrontController.php, em el que podemos sobreescribir el método setMedia:

[codesyntax lang=»php»]

class FrontController extends FrontControllerCore
{

    public function setMedia()
    {
            parent::setMedia();
            Tools::addJS(_THEME_JS_DIR_.'mi_script.js');
    }
}

[/codesyntax]

La primera línea llama al método de la clase padre que es la que he puesto antes y la segunda línea añade al head el archivo mi_script.js que deberá estar colocado enl la carpeta js del tema.

Si lo que queremos en cambiar la versión de jQuery, podemos crear un método setMedia similar al padre y añadir sólo las líneas que nos interesen:

[codesyntax lang=»php»]

	public function setMedia()
	{
		// if website is accessed by mobile device
		// @see FrontControllerCore::setMobileMedia()
		if ($this->context->getMobileDevice() != false)
		{
			$this->setMobileMedia();
			return true;
		}
		$this->addCSS(_THEME_CSS_DIR_.'global.css', 'all');
		$this->addjquery();
		$this->addjqueryPlugin('easing');
		$this->addJS(_PS_JS_DIR_.'tools.js');

		if (Tools::isSubmit('live_edit') && Tools::getValue('ad') && Tools::getAdminToken('AdminModulesPositions'.(int)Tab::getIdFromClassName('AdminModulesPositions').(int)Tools::getValue('id_employee')))
		{
			$this->addJqueryUI('ui.sortable');
			$this->addjqueryPlugin('fancybox');
			$this->addJS(_PS_JS_DIR_.'hookLiveEdit.js');
			$this->addCSS(_PS_CSS_DIR_.'jquery.fancybox-1.3.4.css', 'all'); // @TODO
		}
		if ($this->context->language->is_rtl)
			$this->addCSS(_THEME_CSS_DIR_.'rtl.css');

		// Execute Hook FrontController SetMedia
		Hook::exec('actionFrontControllerSetMedia', array());
	}

[/codesyntax]

Comments