Oui, je l'ai fait plein de fois. Mais j'ai compris, j'ai trop survolé ton code avant de te répondre.
En fait, le hook du menu tools est un hook "block" (http://doc.thelia.net/en/documentation/ … hook-block), qui ne retourne pas un contenu HTML (comme pour les hook "render"), mais un ensemble de paramètres valorisés, paramètres définis par le hook lui-même.
Observe la définition du hook main.top-menu-tools dans admin-layout.tpl :
{hookblock name="main.top-menu-tools" fields="id,class,url,title"}
{forhook rel="main.top-menu-tools"}
<li role="menuitem">
<a {if $id}id="{$id}" {/if} class="{$class}" data-target="{$url nofilter}" href="{$url nofilter}">
{$title}
</a>
</li>
{/forhook}
{/hookblock}
hookblock indique que nous sommes en présence d'un hook de type block. fields="id,class,url,title" indique que ce hook supporte 4 variables, que tu peux passer depuis ta méthode hook.
Pour un hook de type block, la déclaration est un peu différente, l'event étant de type HookRenderBlockEvent. Il ne s'utilise pas de la même façon que pour un hook render. (il doit y avoir quelque part dans tes logs (logs/log-thelia.txt) un warning qui indique que ta méthode n'a pas la bonne signature, un truc du genre "Method onMainTopMenuTools should use an event of type HookRenderBlockEvent. found: HookRenderEvent").
Exemple ci-dessous :
public function onTopMenuTools(HookRenderBlockEvent $event)
{
$event->add([
"id" => "reservation-tools",
"url" => URL::getInstance()->absoluteUrl('/admin/module/Geoloc'),
"title" => $this->trans("Geofencing des MiBox", [], Geoloc::DOMAIN_NAME)
]);
}
Et voilà !
Je suis d'accord avec toi, la doc mériterait d'être étoffée sur les hooks, même si tu as déjà un exemple ici : http://doc.thelia.net/en/documentation/ … hook-block.
Peut-être aussi qu'en mode dev, certaines erreurs devraient être fatales au lieu de se glisser silencieusement dans les logs, on économiserait des heures de prises de tête. J'ai ouvert une issue à ce sujet: https://github.com/thelia/thelia/issues/1927
My 2 cents.