Jump to content

Hook DisplayCarrierExtraContent


Franc Im

Recommended Posts

Hola, este es mi primer mensaje a ver si podeis ayudarme.

He creado un modulo donde crea diferentes carriers y quisiera que cuando se selecciona uno de estos salga una información extra debajo de cada selección, descubrí el hook DisplayCarrierExtraContent y entendi que era para eso, asi que me puse manos a la obra para implementarlo en mi modulo, la creación de los carrier la hace correctamente con lo que he añadido al código lo siguiente:

Registro el hook displayCarrierExtraContent

return parent::install() &&
                $this->registerHook('header') &&
                $this->registerHook('backOfficeHeader') &&
                $this->registerHook('updateCarrier') &&
                $this->registerHook('displayCarrierExtraContent');

En el hook llamo a un tpl con la información a mostrar:

public function hookDisplayCarrierExtraContent($params)
    {        
        return $this->display(__FILE__, '/views/templates/front/selectPickup.tpl');
    }

Y la información del tpl:

<button id="button_test">testing</button>

He comprobado en Diseño/Posiciones que el hook esta vinculado a mi modulo

Y cuando selecciono un carrier parece que intenta cargar algo en el div con la class carrier-extra-content pero no muestra nada.

¿Me estoy olvidando algo?

Muchas gracias!

 

Link to comment
Share on other sites

Gracias por la respuesta!

Entiendo lo que que dices @ventura pero si yo no hago ningún tipo de filtro por tipo de transportista, actualmente ese botón debería aparecer en todos no¿?

Lo que me estas indicando seria la siguiente tarea y es leer el array que recibe el hook para que aparezca solo en los transportistas que desee, el problema es que no aparece por ningún lado el botón.

Link to comment
Share on other sites

Hola!

Yo por descartar probaría a enviar primero html directo. A mi me funciona:

return '<div class="col-sm-12 alert alert-warning" role="alert"><b>' . $this->trans('INFORMATION NOTE',[],'Modules.Aqdelivery.Admin') . ':</b> ' . $this->trans('The products you have selected require extra preparation and the expected shipment could be delayed up to 5 working days', [],'Modules.Aqdelivery.Admin') . '</div>';

Así ves si se te ha pasado algo en la llamada a la plantilla. No se.

Link to comment
Share on other sites

18 minutes ago, Manuel_GT said:

Hola!

Yo por descartar probaría a enviar primero html directo. A mi me funciona:

return '<div class="col-sm-12 alert alert-warning" role="alert"><b>' . $this->trans('INFORMATION NOTE',[],'Modules.Aqdelivery.Admin') . ':</b> ' . $this->trans('The products you have selected require extra preparation and the expected shipment could be delayed up to 5 working days', [],'Modules.Aqdelivery.Admin') . '</div>';

Así ves si se te ha pasado algo en la llamada a la plantilla. No se.

Hola,

Ya probé poniendo directamente el código html pero no sale, ademas en varios foros he leído que debes devolver un .tpl si o si, lo raro es que a ti te aparezca...

¿Podrías copiar el código que tienes en el modulo que instalas?, donde haces referencia a lo relacionado con hookDisplayCarrierExtraContent

Un saludo y gracias por la ayuda.

Link to comment
Share on other sites

    /**
     * Podemos añadir mensajes específicos del cálculo de envío
     * @param $params
     * @param int $moduleId
     * @return string
     */
    public function hookDisplayCarrierExtraContent($params, $moduleId = 0){
...
        if ($delayed){
            return '<div class="col-sm-12 alert alert-warning"  role="alert"><b>' .
                $this->trans('INFORMATION NOTE',[],'Modules.Aqdelivery.Admin') . ':</b> ' .
                $this->trans('The products you have selected require extra preparation and the expected shipment could be delayed up to 5 working days',
                    [],'Modules.Aqdelivery.Admin') . '</div>';
        } else {
            return '<div class="col-sm-12 alert alert-info"  role="alert"><b>' .
                $this->trans('INFORMATION NOTE',[],'Modules.Aqdelivery.Admin') . ':</b> ' .
                $this->trans('check out now and receive it in the next 3 working days.',[],'Modules.Aqdelivery.Admin') .'</div>';
        }

    }

