Artikel
von
© Copyright bei Patrick Froch und easy Solutions IT. Dieses Werk ist lizenziert unter Creative Commons BY-NC-SA.

Manchmal möchte man im Contao-Backend eine Seite ausgeben, die keine direkte Beziehung zu einer Tabelle hat. Sei es wie bei der Systemwartung oder einfach nur eine Hilfeseite. In diesem Beitrag wird letzteres beispielhaft umgesetzt.

Ordnerstruktur

Wir benötigen für die Ausgabe natürlich einige Ordner und Dateien. Ich habe die Struktur hier einmal abgebildet und werde nun nach und nach den Aufbau erläutern.

Autoload

Zunächst legen wir den Autoload-Eintrag für die Ausgabeklasse und das Template in der Datei system/modules/easy_page/config/autoload.php an.

Konfiguration

Nun erstellen wir die Konfiguration für unsere Backend-Seite (system/modules/easy_page/config/config.php). Es ist fast wie ein normaler Backend-Eintrag, nur dass es keine Tabelle gibt, sondern eine Callback-Methode.

Sprachdatei

Damit der Menüpunkt nun auch in deutsch angezeigt wird, erstellen wir die entsprechende Sprachdatei (system/modules/easy_page/languages/de/modules.php).

Ausgabe

Jetzt fehlt nur noch die Klasse für die Ausgabe. Wir speichern folgendes in der Datei system/modules/easy_page/classes/contao/EasyPage.php.

Ich habe mich entschieden in der Klasse nur ein Template zu nutzen, um die Ausgabe zu erzeugen. So kann man zwar die Hilfeseite nicht übersetzen, aber den ganzen Text in eine Sprachdatei zu stecken, fand ich auch nicht gut. Es wäre aber zum Beispiel auch möglich unterschiedliche Templates für die einzelnen Sprachen anzulegen und entsprechend der eingestellten Sprache zu laden.

Template

Als letztes benötigen wir noch das Template mit der Ausgabe (system/modules/easy_page/templates/help.html5).

Hier wird nur ein Blindtext ausgegeben, man könnte aber ebenso gut beliebige Programmabläufe verarbeiten (wie bei der Systemwartung) oder Formulare ausgeben.

Ergebnis

Das Ergebnis könnte dann ungefähr so aussehen:

Backend

Zurück

Kommentare

Kommentar von Nina |

Die Seite steht am Ende der Navigation. Wie bekommt man sie ganz an den Anfang? Also z.B. in "Inhalte" noch vor "Artikel"?

Antwort von Patrick Froch

Hallo Nina,

dazu musst Du den Eintrag in der Datei config/config.php wie folgt anpassen:

$arrMyExt['mynewextension']['help'] = array(
    'callback'  => '\esit\easy_page\classes\contao\EasyPage',
    'icon'      => 'system/modules/easy_page/assets/img/icon.png'
);

array_insert($GLOBALS['BE_MOD'], 0, $arrMyExt);

Da der Eintrag dann aber nicht mehr in der Rubrik "System" angezeigt wird, musst Du noch einen Eintrag in die Sprachdatei languages/de/modules.php einfügen:

$GLOBALS['TL_LANG']['MOD']['mynewextension']    = array('Hilfe', 'Contao-Backend-Hilfe');

Die Reihenfolge lässt sich aber nicht ganz genau festlegen, da eine andere Erweiterung ja ebenfalls ihre Einträge ganz oben platzieren kann. Hier gilt dann, wer zuletzt komm steht ganz oben. ;)

EDIT: Um den Eintrag unter Inhalte anzuzeigen muss der Eintrag in der Datei config/config.php wie folgt aussehen:

$arrMyExt['help'] = array(
    'callback'  => '\esit\easy_page\classes\contao\EasyPage',
    'icon'      => 'system/modules/easy_page/assets/img/icon.png'
);

array_insert($GLOBALS['BE_MOD']['content'], 0, $arrMyExt);

Dann entfällt auch der Eintrag in der Datei languages/de/modules.php. Dies macht aber in meinen Augen wenig Sinn, da es sich ja nicht um einen Inhalt fürs Frontend handelt.

Kommentar von Falk |

Hallo,

könnten Sie dies auch für Contao 4.3 erläutern? Wir stellen gerade auf Contao 4 um und finden leider hierzu nichts in der "Super Doku" *Ironieoff* wie man die autoload.php und darin befindliche classen für ein Backend Menu Eintrag ansteuert... :(

Vielen Dank :-)

Antwort von Patrick Froch

Hallo,

wie man eine Contao4-Erweiterung als Bundle erstellt, habe ich bereits in dem Artikel "Contao 4: Erweiterung als Bundle" beschreiben. Außerdem ist es auch möglich eine Contao3-Erweiterung in Contao4 zu nutzen. Sie wird einfach unter `TL_ROOT/system/modules/` gespeichert und dann wird z.B. folgendes in die `TL_ROOT/app/AppKernel.php` eingetragen:

public function registerBundles()
{
    $bundles = [
        // ...
        new ContaoModuleBundle('ORDNERderERWEITERUNG', $path);
    );
}

Dann sollte die Erweiterung mit Contao4 funktionieren. Ob dies in alle Fälle funktioniert, kann ich nicht sagen. Bei meinen Tests hat es bis jetzt aber geklappt.

Einen Kommentar schreiben

Was ist die Summe aus 3 und 3?