Jump to content

Crear un hook para insertar módulos en "Posiciones".


Recommended Posts

Buenos días,

Estoy intentando configurar un "hook" para poder meterlo en cualquier sitio de la plantilla, y poner aquí módulos mediante "Diseño"-> "Posiciones". En Prestashop 1.7.6

He seguido un tutorial de Víctor Ródenas, pero no consigo hacerlo :(

https://victor-rodenas.com/crear-hooks-en-prestashop/#Crear_hook_en_Prestashop_17

Me lia un poco el tutorial. No se si me falta algun paso para la versión 1.7 que también está en la 1.6, o que...

Un saludo.

Edited by jordicastalla (see edit history)
Link to comment
Share on other sites

He instalado el módulo para crear Hooks (Hooks Manager)

He creado el Hook (para reviews de Revi) .

He puesto el siguiente codigo en el "product.tpl".
 

  <section id="reviewsRevi">

   <h1> REVIEWS REVI </h1>

    {hook h='reviewsReviProductos'}

    </section>

 

El problema es que no veo la forma de que aparezca este hook en "Diseño" -> "Posiciones", para poder agregar los módulos que quiera 😅😅

Una vez aparezca en Posiciones, yo creo que funcionará a la perfección.

Se puede hacer algo así?

 

Link to comment
Share on other sites

Los hooks vacíos no aparecen en "Diseño -> Posiciones". Tienes que asociar un módulo al hook para que lo veas en la lista. Es lógico, esa lista se supone que es para mover y cambiar el orden de los módulos dentro de los hooks, por lo que los que están vacíos no tiene mucho sentido que aparezcan.

Si la intención es mover alguno de los módulos registrados en otro hook sin embargo debería funcionar, le das al botón "modificar" y ahí en la lista debería salirte el nuevo si lo has hecho bien.

Edited by Prestafan33 (see edit history)
Link to comment
Share on other sites

Te repondo aunque Prestafan ya lo ha  hecho, te lo explico de otra manera

Supongo que quieres que muchos modulos se muestren en un hook especial... si no es asi, se ha entendido mal

------

Para que los modulos pueda mostrarse en un hook debe estar asociado a ese modulo, por lo que vas a tener que cambiar el codigo de los modulos y añadir ese hook,

utilizando  $this->registerHook('actionSearch') && en install, una vez has añadido ese codigo, ya podras enganchar el modulo a ese hook

Si quieres hacer un hook personalizado para luego poder añadirlo a la plantilla, añade a los modulos lo mismo pero indicando el nombre del hook y luego debes añadir una "function" en todos los modulos para que se ejecute el codigo que quieras al mostrar el hook

$this->registerHook('displayProgressBar') &&   

.....

public function hookDisplayProgressBar($params)
    {
        /* Place your code here. */
       
             return $this->context->smarty->fetch(dirname(__FILE__).'/views/templates/hook/xxxxxxxx.tpl');
       
        
    }

 

Y luego en la plantilla debes añadir al tpl lo siguiente

{hook h="displayProgressBar"}

Recuerda que debes ir a posiciones, buscar el modulo y añadirlo a ese hook, cuando se instala el modulo, el mismo se engancha / añade a ese hook, si ya esta instalado debes hacerlo manualmente

Ademas debe existir un fichero tpl para que se muestre información, puedes utilizar el mismo "return" que utiliza dicho modulo

De esta manera, tienes el modulo enganchado a ese hook y en la plantilla se muestra el código o información del tpl

 

Link to comment
Share on other sites

hace 46 minutos, jordicastalla dijo:

Ostras!  Que movida!

Lo que hay que hacer para que se muestre un módulo! Ya podrían hacer un "echo do_shortcode("") como en Wordpress, o algo similar.

Voy a ver si lo consigo! Gracias!

Sin defender a PS, y sabiendo que en diseño esta muy limitado.

En teoria los modulos instalados, tienen los hooks ya asignados, obligar a un modulo que se muestre donde no esta preparado para ello como entenderas debes tener que cambiar codigo.

No puedes hacer que un modulo de login se muestre al lado del precio, eso no tiene sentido, el modulo de login debe mostrarse donde debe hacerlo, si tu quieres que se muestre al lado del precio vas a tener que hacer cambios y modificaciones.

Dices lo de añadir echo do_shorcode en Wordpress, ni idea, no conozco Wordpress, pero dudo que puedas hacerlo con plugins de woocommerce , y si se puede me parece perfecto, y no quiero empezar una conversación si es mejor uno u otro, 

  • Like 1
Link to comment
Share on other sites

No es más complicado crear un hook en PS que un shortcode en Wordpress. En WP también tienes que "registrar" el shortcode (add_shortcode), luego programar dentro de una función lo que muestra cuando es llamado y finalmente meter la llamada al shortcode con sus parámetros dentro de tu página donde quieras que se muestre.

El concepto en realidad es el mismo: la función que genera el contenido del shortcode sería aquí el "public function hookDisplayProgressBar()" en el ejemplo que te ha puesto Gus, el registro del shortcode (add_shortcode) sería aquí el $this->registerHook('displayProgressBar'), y la llamada al shortcode dentro de tu página sería la inserción del hook dentro del TPL ({hook h="displayProgressBar"}). Como ves, en realidad no es tan diferente, al final hay que hacer las mismas 3 cosas, solo que están estructuradas de forma diferente.

Edited by Prestafan33 (see edit history)
  • Like 2
Link to comment
Share on other sites

  • 3 weeks later...

Holaaa... sigo sin conseguirlo.. :(

 

He creado el hook con el módulo "hooks manager" (ver captura) .

He puesto el siguiente código en product.tpl, en el tema hijo:

  <section id="reviewsRevi">

   <h1> REVIEWS REVI </h1>

    {hook h='OpinionesReviProductos'}

    </section> 

 

He hecho un "override" en "/override/modules/revi/revi.php" tal que así:

<?php
if (!defined('_PS_VERSION_'))
exit;
class Ps_ReviOverridre extends Revi
{
public function OpinionesReviProductos($params) {
     return $this->hookDisplayProductListReviews($params);
}
}

 

Borrado caché, y nada... No me sale ningún "hook" en "Posiciones". Ni invisible, ni agregando, ni nada.

¿Qué paso me salto o qué estoy haciendo mal?

He seguido los pasos que se indican aquí, pero nada (https://victor-rodenas.com/crear-hooks-en-prestashop/#Crear_hooks_mediante_el_modulo_de_Vekia)

¡Gracias a todos!

 

 

Captura de pantalla 2020-07-28 a las 11.06.09.png

Captura de pantalla 2020-07-28 a las 11.01.16.png

Captura de pantalla 2020-07-28 a las 10.59.10.png

Captura de pantalla 2020-07-28 a las 11.03.14.png

Captura de pantalla 2020-07-28 a las 11.08.36.png

Captura de pantalla 2020-07-28 a las 11.11.07.png

Edited by jordicastalla (see edit history)
Link to comment
Share on other sites

Ya te lo ha explicado @gusman126, pero por si no tienes claro el uso de los hooks, te lo intento explicar de otra forma:

- Hay 2 tipos de hooks: de "display" y de "action". Los de display son para mostrar algo en un sitio determinado de la tienda. Por ejemplo, dentro de la ficha de producto, detrás del botón de compra. O en la página de inicio, detrás del banner principal. Hay muchos hooks que ya vienen creados por defecto, pero además se pueden añadir otros donde tú quieras (al final te explico cómo hacerlo).

- Para que un hook funcione debes, primero, registrarlo en tu módulo. Esto se hace como te indica gus en la primera imagen que ha puesto ($this->registerHook('displayMyHook');). Luego, debes crear un método donde programes lo que necesites hacer y devuelvas un trozo de código HTML con lo que quieras que se muestre en el punto desde el que se ha llamado el hook (siguiendo el ejemplo, detrás del botón de compra en la ficha de producto). El HTML que devuelve el método lo puedes crear directamente usando PHP o puedes cargar una plantilla, que es como se suele hacer. Esto se muestra en la segunda imagen que te ha puesto gus.

- Finalmente, si quieres que tu código se muestre en algún sitio que no tiene un hook específico, puedes añadir el tuyo propio. Para ello basta con que edites el archivo de la plantilla de tu tema correspondiente (por ejemplo /themes/nombre-de-tu-tema/templates/catalog/product.tpl), y lo añadas ahí, dentro de esa plantilla, en el punto donde quieras que aparezca el contenido que genera tu módulo. Por ejemplo: {hook h="displayMyHook"}. Si quieres que el hook solo sirva para tu módulo, puedes especificarlo así {hook h="displayMyHook" mod="nombre_de_mi_modulo"}

Y adicionalmente, también puedes crear tu módulo como "widget", con lo cual no queda anclado a un sitio específico, sino que lo puedes ejecutar desde cualquier sitio de las plantillas, incluso repetirlo varias veces sin tener que programar varios hooks. Tienes más info sobre esto aquí:

https://devdocs.prestashop.com/1.7/modules/concepts/widgets/

  • Like 1
  • Thanks 1
Link to comment
Share on other sites

  • 1 year later...
On 7/8/2020 at 5:25 PM, jordicastalla said:

Ostras!  Que movida!

Lo que hay que hacer para que se muestre un módulo! Ya podrían hacer un "echo do_shortcode("") como en Wordpress, o algo similar.

Voy a ver si lo consigo! Gracias!

Totalmente de acuerdo. Prestashop en una castaña como un castillo.

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