LinkHandler liefert falsche URL für LandingPage mit MenuItemProvider

  • Szenario:
    Als LandingPage ist ein Menüpunkt mit einem MenuItemProvider hinterlegt. Dieser verfügt über eine getLink-Methode, die den Link für den Menüpunkt selbst festlegt.
    Soweit funktioniert alles: Die Menüpunkte verlinken korrekt auf das durch die Methode festgelegte Ziel. Das Logo, was ja immer auf die LandingPage verlinkt, baut sich diesen Link aber hier selber und ignoriert somit die getLink-Methode des Menüpunktes.


    Ich habe es nicht getestet, aber sollte es nicht möglich sein, an dieser Stelle den konkreten Link des Menüpunktes zu übernehmen und diesen direkt zurückzugeben? :)

    • Official Post

    Was steht denn in der fraglichen getLink()-Methode? Ich hatte diesen Ansatz damals absichtlich gewählt, um eine Rekursion bei der Landing-Page zu verhindern, LinkHandler::getInstance()->getLink() würde eine Endlosschleife verursachen.

  • In diesem Fall folgendes:


    Selbstverständlich dürften MenuItemProvider bei einer Änderung nicht selbst LinkHandler::getInstance()->getLink() ohne controller-Angabe aufrufen.
    Aktuell ist die Möglichkeit der MenuItemProvider, den Link zu manipulieren, aber nicht wirklich zu gebrauchen, da der Menüpunkt so nicht als Landing-Page verwendet werden kann.

    • Official Post

    Von was leitet sich die Klasse ab?


    Das Problem ist schlicht, dass bei \wcf\system\menu\page\DefaultPageMenuItemProvider ein Aufruf von getLink() des dekorierten Objekts erfolgt und dort findet man üblicherweise einen Aufruf von \wcf\system\request\LinkHandler wodurch man bei der oben geschilderten Rekursion ankommt.

  • Einer von uns beiden hat gerade einen Denkfehler: Die Rekursion kommt doch erst dadurch zustande, dass irgendwo innerhalb von wcf\system\menu\page\IPageMenuItemProvider::getLink() LinkHandler::getInstance()->getLink() ohne controller-Parameter aufgerufen wird? Erst dadurch würde der LinkHandler ja wieder versuchen, einen Link zur Landing-Page zu bauen.
    Für im ACP erstellte (interne) Menüpunkte muss soweit ich das weiß ein Controller angegeben werden. wcf\data\page\menu\item\PageMenuItem::getLink() würde damit keine Rekursion verursachen.
    Lediglich Entwickler dürften also in eigenen MenuItemProvider-Implementierungen über den LinkHandler keine Endlosschleife bauen.


    Von was leitet sich die Klasse ab?


    Von wcf\system\menu\page\DefaultPageMenuItemProvider.


    Ich habe meine eingangs vorgeschlagene Änderung inzwischen übrigens einmal kurz durchgetestet und konnte keine Probleme feststellen.