Contao-Camp 2024
Ergebnis 1 bis 5 von 5

Thema: Klassisch MVC - per Controller Template wiedergeben

  1. #1
    Contao-Nutzer
    Registriert seit
    29.12.2020.
    Beiträge
    3

    Standard Klassisch MVC - per Controller Template wiedergeben

    Hallo, ich bin absolut neu im Umgang mit Contao. Ich habe mir die Docu durchgelesen, aber nicht wirklich gefunden wie man ein Template in einem Controller "lädt".

    Ich würde gerne so etwas machen:

    PHP-Code:
    // src/Controller/ProductController.php
    namespace App\Controller;

    use 
    Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
    use 
    Symfony\Component\HttpFoundation\Response;

    class 
    ProductController extends AbstractController
    {
        public function 
    index(): Response
        
    {
            
    // ...

            // the `render()` method returns a `Response` object with the
            // contents created by the template
            
    return $this->render('product/index.html.twig', [
                
    'category' => '...',
                
    'promotions' => ['...''...'],
            ]);

            
    // the `renderView()` method only returns the contents created by the
            // template, so you can use those contents later in a `Response` object
            
    $contents $this->renderView('product/index.html.twig', [
                
    'category' => '...',
                
    'promotions' => ['...''...'],
            ]);

            return new 
    Response($contents);
        }

    Da es in Contao keine Twig templates gibt sondern hier ein eigenes Template System genutzt wird hatte ich die Hoffnung, dass mir jemand mit seinem Wissen helfen kann. Ich brauche eine Art FrontendModul, dem ich im Quellcode eine Route verpassen kann.

    Was ich nicht möchte ist diese Route im Backend einfügen. Da weiß ich wie ich vorgehen müsste.

    Im PageController gab es ein Beispiel, welches vielversprechend aussah, da bin ich aber nicht weiter gekommen:

    PHP-Code:
    // src/Controller/Page/ExamplePageController.php
    namespace App\Controller\Page;

    use 
    Contao\CoreBundle\ServiceAnnotation\Page;
    use 
    Contao\PageModel;
    use 
    Contao\PageRegular;
    use 
    Symfony\Component\HttpFoundation\Response;

    /**
     * @Page(contentComposition=true)
     */
    class ExamplePageController
    {
        public function 
    __invoke(PageModel $pageModel): Response
        
    {
            
    // The legacy framework relies on the global $objPage variable
            
    global $objPage;
            
    $objPage $pageModel;

            
    // Render the page using the PageRegular handler from the legacy framework
            
    return (new PageRegular())->getResponse($pageModeltrue);
        }


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

    Standard

    Zitat Zitat von Richidd Beitrag anzeigen
    Da es in Contao keine Twig templates gibt sondern hier ein eigenes Template System genutzt wird
    Contao selbst nutzt auch Twig Templates für verschiedene Bereiche.

    Aber dein Controller hat ja grundsätzlich bisher nichts mit Contao zu tun. Du kannst dort ganz normal dein Twig Template rendern lassen.

  3. #3
    Contao-Nutzer
    Registriert seit
    29.12.2020.
    Beiträge
    3

    Standard

    Hi Spooky,

    danke für deine Antwort. Ich habe hier das Problem, dass ich eine Seite mit einem bestehenden Template bzw. Theme habe (Nicht Twig, die Seite wurde mal von Contao 3.x migriert). Ich möchte gern einen Controller nehmen und das bestehende Site-Template nutzen und darin meinen Inhalt einfügen. Also in den Content Bereich einfach HTML-Code ausgeben. Aber eben alles per Code und ohne Backend.

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

    Standard

    Das heißt, du willst etwas in einem bestehenden Seitenlayout ausgeben? Dazu verwendest du Inhaltselemente und Frontendmodule.

    Page Controller ab Contao 4.10 ermöglichen es dir in der Seitenstruktur registrierte Controller einfügen zu können. Inhalte an bestimmten Stellen des Seitenlayouts musst du aber dann dennoch über den "regulären" Weg einfügen.

  5. #5
    Contao-Nutzer
    Registriert seit
    29.12.2020.
    Beiträge
    3

    Standard

    Hi Spooky,

    genau das möchte ich machen Also gibt es nur den Umweg die Route über den "regulären" weg einzubinden. Schade. Ich hatte die Hoffnung, dass ich irgendwie anders eine Seite gerendert bekomme. Na gut, dann muss ich das mal so weitergeben und versuchen die Anforderungen an unser Modul so anzupassen.

    Vielen Dank für deine Zeit!

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
  •