OMOSde/contao-om-backend

Backend-Links für Main-Navigation in Contao 4.9 defekt

Closed this issue · 14 comments

Nach einem Upgrade von 4.4 auf 4.9 (ohne Probleme) werden die Backend-Links in der Main-Navigation nicht mehr angezeigt. Elemente in der Top-Navigation funktionieren problemlos.

Guten Morgen, gibt es hier vielleicht einen Workaround bis dieser Fehler behoben ist? Der Issue ist ja schon seit Februar offen :-(

Zurück auf 4.8.x kann ich leider nicht gehen und dein Modul mit den Shortlinks in der linken Navigation war eine extreeeeeeme Erleichterung.

VG Frank

Probiere mal bitte folgendes:

Als nicht updatesichere Notlösung könnte in der Datei vendor/omosde/contao-om-backend/src/Resources/contao/classes/BackendLinks die ul-Klassen angepasst werden: tl_level_1 » menu_level_0 (Zeile 124) und tl_level_2 » menu_level_1 (Zeile 142)

Das war wohl umgekehrt gemeint :-)

in 124 war tl_level_2 und in 142 tl_level_1

Damit ging es erst mal nicht, ich habe aber noch zwei Mehr Punkte angepasst und jetzt geht es.

123: menu_level_1_group
124: menu_level_1
142: 2 x menu_level_0

    protected function addBackendLinksMain($strContent)
    {
        // get all links
        $objLinks = OmBackendLinksMainModel::findBy(['language=?', 'published=1'], [$this->User->language]);
        if (!$objLinks)
        {
            return $strContent;
        }

        foreach ($objLinks as $link)
        {
            $arrGroups[$link->be_group][$link->title] = $link->url;
        }

        $strReturn = '';
        foreach ($arrGroups as $groupName => $group)
        {
            $strReturn .= '<li class="menu_level_1_group"><a href="contao/main.php?do=repository_manager&amp;mtg=' . $groupName . '" title="" onclick="return AjaxRequest.toggleNavigation(this,\'' . $groupName . '\')">' . $groupName . '</a></li>';
            $strReturn .= '<li class="tl_parent" id="' . $groupName . '" style="display: inline;"><ul class="menu_level_1">';
            foreach ($group as $linkTitle => $link)
            {
                if (strpos($link, 'contao?do') !== false)
                {
                    $container = \System::getContainer();
                    $strToken = $container->get('security.csrf.token_manager')->getToken($container->getParameter('contao.csrf_token_name'))->getValue();

                    $strReturn .= sprintf('<li><a href="%s&rt=%s" class="navigation themes" title="">%s</a></li>', $link, $strToken, $linkTitle);
                }
                else
                {
                    $strReturn .= sprintf('<li><a href="%s" target="_blank" rel="noopener" class="navigation themes" title="">%s</a></li>', $link, $linkTitle);
                }
            }
            $strReturn .= '</ul></li>';
        }

        $strContent = str_replace('<ul class="menu_level_0">', '<ul class="menu_level_0">' . $strReturn, $strContent);

        return $strContent;
    }

Was damit jetzt noch nicht geht ist diese Menüpunkte zusammenklappen. Aber das ist erst mal halb so wild.

Die HTML Struktur hat sich auch etwas geändert. Die Blocküberschriften sind kein li mehr sondern nur ein a innerhalb eines li dass das ganze ul umschließt. Dieser Link braucht auch noch eine Klasse group-content für das Icon

Sprich so

foreach ($arrGroups as $groupName => $group)
        {
            $strReturn .= '<li><a class="group-content" href="contao/main.php?do=repository_manager&amp;mtg=' . $groupName . '" title="" onclick="return AjaxRequest.toggleNavigation(this,\'content\',\'/contao\')">' . $groupName . '</a>';
            $strReturn .= '<ul class="menu_level_1">';
            foreach ($group as $linkTitle => $link)
            {
                if (strpos($link, 'contao?do') !== false)
                {
                    $container = \System::getContainer();
                    $strToken = $container->get('security.csrf.token_manager')->getToken($container->getParameter('contao.csrf_token_name'))->getValue();

                    $strReturn .= sprintf('<li><a href="%s&rt=%s" class="navigation themes" title="">%s</a></li>', $link, $strToken, $linkTitle);
                }
                else
                {
                    $strReturn .= sprintf('<li><a href="%s" target="_blank" rel="noopener" class="navigation themes" title="">%s</a></li>', $link, $linkTitle);
                }
            }
            $strReturn .= '</ul></li>';

Mit dem aktuellen Code funktioniert alles. Auch die Zuklapptfunktion.

Code Snipped noch mal editiert. Somit funzt das in 4.9.2. Sowohl das Icon als auch die Zuklapp-Funktion geht. Der Toggler musste hier auch anders geschrieben werden.

Danke für deine Mühe.

Ich programiere das Modul gerade komplett neu und dort wird es dann anders umgesetzt. (Hook: getUserNavigation)

Alles klar. Bis dahin funzt der Workaround auf jeden Fall. Merci :)

Hi, sind in 1.6.7 die manuellen Änderungen von hier enthalten oder überschreibe ich mir mit einem Update die Kompatibilität zu Contao 4.9.x?

Nein, die Anpassungen sind nicht in das Update eingeflossen. Die manuellen Änderungen werden überschrieben.

Oh, warum nicht? :-)

Aber dann weiss ich bescheid.

Es gab ein anderes Problem, das mit dem Update behoben werden sollte. An dieses Ticket habe ich tatsächlich nicht gedacht. Ich entwickle gerade auch Version 2.0 komplett neu, daher passiert hier nicht mehr viel gerade.

So wäre halt bis dahin dieses Problem/Feature schnell gelöst :)

Fixed in 99651ff