registro del hook

    public function install()
    {
...
        return parent::install() &&
            $this->registerHook('header') &&
            $this->registerHook('backOfficeHeader') &&
            $this->registerHook('updateCarrier') &&
            $this->registerHook('actionValidateOrder') &&
            $this->registerHook('displayCarrierExtraContent') &&
            $this->registerHook('actionGetAdminOrderButtons') &&
            $this->registerHook('actionCarrierProcess') &&
            $this->registerHook('actionPaymentConfirmation');
    }

Se ve así (cuadro azul)

imagen.png.02905d3de72735f337e229e1a0e1ac47.png

MI versión actual de prestashop es 1.7.8.8

 

 

Link to comment
Share on other sites

  • 2 weeks later...

Pues ya lo siento.

Efectivamente este software de Prestashop me ha resultado muy frustrante en ese sentido. Tengo varios problemas en mi desarrollo en los que todo parece estar correcto pero no funciona y puedes estar horas e incluso días, poniendo trazas, buscando errores de alguna mayúscula o minúscula en los nombres, y otras chorradas que se traga sin dar error y que te desesperan.

Pero bueno, este es un foro de desarrollo. Supongo que este comentario debería ir en el foro de lloros y quejas.

Espero que lo resuelvas.

Link to comment
Share on other sites

  • 3 months later...

Estoy experimentando el mismo problema: defino el hook, creo la función y no se imprime. Al final, parece que tendré que trabajar en ello utilizando DisplayAfterCarrier y jQuery para ocultarlo o mostrarlo. Sé que no es la forma correcta, he leído que podría haber conflictos con otro módulo, pero después de buscar, no veo ninguna otra llamada realizada al hook DisplayAfterCarrier. Si alguien puede solucionarlo, por favor, continúe el hilo.😥

 

Link to comment
Share on other sites

  • 1 month later...

Hola,

No sé si al final lo arreglasteis. La cosa es que hoy programando he querido añadir una funcionalidad al hook "actionPresentProduct" y  cómo de costumbre he dado de alta la función en la clase del módulo así como he definido el mismo en Diseño/Posiciones. Pero para mi sorpresa no se ejecutaba y me he acordado de este hilo. Después de innumerables borrados de caché y comprobación de todo seguía sin funcionar. Al final he metido el xdebug y he descubierto el problema. Resulta que en la clase Hook método getAllHookRegistrations se lanza una consulta sql bastante compleja para recuperar los módulos enganchados a cada hook

SELECT h.`name` as hook, m.`id_module`, h.`id_hook`, m.`name` as module FROM  `module` m
 INNER JOIN module_shop module_shop ON (module_shop.id_module = m.id_module AND module_shop.id_shop = 1 AND module_shop.enable_device & 1)
INNER JOIN `module_shop` `ms` ON ms.`id_module` = m.`id_module`
INNER JOIN `hook_module` `hm` ON hm.`id_module` = m.`id_module`
INNER JOIN `hook` `h` ON hm.`id_hook` = h.`id_hook` 
LEFT JOIN `module_group` `mg` ON mg.`id_module` = m.`id_module` 
WHERE mg.id_shop = 1 AND  mg.`id_group` IN (3) and h.`name` != "paymentOptions" AND hm.`id_shop` = 1
GROUP BY hm.id_hook, hm.id_module ORDER BY hm.`position`

y en el resultado de esa consulta no estaba el mio. Indagando sobre la consulta por fin he dado con el problema. Uno de los joins de la misma se hace con la tabla module_group. Mi módulo no estaba definido para el valor del id_group = 3. Insertando el valor correspondiente comenzó a funcionar finalmente.

Por si queréis comprobarlo.

Suerte.

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