Ergebnis 1 bis 19 von 19

Thema: Inserttag "Navigationsmenü" in eigenem Controller verwenden

  1. #1
    Contao-Nutzer
    Registriert seit
    29.09.2014.
    Beiträge
    30

    Standard Inserttag "Navigationsmenü" in eigenem Controller verwenden

    Hallo zusammen,

    ich habe folgendes Problem, für das hoffentlich jemand eine Lösung kennt:
    Wenn ich in Contao 4 ein eigenes Symfony-Bundle mit Controller und Routing erstelle, ist es derzeit nicht möglich einige Inserttags wie z.B. das Navigationsmenü zu integrieren.

    Beispielcode (Auszug):

    PHP-Code:
    <?php

    namespace TestBundle\Controller;
    use 
    Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
    use 
    Symfony\Bundle\FrameworkBundle\Controller\Controller;
    use 
    Contao;

    class 
    TestController extends Controller
    {
        
    /**
         * @Route("/testordner/{alias}.html")
         */
         
    public function testAction($alias)
         {
            
    define('TL_MODE''FE');
            
    define('TL_SCRIPT''');
            
    $dir __DIR__;
            while (
    $dir != '.' && $dir != '/' && !is_file($dir '/system/initialize.php')){
                
    $dir dirname($dir);
            }
            require(
    $dir '/system/initialize.php');

            
    $test = \Contao\Controller::replaceInserttags("{{insert_module::1}}"); // Modul für ein Navigationsmenü
            
    print_r ($test);
            exit;
         }
    }
    Viele andere Module (z.B. eine individuelle Navigation) funktionieren so ohne Probleme.
    Kennt jemand eine Lösung?

  2. #2
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.130
    Partner-ID
    10107

    Standard

    Das alles:
    Zitat Zitat von Leopold Beitrag anzeigen
    PHP-Code:
            define('TL_MODE''FE');
            
    define('TL_SCRIPT''');
            
    $dir __DIR__;
            while (
    $dir != '.' && $dir != '/' && !is_file($dir '/system/initialize.php')){
                
    $dir dirname($dir);
            }
            require(
    $dir '/system/initialize.php'); 
    brauchst du nicht. Statt dessen lässt du dir den ContaoFramework (@contao.framework) Service injecten und rufst ->initialize() auf. Und statt
    Zitat Zitat von Leopold Beitrag anzeigen
    PHP-Code:
            $test = \Contao\Controller::replaceInserttags("{{insert_module::1}}"); 
    verwendest du am besten
    PHP-Code:
    $test = \Contao\Controller::getFrontendModule(1); 

  3. #3
    Contao-Nutzer
    Registriert seit
    29.09.2014.
    Beiträge
    30

    Standard

    Hallo Spooky,

    danke für die schnelle Antwort.
    Die Sache mit dem "injecten" muss ich mir noch einmal genauer anschauen... Hast du dazu vielleicht ein Beispiel?

    Ob
    PHP-Code:
    $test = \Contao\Controller::replaceInserttags("{{insert_module::1}}"); 
    oder
    PHP-Code:
    $test = \Contao\Controller::getFrontendModule(1
    ...spielt offensichtlich auch keine Rolle. Beides funktioniert leider nicht.

  4. #4
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.130
    Partner-ID
    10107

    Standard

    Zitat Zitat von Leopold Beitrag anzeigen
    Beides funktioniert leider nicht.
    Du musst wie gesagt zuerst das Contao Framework in deinem Controller initialisieren. Siehe https://docs.contao.org/dev/referenc...ontaoframework

  5. #5
    Contao-Nutzer
    Registriert seit
    29.09.2014.
    Beiträge
    30

    Standard

    Aber das Initializeren mache ich doch derzeit mit:

    PHP-Code:
    require($dir '/system/initialize.php'); 
    Sollte das nicht das Gleiche sein?

    Danke für den Link... das schaue ich mir mal an.

  6. #6
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.130
    Partner-ID
    10107

    Standard

    Zitat Zitat von Leopold Beitrag anzeigen
    Aber das Initializeren mache ich doch derzeit mit:

    PHP-Code:
    require($dir '/system/initialize.php'); 
    Sollte das nicht das Gleiche sein?
    Vielleicht, vielleicht auch nicht. Aber warum kompliziert und daher potentiell falsch machen, anstatt einfach und richtig?

  7. #7
    Contao-Nutzer
    Registriert seit
    29.09.2014.
    Beiträge
    30

    Standard

    Also wenn ich es richtig sehe, sollte ein

    PHP-Code:
    $this->container->get('contao.framework')->initialize(); 
    am Anfang der Funktion doch eigentlich funktionieren, oder?

    Klappt bei mir mit den Inserttags oder FrontendModulen leider auch nicht.

    Ich schätze, dass es doch gar nicht so schwer sein kann und ich einfach gerade ein wenig auf dem Schlauch stehe

  8. #8
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.130
    Partner-ID
    10107

    Standard

    Zitat Zitat von Leopold Beitrag anzeigen
    Also wenn ich es richtig sehe, sollte ein

    PHP-Code:
    $this->container->get('contao.framework')->initialize(); 
    am Anfang der Funktion doch eigentlich funktionieren, oder?
    Ja, wobei ich persönlich Dependency Injection bevorzuge.



    Zitat Zitat von Leopold Beitrag anzeigen
    Klappt bei mir mit den Inserttags oder FrontendModulen leider auch nicht.

    Ich schätze, dass es doch gar nicht so schwer sein kann und ich einfach gerade ein wenig auf dem Schlauch stehe
    Was genau funktioniert denn dann nicht? Kommt einfach ein leerer String von \Contao\Controller::getFrontendModule zurück? Stimmt überhaupt die ID des Moduls?

  9. #9
    Contao-Nutzer
    Registriert seit
    29.09.2014.
    Beiträge
    30

    Standard

    Die ID stimmt, diese wird woanders ja auch verwendet.
    Es kommt, wie du richtig vermutest, ein leerer String zurück.

  10. #10
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.130
    Partner-ID
    10107

    Standard

    Nicht jedes Modul wirst du so in einem eigenen, unabhängigen Controller rendern können. Bspw. benötigt das Navigationsmodul den Context der Contao Page, wenn keine Root Seite definiert wurde - und selbst wenn sie definiert wurde, wird der Page Context gebraucht, um bspw. das richtige Template verwenden zu können.

  11. #11
    Contao-Nutzer
    Registriert seit
    29.09.2014.
    Beiträge
    30

    Standard

    Also ist es so gar nicht ohne Weiteres möglich.
    Schade eigentlich. Dann muss ich mir dazu wohl was "um die Ecke" ausdenken.
    Danke trotzdem für deine Unterstützung!

  12. #12
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.130
    Partner-ID
    10107

    Standard

    Naja, was genau hast du eigentlich vor?

  13. #13
    Contao-Nutzer
    Registriert seit
    29.09.2014.
    Beiträge
    30

    Standard

    Ich möchte in einem eigenen Routing ( != Contao) den Header und Footer der Contao-Seiten laden.
    Da im Header ein "Navigationsmenü" eingebunden ist, bin ich auf den "Fehler" gestoßen.

  14. #14
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.130
    Partner-ID
    10107

    Standard

    Ich denke da sind vielleicht die Page Controller aus Contao 4.10+ die beste Wahl. Ist aber noch in der Anfangsphase und noch nicht dokumentiert.

  15. #15
    Contao-Nutzer
    Registriert seit
    29.09.2014.
    Beiträge
    30

    Standard

    Page Controller? Klingt spannend... 4.10 ist aber leider außerhalb der LTS-Version.
    Ich bekomme das sicher auch über einen kleinen Umweg gelöst...
    Danke nochmal!

  16. #16
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.130
    Partner-ID
    10107

    Standard

    Ja, in Contao 4.10 kannst du Controller als Page Types registrieren und diese dann ganz normal im Contao Backend einfügen. Die Route zu diesem Controller kannst du dann auch über das Backend einstellen - oder fix vorbelegen (wie beim Routing eines regulären Controllers). Den ganzen Page Context müsstest du dir dann vermutlich immer noch selbst zusammenbauen - aber so ist es dann klar definiert.

  17. #17
    Contao-Nutzer
    Registriert seit
    29.09.2014.
    Beiträge
    30

    Standard

    Das klingt wirklich nicht schlecht.
    Wenn mal Zeit ist, muss ich mir das mal genauer anschauen.

  18. #18
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.130
    Partner-ID
    10107

    Standard

    Wenn ich mal Zeit habe muss ich endlich die Dokumentation dafür schreiben

  19. #19
    Contao-Nutzer
    Registriert seit
    29.09.2014.
    Beiträge
    30

    Standard

    Gut geschriebener Code braucht keine Dokumentation

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •