Franc Im Posted January 25, 2023 Share Posted January 25, 2023 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 More sharing options...
ventura Posted January 25, 2023 Share Posted January 25, 2023 En los parámetros del hook se obtiene un array con toda la info del transportista, en función de eso se puede integrar la vista https://devdocs.prestashop-project.org/8/modules/concepts/hooks/list-of-hooks/displaycarrierextracontent/ Link to comment Share on other sites More sharing options...
Franc Im Posted January 25, 2023 Author Share Posted January 25, 2023 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 More sharing options...
Manuel_GT Posted January 26, 2023 Share Posted January 26, 2023 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 More sharing options...
Franc Im Posted January 26, 2023 Author Share Posted January 26, 2023 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 More sharing options...
Manuel_GT Posted January 26, 2023 Share Posted January 26, 2023 /** * 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) MI versión actual de prestashop es 1.7.8.8 Link to comment Share on other sites More sharing options...
Manuel_GT Posted February 7, 2023 Share Posted February 7, 2023 ¿Lograste solucionarlo? Si es así deberías comentarlo en el título para cerrar el hilo. Si quieres también puedes explicar cómo se arregló para el resto del foro. Un saludo. Link to comment Share on other sites More sharing options...
Franc Im Posted February 8, 2023 Author Share Posted February 8, 2023 Hola, La verdad es que no funciono y dejamos de un lado las pruebas, ya que depende de una persona externa. No logramos entender porque no funciona ya que esta todo como se describe en la documentacion. Link to comment Share on other sites More sharing options...
Manuel_GT Posted February 10, 2023 Share Posted February 10, 2023 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 More sharing options...
Iburoli Posted May 17, 2023 Share Posted May 17, 2023 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 More sharing options...
Manuel_GT Posted July 10, 2023 Share Posted July 10, 2023 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 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