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
Lesezeichen