Luisejo Posted June 23, 2017 Share Posted June 23, 2017 (edited) Hola, buenos días. En esta ocasión estoy intentando añadir un nuevo script .js al módulo que he creado, pero me da error cuando añado la siguiente línea: $this->context->controller->addJS($this->_path.'views/js/rekire.js'); Por supuesto la ruta existe. Cuando pongo la llamada en el constructor me da un error, en cambio, cuando pongo la llamada en $this->hookdisplayHeader() tal y como se indica en este post: https://www.prestashop.com/forums/topic/262716-a%C3%B1adir-ficheros-javascript-a-mi-modulo-solucionado/ no hace nada, miro el código fuente y no está añadido el enlace .js ¿Qué estoy haciendo mal? Edited June 23, 2017 by Luisejo (see edit history) Link to comment Share on other sites More sharing options...
nadie Posted June 23, 2017 Share Posted June 23, 2017 Revisa esta guía/documento: http://victor-rodenas.com/anadir-javascript-y-css-en-los-modulos-en-prestashop-1-7/ para Prestashop 1.7 Y asegurate de que aparezca el módulo instalado en el hook displayHeader (mira ver si en la pestaña diseño -> posiciones aparece instalado bien en esa posición. independientemente de las posiciones donde los hayas instalado). Link to comment Share on other sites More sharing options...
Luisejo Posted June 23, 2017 Author Share Posted June 23, 2017 Hola Nadie, una vez más agradecerte tus rápidas respuestas, veamos que estoy haciendo mal ya que no me carga el .js Me explico... he añadido en la función install de mi módulo de front-end lo siguiente (también lo he probado poniéndolo dentro del constructor ya que mi intención no es volver a instalar el módulo): // Registramos el hook dentro de las cabeceras. $this->registerHook('displayHeader'); Seguidamente he creado este método (mi módulo se llama rekire_busqueda_avanzada): public function hookdisplayHeader($params) { $this->context->controller->registerJavascript('rekire_busqueda_avanzada', 'modules/'.$this->name.'/js/rekire.js',[ 'position' => 'head','priority' => 150]); } ¿Me puedes guiar algo más? Gracias. Link to comment Share on other sites More sharing options...
nadie Posted June 23, 2017 Share Posted June 23, 2017 (edited) // Registramos el hook dentro de las cabeceras. $this->registerHook('displayHeader'); Seguidamente he creado este método (mi módulo se llama rekire_busqueda_avanzada): public function hookdisplayHeader($params) { $this->context->controller->registerJavascript('rekire_busqueda_avanzada', 'modules/'.$this->name.'/js/rekire.js',[ 'position' => 'head','priority' => 150]); } ¿Me puedes guiar algo más? Gracias. Si tu fichero *.js que has guardado en el directorio "js" del módulo se llama "rekire.js". Deja la instrucción así: $this->context->controller->registerJavascript('modules-rekire', 'modules/'.$this->name.'/js/rekire.js',['position' => 'head', 'priority' => 150]); Dejalo dentro de la función displayHeader, y mira ver si te carga ahora el JS, teniendo registrado la instrucción asi. Edited June 23, 2017 by nadie (see edit history) Link to comment Share on other sites More sharing options...
Luisejo Posted June 23, 2017 Author Share Posted June 23, 2017 Vaya, me sabe mal, pero sigo sin conseguir incluir el .js, desde la .tpl lo incluyo sin problemas con el método tradicional, pero claro... quiero hacer las cosas bien e incluirlo desde el controlador / clase. Ahora he hecho lo siguiente: He puesto "D" mayúscula, por si tuviera algo que ver, y he puesto "modules-rekire", quedando así: public function hookDisplayHeader($params) { $this->context->controller->registerJavascript('modules-rekire', 'modules/'.$this->name.'/js/rekire.js',[ 'position' => 'head','priority' => 150]); } Lo extraño es que si añado un echo o un die dentro de esta función hookDisplayHeader, no me lo ejecuta. Para que sea ejecutada tengo añadido dentro de public function install la siguiente línea: // Registramos el hook dentro de las cabeceras. $this->registerHook('displayHeader'); También he probado a añadirlo en el constructor, pero el resultado es el mismo. ¿Cómo puedo comprobar que se está llamando correctamente? Link to comment Share on other sites More sharing options...
nadie Posted June 23, 2017 Share Posted June 23, 2017 // Registramos el hook dentro de las cabeceras. $this->registerHook('displayHeader'); En la función "install" entre otras cosillas, tu puedes indicas que hooks quieres que se registren a instalarse el módulo, para no tenerlo que hacerlo manualmente desde diseño -> posiciones de los módulos -> insertar hook / trasladar modulo. Un ejemplo de función install: public function install() { return (parent::install() && $this->registerHook('xxxxx') ....... ...... ..... && $this->registerHook('displayHeader') ); } Un ejemplo de carga de los js en el displayHeader public function hookDisplayHeader($params) { $this->context->controller->registerJavascript('modules-rekire', 'modules/'.$this->name.'/js/rekire.js',['position' => 'head', 'priority' => 150]); } Esto funciona... (al mismo tiempo que te he escrito, lo he vuelto a probar en un modulo limpio de mi pc por si habia cambiado de aquí a hace unos meses y sigue funcionando) Link to comment Share on other sites More sharing options...
nadie Posted June 23, 2017 Share Posted June 23, 2017 (edited) ¿Cómo puedo comprobar que se está llamando correctamente? ¿Si haces un return "Hola mundo", dentro de public function hookDisplayHeader($params) ? ¿Te saca algo el hola mundo? ¿En el codigo fuente de la web (inspeccionar elemento), has visto si aparece la libreria cargada? Edited June 23, 2017 by nadie (see edit history) Link to comment Share on other sites More sharing options...
Luisejo Posted June 23, 2017 Author Share Posted June 23, 2017 Todo claro Nadie, tuve que desinstalar el módulo y volver a instalarlo. Todo perfecto ahora. Ahora entiendo porqué te dieron el premio de prestashop. Gracias amigo. Link to comment Share on other sites More sharing options...
nadie Posted June 23, 2017 Share Posted June 23, 2017 (edited) Todo claro Nadie, tuve que desinstalar el módulo y volver a instalarlo. Todo perfecto ahora. Ahora entiendo porqué te dieron el premio de prestashop. Gracias amigo. Un placer ayudarte ) Cuando añades en la función "install" que el módulo se registra en el hook en cuestión, el módulo no queda registrado en ese hook automaticamente, por lo que no iba aparecer de golpe a menos que desinstalaras el módulo y lo volvieras a instalar / o reiniciaras la instalación del módulo para que se ejecute la función install del módulo, entonces ya queda registrado. La otra opción sin usar la función install, es copiar el hook manualmente en la pestaña Diseño -> Posiciones de los módulos donde tienes un botón llamado "Insertar un módulo/hook (al botón le han cambiado varias veces las traducciones xD, lo digo por si lo ves con distinto nombre) Adjunto Captura: PD: jajaa, lo de ese premio "simbólico" fue hace años (esos años eran una locura xD), y cierto es que este año solo me he pasado algunos meses, porque ya había dejado la comunidad como comente en mi blog hace unos años, y lo cierto es que vuelvo a desaparecer de nuevo en breve (aunque esta vez sin aviso), al fin y al cabo la vida da muchas vueltas, unos desaparecen, otros aparecen, etc.. Saludos, Edited June 23, 2017 by nadie (see edit history) 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