OMOSde / contao-om-backend

Additional backend tools for Contao 4.4+
GNU Lesser General Public License v3.0
19 stars 5 forks source link

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

Closed chopsol closed 3 years ago

chopsol commented 4 years ago

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.

Kahmoon commented 4 years ago

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

OMOSde commented 4 years ago

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)

Kahmoon commented 4 years ago

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;
    }
Kahmoon commented 4 years ago

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

Kahmoon commented 4 years ago

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.

Kahmoon commented 4 years ago

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.

OMOSde commented 4 years ago

Danke für deine Mühe.

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

Kahmoon commented 4 years ago

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

Kahmoon commented 4 years ago

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?

OMOSde commented 4 years ago

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

Kahmoon commented 4 years ago

Oh, warum nicht? :-)

Aber dann weiss ich bescheid.

OMOSde commented 4 years ago

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.

Kahmoon commented 4 years ago

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

OMOSde commented 3 years ago

Fixed in 99651ff11ac013a7a95e578ad278df019a51789d