Contao-Camp 2024
Ergebnis 1 bis 1 von 1

Thema: fe_page für JSON Ausgabe (Headless)

  1. #1
    Contao-Nutzer Avatar von holist
    Registriert seit
    27.08.2009.
    Ort
    Karlsruhe
    Beiträge
    95
    Partner-ID
    5798

    Standard fe_page für JSON Ausgabe (Headless)

    Hallo zusammen,
    neben der Contao Content API (Git) habe ich eine erweiterte Ausgabe benötigt. So können auf diese Weise ein React/Angular System angebunden werden. Es können auf diese Weise POST/GET Requests verarbeitet werden.

    Wir verwenden mehrere Domains (plus Staging), weshalb hier auch hauch eine Abfrage zur aktuellen URL enthalten ist.

    Die Haupt-Navigation gebe ich auf einer extra Seite/URL aus, wo nur das Navi-Modul eingebunden ist und auch JSON übergibt. Um die aktive Seite im React-Frontend zu ermitteln geb ich im BODY als data-attribute die aktuelle pageId aus. Ich habe in den Navigationstemplates die pageId per data-attribute an jeden Menüpunkt gehängt, somit kann ich Frontend ermitteln, welche Seite in der Navi gerade aktiv ist. Nicht sonderlich elegant aber es funktioniert.

    Um Vorschau-/Freigabe Optionen an das Frontend zu übergeben habe ich verschiedene Parameter aus der global $objPage ausgegeben. Hier ist extra zu erwähnen, dass Contao nicht nach außen für Besucher geöffnet ist. Nur das Frontend hat ein Cache-System und ist nach außen öffentlich.
    Die Ausgabe der jQuery Libs kann in React/Angular Probleme machen. Wir ware in diesem Fall (historisch gewachsen) auf bestehende Libs angewiesen und haben diese mit https://requirejs.org in den Griff bekommen. Wir müssen das JS vorher bauen und dann als Paket übergeben.

    Hier ist das fe_page Template für alle die ähnliche Verarbeitungsmöglichkeiten benötigen:
    PHP-Code:
    <?php
    $curenturl 
    $this->replaceInsertTags'{{env::files_url}}' );
    global 
    $objPage;
    //var_export($objPage);
    //$this->dumpTemplateVars();

    echo json_encode([
        
    'navname'=>$objPage->title,
        
    'pageid'=>$objPage->id,
        
    'published'=>$objPage->published,
        
    'protected'=>$objPage->protected,
        
    'robots'=>$this->robots,
        
    'title'=>$objPage->pageTitle,
        
    'description'=>$this->description,
        
    'head'=>"",
        
    'stylesheets'=>[
            
    $curenturl."files/cto_layout_ls/css/ls_cto_custom.css",
            
    $curenturl."files/cto_layout/css/font-awesome.min.css",
            
    $curenturl."files/cto_layout/css/animate.css",
            
    $curenturl."bundles/contaoswiper/swiper.min.css",
            
    $curenturl."system/modules/lightcase/assets/css/lightcase.css",
        ],
        
    'javascripts'=>[
            
    $curenturl."files/cto_layout_ls/scripts2/bootstrap.js"
        
    ],
        
    'html' => $this->main

    ]);
    ?>
    Viel Spaß, vielleicht kann es noch jemand brauchen.
    Frohes Schaffen und Gruß, Kai
    Geändert von holist (02.06.2021 um 21:57 Uhr)

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
  •