Jump to content

Añadir un script .js a mi módulo PS 1.7 [SOLUCIONADO]


Luisejo

Recommended Posts

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 by Luisejo (see edit history)
Link to comment
Share on other sites

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

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

// 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 by nadie (see edit history)
Link to comment
Share on other sites

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

// 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

 

¿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 by nadie (see edit history)
Link to comment
Share on other sites

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:

 

pokma-1024x106.png

 

 

 

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 by nadie (see edit history)
Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...