Gracias por la información, @inmadigital y @beatrizseller. @inmadigital, tu enfoque actual es, como bien intuyes, un anti-patrón en PrestaShop 1.7.0.1 (y en general en cualquier versión). El problema es que estás mezclando la lógica de negocio (qué elementos de menú mostrar) con la presentación (cómo se ven esos elementos en HTML).
En PrestaShop, la manera correcta de manejar esto en un módulo personalizado es preparando un array con la estructura de tu menú en el método del hook y luego pasárselo a una plantilla Smarty (.tpl) para que esta se encargue de renderizar el HTML. Esto permite que el HTML sea dinámico, traducible y mucho más fácil de mantener y estilizar con CSS.
Aquí tienes un ejemplo de cómo podrías estructurar tu hookDisplayTop para preparar los datos. Asumiendo que esto está en tu módulo MyCustomMenu, por ejemplo:
public function hookDisplayTop($params)
{
// Define la estructura de tu menú como un array de arrays
$menuItems = [
[
'label' => $this->trans('Inicio', [], 'Modules.Mycustommenu.Shop'),
'url' => $this->context->link->getPageLink('index'),
'children' => []
],
[
'label' => $this->trans('Productos', [], 'Modules.Mycustommenu.Shop'),
'url' => '#', // Enlace para el elemento padre si no es navegable
'children' => [
[
'label' => $this->trans('Categoría A', [], 'Modules.Mycustommenu.Shop'),
'url' => $this->context->link->getCategoryLink(1), // Ejemplo con ID de categoría
],
[
'label' => $this->trans('Categoría B', [], 'Modules.Mycustommenu.Shop'),
'url' => $this->context->link->getCategoryLink(2),
]
]
Luego, en tu archivo views/templates/hook/mycustommenu.tpl, podrías iterar sobre {$my_custom_menu_items} para generar el HTML del menú, incluyendo la lógica para los submenús. Esto te da mucha más flexibilidad.
Para una solución más robusta y que no tengas que mantener tú mismo, especialmente si necesitas opciones de configuración avanzadas, la gestión de la jerarquía de menús desde el back office, o incluso integrar contenido CMS, te recomiendo usar un módulo dedicado. Para automatizar menú horizontal superior en la tienda de forma eficiente y profesional, un buen módulo te ahorrará muchos dolores de cabeza y evitará conflictos en futuras actualizaciones.