Handbuch für Contao 3.4

Inhaltsverzeichnis

1. Einleitung 2. Installation i. Contao installieren ii. Den Safe Mode Hack verwenden iii. Manuelles Update iv. Live Update Service v. Eine Installation umziehen vi. Den Live-Server konfigurieren 3. Administrationsbereich i. Datensätze auflisten ii. Datensätze bearbeiten iii. Backend-Tastaturkürzel 4. Seiten verwalten i. Komponenten ii. Themes iii. Stylesheets iv. Module v. Seitenlayouts vi. Seitentypen 5. Inhalte verwalten i. Artikel ii. Nachrichten iii. Termine iv. RSS-/Atom-Feed v. Newsletter vi. Formulare vii. Kommentare viii. Templates ix. Markdown x. Inserttags 6. Systemadministration i. Benutzer und Gruppen ii. Erweiterungen iii. Systemwartung 7. Data Container Arrays i. Referenz ii. Paletten iii. Callbacks 8. Contao anpassen i. Internen Cache umgehen ii. Konfiguration anpassen iii. Eigene Felder hinzufügen iv. TinyMCE anpassen v. Methoden überschreiben vi. Contao-Hooks 9. Das Extension Repository i. Eine Erweiterung anlegen ii. Eine Freigabe hinzufügen iii. Die Dateien hochladen

1 Handbuch für Contao 3.4

iv. Dateien aus einem GitHub-Repository hinzufügen v. Eine Übersetzung hinzufügen vi. Abhängigkeiten speichern vii. Die Erweiterung veröffentlichen 10. Contao-Entwicklungsprozess i. Tickets erstellen

2 Handbuch für Contao 3.4

Handbuch für Contao 3.4

Dies ist das offizielle Handbuch für Anwender und Entwickler. Die neuste Version ist unter docs.contao.org erhältlich.

Inhaltsverzeichnis

Einleitung Installation Contao installieren Den Safe Mode Hack verwenden Manuelles Update Live Update Service Eine Installation umziehen Den Live-Server konfigurieren Administrationsbereich Datensätze auflisten Datensätze bearbeiten Backend-Tastaturkürzel Seiten verwalten Komponenten Themes Stylesheets Module Seitenlayouts Seitentypen Inhalte verwalten Artikel Nachrichten Termine RSS-/Atom-Feed Newsletter Formulare Kommentare Templates Markdown Inserttags Systemadministration Benutzer und Gruppen Erweiterungen Systemwartung Data Container Arrays Referenz Paletten Callbacks Contao anpassen Internen Cache umgehen Konfiguration anpassen Eigene Felder hinzufügen TinyMCE anpassen Methoden überschreiben

Einleitung 3 Handbuch für Contao 3.4

Contao-Hooks Das Extension Repository Eine Erweiterung anlegen Eine Freigabe hinzufügen Die Dateien hochladen Dateien aus einem GitHub-Repository hinzufügen Eine Übersetzung hinzufügen Abhängigkeiten speichern Die Erweiterung veröffentlichen Contao-Entwicklungsprozess Tickets erstellen

Licence

The Contao documentation is licensed under a Creative Commons Attribution 3.0 License license (CC BY-NC-SA 3.0). If you want to redistribute a modified or unmodified version of the documentation, you can do so under the license terms.

If you contribute to the documentation, e.g. by creating pull requests, you grant us full usage rights of any content you create or upload. You also ensure that your content does not violate any third-party rights.

We are not claiming exclusive usage rights, therefore you are free to use your contributed content (e.g. texts or images) in any other project as well.

Einleitung 4 Handbuch für Contao 3.4

Installation

Die folgenden Abschnitte erklären die Installation und Aktualisierung von Contao. Sie lernen wie man das Contao-Installtool verwendet, wie man eine Installation per FTP synchronisiert, wie man den Safe Mode Hack einrichtet und wie man einen Webserver für Contao konfiguriert.

Installation 5 Handbuch für Contao 3.4

Contao installieren

Laden Sie sich zunächst das aktuelle Contao-Archiv herunter und entpacken Sie es auf Ihrem lokalen Rechner. Verschieben Sie die Dateien in das htdocs -Verzeichnis Ihrer XAMPP-Installation oder kopieren Sie sie mit einem FTP- Programm (z.B. WinSCP) auf Ihren Server. Der Basisordner heißt wahrscheinlich htdocs , httpdocs , html oder public_html .

Wenn Sie SSH-Zugriff auf den Server haben, können Sie alternativ folgende Befehle verwenden:

curl -L http://download.contao.org | tar -xzp

Das Contao-Installtool

Um das Contao-Installtool aufzurufen, hängen Sie einfach /contao/install. an die URL Ihrer Contao-Installation an. Beachten Sie, dass das Installtool mit einem Passwort gegen Brute Force-Attacken geschützt ist und gesperrt wird, wenn dreimal hintereinander ein falsches Passwort eingegeben wurde. Um diese Sperre aufzuheben, öffnen Sie die Datei system/config/localconfig.php in einem Texteditor, finden Sie die folgende Zeile und setzen Sie sie auf 0 .

$GLOBALS['TL_CONFIG']['installCount'] = 0; // Hebt die automatische Sperre auf

Datenbankverbindung herstellen

Melden Sie sich an der Administrationsoberfläche Ihres Servers (z.B. "Plesk" oder "cPanel") an und erstellen Sie eine neue Datenbank für Contao. Geben Sie die Zugangsdaten im Contao-Installtool ein und beachten Sie die abweichende Schreibweise UTF8 anstatt UTF-8 in MySQL!

Tabellen aktualisieren

Contao prüft bei der Installation die Tabellen der Datenbank und gibt eine Liste empfohlener Änderungen aus, wenn diese nicht aktuell sind. Lesen Sie diese Empfehlungen aufmerksam, denn Contao kennt nur seine eigenen Tabellen und wird versuchen, vermeintlich nicht benötigte Tabellen anderer Programme "aufzuräumen". Bestätigen Sie die Änderungen durch Anklicken der "Datenbank aktualisieren"-Schaltfläche.

Ein Template importieren

Ein Template ist eine vorkonfigurierte Webseite, die eine beispielhafte Seitenstruktur und verschiedene Stylesheets zur Formatierung der Contao Core-Module und -Inhaltselemente enthält.

Seit Version 3.2.11 ist die Beispiel-Webseite nicht mehr im Downloadpaket enthalten. Abhängig von der eingesetzten Version kann die neue Contao Official Demo oder die alte Music Academy als Erweiterung installiert werden. Aufschluss über Kompatibilität gibt das Erweiterungsverzeichnis.

Vorgehen zur Installation der Demo:

1. Eine frische Contao Installation mit Admin-Account erstellen 2. Als Admin im Backend anmelden 3. Passende Erweiterung über das Extension Repository hinzufügen 4. Als Admin vom Backend abmelden 5. Installtool erneut aufrufen

Contao installieren 6 Handbuch für Contao 3.4

Um ein Template zu importieren, wählen Sie den Eintrag aus dem Drop-Down-Menü und klicken Sie auf die "Template importieren"-Schaltfläche.

Beim Import eines Templates werden bestehende Daten überschrieben!

Administrator-Konto erstellen

Wenn Sie kein Template importiert haben, müssen Sie ein Administrator-Konto erstellen, damit Sie sich am Contao- Backend anmelden können. Danach ist der Installationsprozess abgeschlossen. Der Link unten rechts leitet Sie zur Backend-Anmeldung weiter. Wenn Sie die Beispielwebseite importiert haben, können Sie sich dort als Benutzer "k.jones" mit dem Passwort "kevinjones" anmelden.

Contao Demo installieren

Siehe Vorgehen zur Installation der Demo im Abschnitt Ein Template importieren weiter oben.

Suchmaschinenfreundliche URLs verwenden

Wenn Sie einen Apache-Webserver haben und mod_rewrite verwenden dürfen, können Sie Contao dazu veranlassen, suchmaschinenfreundliche URLs zu generieren, die wie statische HTML-Seiten aussehen. Die dazu benötigten Rewrite- Regeln sind in der .htaccess.default -Datei im Contao-Verzeichnis gespeichert. Benennen Sie diese Datei um in .htaccess , damit sie vom Apache-Server erkannt wird, und rufen Sie anschließend das Modul "Einstellungen" im Contao- Backend auf. Wählen Sie die Option "URLs umschreiben" in der Gruppe "Frontend-Einstellungen" aus und speichern Sie Ihre Änderungen. Contao generiert jetzt statische URLs wie z.B. home.html anstatt index.php?id=12 .

Contao installieren 7 Handbuch für Contao 3.4

Den Safe Mode Hack verwenden

Eventuell haben Sie beim Aufruf des Contao-Installtools die Mitteilung erhalten, dass die lokale Konfigurationsdatei nicht beschreibbar ist.

Dateizugriffsrechte

Die Bezeichnung "Safe Mode Hack" ist eigentlich nicht korrekt, da sie impliziert, dass das Problem durch den PHP safe_mode verursacht würde. Tatsächlich wird es jedoch von unzureichenden Dateizugriffsrechten verursacht und tritt auch bei deaktiviertem safe_mode auf, daher sollte es richtiger "File Permission Hack" heißen.

PHP als Apache-Modul läuft normalerweise als Benutzer wwwrun , www-data oder nobody , wohingegen die Dateien, die Sie per FTP hochgeladen haben, Ihrem Benutzer (z.B. web4 oder ab5678 ) gehören. Der Server verweigert Benutzern grundsätzlich den Zugriff auf fremde Dateien und macht auch für das PHP-Skript Contao keine Ausnahme.

FTP für Dateioperationen verwenden

Um das Rechteproblem zu umgehen, baut Contao eine FTP-Verbindung auf und legt die Ressourcen unter dem FTP- Benutzer an. Sie müssen dafür nur Ihre FTP-Zugangsdaten im Installtool eintragen. Achten Sie dabei besonders auf den korrekten relativen Pfad vom FTP-Basisordner zum Contao-Verzeichnis (z.B. html/ , public_html/ oder httpdocs/ ).

Ein paar wenige Verzeichnisse benötigen trotz Safe Mode Hack Schreibrechte, weil PHP direkt auf sie zugreift:

assets/images

assets/images/*

Den Safe Mode Hack verwenden 8 Handbuch für Contao 3.4

system/logs

system/tmp

Die Schreibrechte (CHMOD 777) werden vom Installtool automatisch gesetzt und müssen in der Regel nicht manuell nachgearbeitet werden. Falls dies doch einmal notwendig sein sollte, passen Sie bitte nur diese drei Verzeichnisse an – auch wenn Sie in einem Tutorial oder dem Contao-Forum etwas anderes gelesen haben sollten!

Den Safe Mode Hack verwenden 9 Handbuch für Contao 3.4

Manuelles Update

Bei der manuellen Aktualisierung einer Contao-Installation können Sie entweder das komplette Contao-Archiv auf den Server übertragen (Dateien ersetzen) oder nur die geänderten Dateien hochladen (Dateien synchronisieren). In jedem Fall sollten Sie vorher folgende Dateien und Ordner sichern - nur für den Fall, dass ein Fehler auftritt oder Sie sie versehentlich überschreiben:

files/*

system/config/dcaconfig.php

system/config/initconfig.php

system/config/langconfig.php

system/config/localconfig.php

templates/*

Dieses Backup umfasst Ihre lokale Konfiguration, eventuell angepasste Templates sowie die hochgeladenen Dateien.

Dateien ersetzen

Die Dateien einer Contao-Installation zu ersetzen ist relativ simpel. Übertragen Sie einfach das Contao-Archiv auf Ihren Server oder entpacken Sie es auf Ihrem lokalen Rechner und kopieren Sie die Dateien anschließend mit einem FTP- Programm (wir empfehlen WinSCP). Danach stellen Sie die Dateien aus dem Backup wieder her und entfernen eventuelle Überbleibsel vorheriger Contao-Versionen.

Achtung: Wenn Sie Third-Party-Erweiterungen installiert haben, müssen Sie diese ebenfalls sichern und nach dem Update wiederherstellen oder darauf achten, sie gar nicht erst zu überschreiben. Andernfalls müssen diese Module neu installiert werden, was bei einigen Erweiterungen zu Datenverlust führen kann!

Dateien synchronisieren

Um eine Contao-Installation zu synchronisieren, können Sie entweder das Unix Diff-Programm oder einen FTP-Client verwenden. Unix-Utilities werden normalerweise nur von Serveradministratoren verwendet, daher werden sie hier nicht erklärt. Um Dateien per FTP zu synchronisieren, öffnen Sie WinSCP und verbinden Sie sich mit dem Server. Erstellen Sie ein Backup der oben genannten Dateien und navigieren Sie dann zum Contao-Verzeichnis und klicken Sie auf die "Dateien synchronisieren"-Schaltfläche.

Manuelles Update 10 Handbuch für Contao 3.4

Treffen Sie Ihre Auswahl wie in der Abbildung und wählen Sie unbedingt die Option "Änderungsvorschau" aus, damit Sie die zu aktualisierenden Dateien noch einmal prüfen können. Bestätigen Sie danach die Einstellungen im Vorschaufenster und achten Sie besonders auf die zu löschenden Ressourcen! Klicken Sie "OK", um den Synchronisationsvorgang zu starten.

Die Datenbank aktualisieren

Nachdem Sie die Contao-Dateien aktualisiert haben, müssen Sie noch die Datenbank auf den neuesten Stand bringen. Diese Arbeit übernimmt das Contao-Installtool für Sie. Geben Sie Ihr Passwort ein, scrollen Sie bis zum Datenbank- Abschnitt und bestätigen Sie die Änderungen.

Den internen Cache leeren

Zum Schluss muss noch der interne Cache (DCA- und Sprachdateien) geleert und neu angelegt werden. Gehen Sie im

Manuelles Update 11 Handbuch für Contao 3.4

Backend zur "Systemwartung" und wählen unter "Daten bereinigen" den Punkt "Internen Cache leeren" aus. Bestätigen Sie die Aktion mit "Daten bereinigen".

Nun erscheint in der Kopfzeile vom Backend ein Hinweis, dass der interne Cache noch nicht aufgebaut wurde. Erstellen Sie den internen Cache in dem Sie in der Kopfzeile "Den Cache aufbauen" anklicken.

Manuelles Update 12 Handbuch für Contao 3.4

Live Update Service

Der Contao Live Update-Service ist ein kommerzielles Contao Add-on von iNet Robots, der Firma des Contao-Gründers und Kernentwicklers, Leo Feyer. Es ermöglicht die Aktualisierung Ihrer Installation mit wenigen Klicks im Backend, ohne ein Contao-Archiv herunterzuladen oder die Dateien mit einem FTP-Programm zu synchronisieren.

Eine Contao Live Update ID bestellen

Das Live Update umfasst folgende Funktionen:

Beliebige Up- und Downgrades auf alle Contao-Versionen Automatisches Backup der Datenbank vor dem Update Individuelle Prüfung und Vervollständigung der Contao-Installation Vergleich der angepassten Templates mit den Originaldateien

Versionsauswahl

Template-Unterschiede

Live Update Service 13 Handbuch für Contao 3.4

Fehlersuche

99% aller Live Update-Probleme sind auf unzureichende Datei-Zugriffsrechte zurück zu führen. Contao benötigt Schreibrechte, um Dateien und Ordner zu verwalten, daher sollten Sie als erstes Ihre Serverkonfiguration prüfen und sicherstellen, dass der Safe Mode Hack so wie in diesem Handbuch beschrieben konfiguriert ist!

Support erhalten

Wenn Sie Probleme bei der Aktivierung Ihrer Live Update ID haben, wenden Sie sich bitte an den iNet Robots-Support. Bei Problemen mit dem Safe Mode Hack oder der Benutzung von Contao, wählen Sie bitte eine passende Support-Option auf der Support-Seite.

Live Update Service 14 Handbuch für Contao 3.4

Eine Installation umziehen

Der Umzug einer Contao-Installation von einem lokalen Server auf einen Live-Server ist nicht viel anders als eine neue Installation, außer dass Sie die Dateien Ihrer lokalen Installation statt denen des Contao-Archivs sowie einen SQL-Dump Ihrer lokalen Datenbank verwenden.

Dateien kopieren

Öffnen Sie Ihr FTP-Programm, verbinden Sie sich mit dem Zielserver und übertragen Sie alle Dateien Ihrer lokalen Contao- Installation.

Datenbank exportieren

Ein MySQL-Dump lässt sich am einfachsten mit der Datenbankverwaltung "phpMyAdmin" erstellen. Als Serveradministrator können Sie natürlich auch das Programm mysqldump verwenden. Melden Sie sich an "phpMyAdmin" an, wählen Sie die zu exportierende Datenbank und klicken Sie auf die "Export"-Schaltfläche im oberen Menü. Um Kompatibilitätsprobleme zwischen verschiedenen MySQL-Versionen zu minimieren, ist es wichtig, die Einstellungen für den Export gemäß des folgenden Screenshots anzupassen:

Datenbank importieren

Öffnen Sie "phpMyAdmin" auf dem Zielserver und erstellen Sie eine neue Datenbank für Contao. Je nach

Eine Installation umziehen 15 Handbuch für Contao 3.4

Serverkonfiguration ist das eventuell nur über die Verwaltungsoberfläche (z.B. "Plesk" oder "cPanel") möglich. Wählen Sie die neue leere Datenbank aus und klicken Sie auf die "Import"-Schaltfläche im oberen Menü. Laden Sie dann den SQL- Dump der lokalen Datenbank hoch und starten Sie den Import.

Datenbank-Konfiguration anpassen

Als Letztes öffnen Sie das Contao-Installtool der neuen Installation (das Passwort ist dasselbe wie für Ihre lokale Installation) und passen wenn nötig die Datenbank-Zugangsdaten an. Danach können Sie sich wie gewohnt mit Ihrem Benutzernamen im Backend anmelden.

Eine Installation umziehen 16 Handbuch für Contao 3.4

Den Live-Server konfigurieren

In diesem Kapitel geht es nicht darum, den Apache-Dienst zu installieren oder PHP zu kompilieren, was auf einem Shared- Hosting-Server ohnehin nicht möglich ist. Stattdessen wird erklärt, wie man die Contao-Systemvoraussetzungen prüft und PHP 5 aktiviert.

Contao-Systemvoraussetzungen

Contao benötigt einen Webserver wie Apache oder IIS mit PHP- und MySQL-Support. PHP muss mindestens in der Version 5.3.7 vorliegen und MySQL in der Version 5.0.3. Außerdem benötigen Sie die PHP-Erweiterungen "GDlib" (Bildbearbeitung), "DOM" (XML-Dateien), "SOAP" (Extension Repository) und Phar (Live Update) sowie optional "mbstring" (internationale Zeichen) und "mcrypt" (Verschlüsselung). Contao wurde erfolgreich in allen modernen Browsern wie (ab Version 2) oder (ab Version 8) getestet.

Der Contao-Check

Laden Sie den Contao-Check herunter und finden Sie heraus, ob Ihr Server die Contao-Systemvoraussetzungen erfüllt. Der Contao-Check prüft, ob Sie das Extension Repository und das Live Update nutzen können und ob Sie den Safe Mode Hack benötigen oder nicht. Je nach Systemkonfiguration können Sie mit Hilfe des Web-Installers eine neue Contao- Installation aufsetzen oder eine bestehende Installation prüfen.

Entpacken Sie die Zip-Datei, übertragen Sie den Ordner check in Ihr Contao-Verzeichnis und öffnen Sie ihn in einem Browser.

Den Contao-Check herunterladen | Zum Projekt auf GitHub

Provider-spezifische Einstellungen

Es gibt ein paar wenige große Internet Service Provider, die spezielle Einstellungen für den Betrieb von Contao erfordern. Zum Glück sind sie nur die Ausnahme von der Regel. Die Provider-spezifische Einstellungen finden Sie im Contao-Forum. Sorgenfreies Contao-Hosting erhalten Sie bei den Contao Hosting-Partnern.

Den Live-Server konfigurieren 17 Handbuch für Contao 3.4

Administrationsbereich

Um den Administrationsbereich (Backend) aufzurufen, hängen Sie einfach /contao an die URL Ihrer Contao-Webseite an. Die Konten sind gegen Brute Force-Attacken geschützt und werden für 5 Minuten gesperrt, wenn dreimal hintereinander ein falsches Passwort eingegeben wurde. Beachten Sie dass die Groß-/Kleinschreibung bei Benutzername und Passwort berücksichtigt wird.

Administrationsbereich 18 Handbuch für Contao 3.4

Datensätze auflisten

Die Contao Core-Engine unterstützt drei Ansichten: eine einfache Liste ("list view"), eine nach der übergeordneten Tabelle gruppierte Liste ("parent view") und eine hierarchische Liste ("tree view"). Diese drei Ansichten werden zur Darstellung der Daten im Backend verwendet.

List View

Der "List View" listet die Datensätze einer Tabelle in einer bestimmten Reihenfolge auf, normalerweise gruppiert nach Anfangsbuchstabe.

Parent View

Der "Parent View" listet die Datensätze einer Kindtabelle auf, die sich auf einen Datensatz der Elterntabelle beziehen. Eltern-Kind-Relationen kommen häufig vor in Contao, z.B. bei Artikeln und Inhaltselementen, Archiven und Nachrichten oder Stylesheets und Formatdefinitionen.

Datensätze auflisten 19 Handbuch für Contao 3.4

Tree View

Der "Tree View" listet Datensätze auf, die in einer hierarchischen Struktur organisiert sind. Contao unterstützt sowohl hierarchische Beziehungen innerhalb einer Tabelle (z.B. Seitenstruktur) als auch Kindtabellen, die sich auf hierarchische Elterntabellen beziehen (z.B. Artikel und Seiten).

Datensätze auflisten 20 Handbuch für Contao 3.4

Daten sortieren und filtern

Contao bietet mehrere Möglichkeiten, Auflistungen zu sortieren und zu filtern, damit Sie auch bei mehreren tausend Datensätzen den Überblick behalten. Viele Listen können anhand eines oder mehrerer Felder eingeschränkt werden. Die meisten bieten zusätzlich eine Volltext-Suche an, die sogar reguläre Ausdrücke unterstützt. Um die Ladezeit zu optimieren, zeigt Contao immer nur 30 Datensätze auf einmal an.

Datensätze auflisten 21 Handbuch für Contao 3.4

Datensätze bearbeiten

Contao bietet etliche professionelle Funktionen, die das Bearbeiten von Daten so einfach und komfortabel wie möglich machen. Sie können zu früheren Versionen zurück gehen, gelöschte Datensätze wiederherstellen, Elemente via Clipboard verschieben und sogar mehrere Datensätze auf einmal bearbeiten. Die meisten dieser Funktionen sind über die Navigationssymbole aufrufbar.

Icons im List View

Der "List View" als einfachste Ansicht bietet nur die vier grundlegenden Befehle: bearbeiten, duplizieren, löschen und Info.

Icons im Parent View

Der "Parent View" bietet zwei zusätzliche Icons, um die Reihenfolge der Datensätze zu kontrollieren. Die Reihenfolge kann auch mittels Drag & Drop geändert werden. Dazu einfach auf das "Drag & Drop" Icon klicken und an die neue Position bewegen.

Datensätze bearbeiten 22 Handbuch für Contao 3.4

Icons im Tree View

Im "Tree View" werden weitere Icons benötigt, um die hierarchische Struktur abbilden zu können. Neben dem Kopieren eines einzelnen Datensatzes können auch ganze Teilbäume dupliziert und entweder in einen oder nach einem anderen Datensatz eingefügt werden.

Datensätze bearbeiten 23 Handbuch für Contao 3.4

Frühere Versionen wiederherstellen

Contao erstellt bei jedem Speichervorgang automatisch eine neue Version eines Datensatzes. Sobald es mehr als eine Version gibt, erscheint oberhalb des Formulars ein Drop-Down-Menü, mit dem Sie zu einer früheren Versionen zurück gehen können.

Durch Klick auf das Icon rechts des Drop-Down-Menüs werden die Unterschiede zwischen der aktuellen und der gewählten Version angezeigt.

Datensätze bearbeiten 24 Handbuch für Contao 3.4

Mehrere Datensätze bearbeiten

Die Möglichkeit, mehrere Datensätze auf einmal zu bearbeiten, hebt Contao klar von den Mitbewerbern ab. Wechseln Sie den Bearbeitungsmodus durch Anklicken der "Mehrere bearbeiten"-Schaltfläche und wählen Sie dann die zu bearbeitenden Datensätze und Felder aus.

Datensätze bearbeiten 25 Handbuch für Contao 3.4

Datensätze bearbeiten 26 Handbuch für Contao 3.4

Datensätze bearbeiten 27 Handbuch für Contao 3.4

Backend-Tastaturkürzel

Um den Workflow bei der Arbeit mit Contao zu beschleunigen, gibt es im Backend etliche Tastaturkürzel, mit denen sich bestimmte Befehle direkt aufrufen lassen. Zum Beispiel können Sie die Schaltfläche "Speichern" am Ende eines Eingabeformulars alternativ zur Bedienung mit der Maus auch mit dem Tastaturkürzel [Alt]+[s] ansteuern.

Allgemeine Tastaturkürzel

Tastaturkürzel Schaltfläche Erklärung

[Alt]+[h] Startseite Zur Startseite des Backend (Home).

[Alt]+[q] Abmelden Beendet die aktuelle Backend-Sitzung (Quit).

[Alt]+[t] Nach oben Springt zum Anfang der Seite (Top).

[Alt]+[b] Zurück Zurück zur vorherigen Seite (Back).

[Alt]+[n] Neuer Datensatz Legt einen neuen Datensatz an (New).

Mehrere [Alt]+[e] Wechselt in den "mehrere bearbeiten"-Modus (Edit multiple). bearbeiten

Öffnet die Frontend-Vorschau in einem neuen Fenster (Front end [Alt]+[f] Frontend-Vorschau preview).

Tastaturkürzel im Bearbeitungsmodus

Tastaturkürzel Schaltfläche Erklärung

[Alt]+[s] Speichern Speichert das aktuelle Eingabeformular (Save).

Speichern Speichert und schließt das aktuelle Eingabeformular (Save and close). Sie [Alt]+[c] und gelangen zurück zur vorherigen Seite. schließen

Speichert und schließt das aktuelle Eingabeformular (Save and go back). Sie Speichern [Alt]+[g] gelangen zurück zur übergeordneten Seite, z.B. von einem Inhaltselement und zurück direkt zur Artikelübersicht.

Speichern Speichert das aktuelle Eingabeformular (Save and edit) und wechselt zur [Alt]+[e] und Ansicht der Kind-Datensätze, z.B. beim Anlegen von Stylesheets. bearbeiten

[Alt]+[n] Speichern Speichert das aktuelle Eingabeformular und legt einen neuen Datensatz an und neu (Save and new).

Tastaturkürzel im Modus "mehrere bearbeiten"

Tastaturkürzel Schaltfläche Erklärung

Löscht alle ausgewählten Datensätze im Modus »mehrere bearbeiten« [Alt]+[d] Mehrere löschen (Delete).

[Alt]+[x] Mehrere Verschiebt alle ausgewählten Datensätze im Modus »mehrere verschieben bearbeiten«.

Kopiert alle ausgewählten Datensätze im Modus »mehrere bearbeiten« [Alt]+[c] Mehrere kopieren (Copy).

[Alt]+[v] Mehrere Überschreibt alle ausgewählten Datensätze im Modus »mehrere überschreiben bearbeiten«.

Backend-Tastaturkürzel 28 Handbuch für Contao 3.4

Die beschriebenen Tastaturkürzel funktionieren in dieser Form nur unter Windows. Mac-Nutzer müssen anstatt der [Alt] -

Taste [Ctrl]+[⌥ Opt] in Verbindung mit dem jeweiligen Kürzel verwenden. Zudem weicht Firefox unter Windows leider vom gewohnten Standard ab, dort müssen Sie [Alt]+[Umsch] in Verbindung mit dem gewünschten Kürzel drücken.

Backend-Tastaturkürzel 29 Handbuch für Contao 3.4

Seiten verwalten

Die folgenden Kapitel erklären, wie man Seiten in Contao verwaltet. Da Contao ein Seiten-basiertes CMS ist, sind Seiten und die Seitenstruktur die zentralen Elemente Ihrer Webseite und jeder Inhalt, der nicht mit einer Seite assoziiert ist, erscheint auch niemals im Frontend.

Seiten verwalten 30 Handbuch für Contao 3.4

Komponenten

Das Zusammenspiel von Seiten, Artikeln, Inhaltselementen und Modulen zu verstehen, ist der Schlüssel zum Erlernen von Contao. Wie bereits erwähnt, ist die Seitenstruktur das zentrale Element der Webseite. Besucher rufen grundsätzlich immer Seiten auf und niemals einzelne Artikel, wie es in einem Node-basierten Content Management System der Fall ist.

Das Diagramm verdeutlicht, dass Artikel und Layouts die beiden wichtigsten Komponenten einer Seite sind. Während Artikel die Inhalte einer Seite speichern, legt das Seitenlayout fest, wie diese auf der Webseite dargestellt werden. Layouts in Contao sind natürlich CSS-basiert und verwenden keine Layout-Tabellen. Auf den folgenden Seiten wird erklärt, wie man Stylesheets und Frontend-Module anlegt, sie zu einem Layout kombiniert und sie anschließend einer neu erstellten Seite zuweist.

Komponenten 31 Handbuch für Contao 3.4

Themes

Das Design einer Webseite besteht normalerweise aus Stylesheets, Frontendmodulen, Seitenlayouts, Dateien und Templates, die Sie im Contao-Backend verwalten können. Der Theme-Manager ändert diesen Ansatz nicht, er fügt lediglich eine Möglichkeit hinzu, die Ressourcen zu exportieren und wieder zu importieren (Video-Einführung ansehen).

Themes versus Frontend-Templates

Der Hauptunterschied zwischen Themes und Frontend-Templates ist, dass ein Frontend-Template eine vollständig vorkonfigurierte Beispielwebseite mit einer beispielhaften Seitenstruktur, Artikeln, Inhaltselementen und sogar Benutzern und Gruppen enthält. Ein Theme enthält dagegen nur das eigentliche Design der Webseite und kann deswegen importiert werden, ohne dass bestehende Daten verloren gehen.

Theme-Bestandteile

Ein Theme ist eine Gruppe von Stylesheets, Frontend-Modulen und Seitenlayouts, die alle in der Datenbank gespeichert sind und automatisch vom Theme Exporter erkannt werden. Sie werden diese Elemente in den nächsten Abschnitten näher kennenlernen. Ein Theme beinhaltet darüber hinaus meistens auch Bilder und andere Dateien aus dem Files- Verzeichnis sowie optional angepasste Templates aus dem Templates-Verzeichnis. Diese Ressourcen sind jedoch nicht automatisch mit dem Theme verlinkt und müssen deswegen in den Theme-Einstellungen hinzugefügt werden, damit sie beim Theme-Export berücksichtigt werden.

Themes 32 Handbuch für Contao 3.4

Theme-Export und -Import

Um ein Theme zu exportieren, klicken Sie einfach auf die Export-Schaltfläche und speichern Sie die .cto-Datei auf Ihrem lokalen Computer. Obwohl .cto eine proprietäre Dateiendung für Contao-Themes ist, handelt es sich dabei eigentlich um ZIP-Archive, die Sie mit jedem Programm entpacken können, das .zip-Dateien unterstützt. Um ein Theme zu reimportieren, übertragen Sie die .cto-Datei auf Ihren Webserver, öffnen Sie den Theme-Manager im Contao-Backend und klicken Sie auf "Theme importieren". Sie können mehrere Themes auf einmal importieren. Nachdem der Import abgeschlossen ist, können Sie das Seitenlayout des neuen Themes in der Seitenstruktur zuweisen.

Themes 33 Handbuch für Contao 3.4

Stylesheets

Barrierefreie Webseiten sollten immer mit CSS formatiert werden, daher enthält Contao ein "Stylesheets"-Modul, mit dem Sie Formatdefinitionen bequem im Backend verwalten können. Um die verschiedenen Contao-Elemente und -Module in einem Stylesheet zu referenzieren, müssen Sie deren Klassennamen kennen. Inhaltselement-Klassen beginnen mit "ce_" (z.B. "ce_text") und Modul-Klassen mit "mod_" (z.B. "mod_search"). Falls Sie sich nicht sicher sind, sehen Sie einfach im Quelltext der Webseite nach.

Jedes Stylesheet kann auf einen oder mehrere Medientypen und/oder eine bestimmte Version des Internet Explorers beschränkt werden, falls Sie einen der vielen darin enthaltenen Fehler gesondert beheben müssen. Achten Sie dabei auf die Reihenfolge der Formatdefinitionen, da frühere Anweisungen von späteren überschrieben werden können.

/* Zuerst den generellen Abstand setzen */ .mod_search { margin:24px; }

/* Danach die spezielle IE7-Anweisung */ *:first-child+html .mod_search { margin:18px; }

Stylesheets 34 Handbuch für Contao 3.4

Wäre die Reihenfolge umgekehrt, würde der allgemeine Abstand den IE-spezifischen Wert überschreiben.

Stylesheets 35 Handbuch für Contao 3.4

Module

Mit Hilfe von Frontend-Modulen können Sie Ihre Webseite um fast jede erdenkliche Funktionalität erweitern. Der Contao- Core enthält Module, um verschiedene Navigationsmodule zu erstellen, die Benutzerregistrierung und -anmeldung zu ermöglichen, die Webseite zu durchsuchen, RSS-Feeds zu importieren und vieles mehr. Module können im Backend unter "Themes" -> "Frontend-Module" konfiguriert werden.

Modul CSS-Klasse Beschreibung

Navigationsmenü mod_navigation Erzeugt ein Navigationsmenü aus der Seitenstruktur.

Individuelle Navigation mod_customnav Erzeugt ein individuelles Navigationsmenü.

Navigationspfad mod_breadcrumb Erzeugt einen Navigationspfad.

Quicknavigation mod_quicknav Erzeugt ein Drop-Down-Menü aus der Seitenstruktur.

Quicklink mod_quicklink Erzeugt ein individuelles Drop-Down-Menü.

Buchnavigation mod_booknav Erzeugt ein Buchnavigationsmenü.

Artikelnavigation mod_article_nav Erzeugt ein Seitenumbruch-Menü zur Artikelnavigation.

Sitemap mod_sitemap Erzeugt eine Liste aller Seiten aus der Seitenstruktur.

Login-Formular mod_login Erzeugt ein Anmeldeformular (Login).

Automatischer Logout - Meldet einen Benutzer automatisch ab (Logout).

Persönliche Daten mod_personalData Erzeugt ein Formular zur Bearbeitung der Benutzerdaten.

Registrierung mod_registration Erzeugt ein Formular zur Benutzerregistrierung.

Passwort vergessen mod_password Erzeugt ein Formular zur Passwort-Anforderung.

Konto schließen mod_closeAccount Erzeugt ein Formular zur Löschung eines Benutzerkontos.

Nachrichtenliste mod_newslist Fügt der Seite eine Nachrichtenliste hinzu.

Nachrichtenleser mod_newsreader Stellt einen einzelnen Nachrichtenbeitrag dar.

Nachrichtenarchiv mod_newsarchive Fügt der Seite ein Nachrichtenarchiv hinzu.

Nachrichtenarchiv- mod_newsmenu Erzeugt ein Menü zur Navigation des Nachrichtenarchivs. Menü

Kalender mod_calendar Fügt der Seite einen Kalender hinzu.

Eventleser mod_eventreader Stellt ein einzelnes Event dar.

Eventliste mod_eventlist Listet alle Events eines bestimmten Zeitraums auf.

Eventliste-Menü mod_eventmenu Erzeugt ein Menü zur Navigation der Eventliste.

Abonnieren mod_subscribe Erzeugt ein Formular zum Abonnieren von Verteilern.

Kündigen mod_unsubscribe Erzeugt ein Formular zum Kündigen von Abonnements.

Newsletterliste mod_nl_list Fügt der Seite eine Newsletterliste hinzu.

Newsletterleser mod_nl_reader Stellt einen einzelnen Newsletter dar.

FAQ-Liste mod_faqlist Fügt der Seite eine Liste häufig gestellter Fragen hinzu.

FAQ-Leser mod_faqreader Stellt die Antwort zu einer häufig gestellten Frage dar.

Gibt die FAQ-Liste und den FAQ-Leser auf derselben Seite FAQ-Seite mod_faqpage aus.

Module 36 Handbuch für Contao 3.4

Formular mod_form Fügt der Seite ein Formular hinzu.

Suchmaschine mod_search Fügt der Seite ein Suchfomular hinzu.

Kommentare mod_comments Kommentare bzw. Gästebuch-Einträge verwalten.

Auflistung mod_listing Listet die Daten einer beliebigen Tabelle auf.

Flash-Film mod_flash Bindet einen Flash-Film in eine Seite ein.

Artikelliste mod_article_list Erzeugt eine Liste aller Artikel einer Spalte.

Zufallsbild mod_random_image Fügt der Seite ein zufällig ausgewähltes Bild hinzu.

Eigener HTML-Code - Erlaubt das Hinzufügen von eigenem HTML-Code.

RSS-Reader mod_rss_reader Fügt der Seite einen RSS-Feed hinzu.

Zugriffsschutz

Jedes Frontend-Modul kann geschützt werden, so dass es nur Gäste oder Benutzer einer bestimmten Mitgliedergruppe sehen können.

Module 37 Handbuch für Contao 3.4

Seitenlayouts

Seitenlayouts definieren den grundsätzlichen Aufbau einer Seite, wie z.B. die Anzahl der Spalten oder die Gesamtbreite, und sie legen fest, welche Frontend-Module in welcher Spalte angezeigt werden. Sie ermöglichen zudem das Einbinden von Stylesheets und RSS- bzw. Atom-Feeds sowie das Einfügen einer Google Analytics ID oder beliebigem JavaScript- Code, der für die Steuerung interaktiver Elemente und Plugins benötigt wird. Das Contao CSS-Framework teilt das Browserfenster automatisch in mehrere Layoutbereiche auf.

Das impliziert, dass Sie zum Zeitpunkt der Erstellung eines Seitenlayouts bereits die benötigten Stylesheets und Frondend- Module angelegt haben müssen. Daher wird folgende Reihenfolge beim Anlegen von Ressourcen empfohlen:

Erstellen der benötigten Stylesheets Erstellen der benötigten Frontend-Module Optionale Erstellung von Nachrichtenarchiven oder Kalendern Erstellen eines neuen Seitenlayouts und Einbindung der Komponenten

Seitenlayouts 38 Handbuch für Contao 3.4

Seitentypen

Der Typ einer Seite legt fest, ob sie statische Inhalte ausgibt, zu einer anderen Seite weiterleitet oder den Startpunkt einer Webseite innerhalb der Seitenstruktur markiert. Contao unterstützt folgende 6 Seitentypen:

Seitentyp Beschreibung

Reguläre Eine reguläre Seite enthält Artikel und Inhaltselemente. Sie verhält sich wie eine statische HTML- Seite Seite.

Externe Diese Seite leitet Besucher automatisch zu einer externen Webseite um (entspricht einem Weiterleitung Hyperlink).

Interne Diese Seite leitet Besucher automatisch zu einer anderen Seite innerhalb der Seitenstruktur um. Weiterleitung

Startpunkt einer Diese Seite kennzeichnet den Startpunkt einer neuen Webseite innerhalb der Seitenstruktur. Webseite

403 Zugriff Beim Aufruf einer geschützten Seite ohne Zugriffsrechte wird stattdessen die 403-Fehlerseite verweigert geladen. Diese Seite muss direkt unterhalb des Startpunktes einer Webseite angelegt werden.

404 Seite Beim Aufruf einer nicht vorhandenen Seite wird stattdessen die 404-Fehlerseite geladen. Diese nicht Seite muss direkt unterhalb des Startpunktes einer Webseite angelegt werden. gefunden

Multidomain-Betrieb

Contao unterstützt mehrere Webseiten innerhalb der Seitenstruktur und leitet Besucher je nach DNS- und Spracheinstellungen automatisch auf einen bestimmten Startpunkt einer Webseite weiter. Nehmen wir an, Sie betreiben eine zweisprachige Firmenwebseite unter "www.example.com" und eine kleine private Webseite unter der Domain "www.personal.example.org". Sie benötigen dafür drei Startpunkte:

Typ DNS Sprachenkürzel Fallback-Sprache

Deutsche Firmenseite keine de nein

Englische Firmenseite keine en ja

Private Webseite www.personal.example.org de ja

Die folgende Tabelle zeigt, zu welcher Seite ein Besucher abhängig von der Domain und seiner Browsersprache weitergeleitet wird.

Domain Browsersprache Weiterleitung

www.example.com Englisch Englische Firmenseite

www.example.com Deutsch Deutsche Firmenseite

www.example.com Spanisch Englische Firmenseite

www.personal.example.org egal Persönliche Webseite

Beachten Sie, dass die persönliche Webseite ohne die Option "Sprachen-Fallback" nur für deutsche Benutzer sichtbar wäre!

Zugriffsrechte

Seitentypen 39 Handbuch für Contao 3.4

Zugriffsrechte legen fest, was Backend-Benutzer mit einer Seite und ihren Artikeln machen dürfen. Sie haben nichts mit dem Zugriffsschutz zu tun, der den Zugriff auf eine Seite im Frontend limitiert! Ähnlich dem Unix-Rechtesystem gibt es drei Zugriffsebenen:

Zugriff als Besitzer einer Seite Zugriff als Mitglied der Gruppe einer Seite Zugriff als unprivilegierter Benutzer

Für jede Zugriffsebene können gesonderte Rechte vergeben werden. Standardmäßig darf der Besitzer einer Seite sowohl die Seite selbst, als auch die damit verbundenen Artikel bearbeiten. Ein Mitglied der Gruppe einer Seite darf hingegen nur die Artikel bearbeiten und ein unprivilegierter Benutzer hat überhaupt keine Schreibrechte.

Seitentypen 40 Handbuch für Contao 3.4

Inhalte verwalten

Die folgenden Kapitel erklären, wie man Inhalte in Contao verwaltet. Der Contao-Core beinhaltet bereits die grundlegenden Inhaltstypen wie z.B. Artikel, Nachrichten, Events, Newsletter oder Formatdefinitionen. Weitere Inhaltstypen wie Banner, Tickets, Produkte oder Empfehlungen sind über das Extension Repository verfügbar. Inhalte können im Backend mit den entsprechenden Modulen angelegt werden.

Inhalte verwalten 41 Handbuch für Contao 3.4

Artikel

Artikel sind Container für Inhaltselemente. Das Gruppieren zusammengehöriger Inhaltselemente macht es einfach, sie alle auf einmal zu verschieben, zu veröffentlichen, zu kopieren oder zu exportieren, anstatt jedes einzelne Element zu bearbeiten. Jeder Artikel ist mit einer bestimmten Seite und einem Layoutbereich assoziiert und hat daher eine feste Position innerhalb der Seitenstruktur und auf der Webseite.

Inhaltselemente

Inhaltselemente sind ein einfacher und intuitiver Weg, um Inhalte zuerstellen. Anstatt nur den Rich Text Editor zu verwenden, bietet Contao für jeden Inhaltstyp wie z.B. Texte, Listen, Tabellen, Hyperlinks, Bilder oder Downloads ein eigenes Element. Nachfolgend finden Sie eine Übersicht über die im Contao-Core enthaltenen Inhaltselemente.

Name CSS-Klasse Beschreibung

Überschrift ce_headline Erzeugt eine Überschrift (h1 - h6).

Erzeugt einen Rich Text, der mit TinyMCE formatiert Text ce_text werden kann.

HTML - Erlaubt das Hinzufügen von eigenem HTML-Code.

Aufzählung ce_list Erzeugt eine geordnete oder ungeordnete Liste.

Tabelle ce_table Erzeugt eine optional sortierbare Tabelle.

Code ce_code Gibt formatierten Programmcode auf dem Bildschirm aus.

Markdown ce_markdown Erzeugt HTML-Code aus einem Markdown-Text.

Akkordeon (Einzelelement) ce_accordion Erzeugt ein einzelnes Akkordeon-Element (Mit MooTools).

Akkordeon (Umschlag Anfang) ce_accordionStart Erzeugt den öffnenden Teil des Akkordeon-Umschlags.

Akkordeon (Umschlag Ende) - Erzeugt den schließenden Teil des Akkordeon-Umschlags.

Content-Slider (Umschlag ce_sliderStart Erzeugt den öffnenden Teil des Slider-Umschlags. Anfang)

Content-Slider (Umschlag - Erzeugt den schließenden Teil des Slider-Umschlags. Ende)

Hyperlink ce_hyperlink Erzeugt einen Verweis auf eine andere Webseite.

Top-Link ce_toplink Erzeugt einen Link zum Seitenanfang.

Bild ce_image Erzeugt ein einzelnes Bild.

Galerie ce_gallery Erzeugt eine lightbox Bildergalerie.

Video/Audio ce_player Erzeugt einen Video- bzw. Audio-Player.

YouTube ce_youtube Fügt ein YouTube-Video ein.

Download ce_download Erzeugt einen Link zum Download einer Datei.

Downloads ce_downloads Erzeugt mehrere Links zum Download von Dateien.

Artikel - Fügt einen anderen Artikel ein.

Inhaltselement (parent class) Fügt ein anderes Inhaltselement ein.

Formular ce_form Fügt ein Formular ein.

Modul (parent class) Fügt ein Frontend-Modul ein.

Artikel 42 Handbuch für Contao 3.4

Artikelteaser ce_teaser Zeigt den Teasertext eines Artikels an.

Kommentare ce_comments Fügt ein Kommentar-Formular ein.

Zugriffsschutz

Jedes Inhaltselement kann geschützt werden, so dass es nur Gäste oder Benutzer einer bestimmten Mitgliedergruppe sehen können.

Flash-Inhalte

Flash-Inhalte sind spezielle Inhalte, die nicht als Artikel auf der Webseite ausgegeben, sondern mittels loadVars() in einen dynamischen Flash-Film geladen werden. Fügen Sie folgendes Skript in Ihren Flash-Film ein, um die Kommunikation mit Contao zu ermöglichen:

TextField.prototype._loadArticle = function(flashID) { tf = this;

// HTML-Mode aktivieren tf.html = true; tf.htmlText = "";

// LoadVars-Objekt instantiieren lv = new LoadVars(); lv["flashID"] = flashID; lv.sendAndLoad(URL + "flash.php", lv, "POST");

lv.onLoad = function(success) { if (success) { tf.htmlText = lv["content"]; } } }

// Den Flash-Inhalt "myArticle" in das Textfeld "myTextBox" laden myTextBox._loadArticle("myArticle");

Ein Stylesheet importieren

Das folgende ActionScript erlaubt das Importieren eines Stylesheets zur Formatierung des Textfeldes:

Artikel 43 Handbuch für Contao 3.4

TextField.prototype._addCSS = function(style_sheet) { tf= this; tf.styleSheet = null;

// StyleSheet-Objekt instantiieren st = new TextField.StyleSheet(); st.load(URL + style_sheet);

st.onLoad = function(success) { if (success) { tf.styleSheet = st; } } }

// Das Stylesheet "basic." zum Textfeld "myTextBox" hinzufügen myTextBox._addCSS("basic.css");

Beachten Sie, dass Flash nur einen kleinen Teil der HTML-Tags unterstützt und manche Formatierungen daher nicht angezeigt werden können.

Artikel 44 Handbuch für Contao 3.4

Nachrichten

Die News/Blog-Erweiterung ermöglicht die Verwaltung von Nachrichten bzw. Blog-Einträgen und deren Darstellung im Frontend. Im Gegensatz zu Artikeln, die mit einer bestimmten Seite assoziiert sind, werden Nachrichten in Archiven organisiert und können so einfach gruppiert, kategorisiert oder als RSS- bzw. Atom-Feed exportiert werden.

Nachrichtenarchive

Archive werden zur Gruppierung und/oder Kategorisierung von Nachrichten verwendet. Jedes Archiv kann sich auf eine bestimmte Sprache oder ein bestimmtes Thema beziehen.

Frontend-Module

Mit den Frontend-Modulen der News/Blog-Erweiterung können Nachrichten auf der Webseite dargestellt werden. Module können im Backend unter "Layout" -> "Module" konfiguriert werden und müssen anschließend in einem Artikel oder Seitenlayout eingebunden werden.

Modul CSS-Klasse Beschreibung

Nachrichtenliste mod_newslist Fügt der Seite eine Nachrichtenliste hinzu.

Nachrichtenleser mod_newsreader Stellt einen einzelnen Nachrichtenbeitrag dar.

Nachrichtenarchiv mod_newsarchive Fügt der Seite ein Nachrichtenarchiv hinzu.

Nachrichtenarchiv-Menü mod_newsmenu Erzeugt ein Menü zur Navigation des Nachrichtenarchivs.

Permalinks

Jede Nachricht hat eine eindeutige URL (Permalink), die zur Referenzierung des Beitrags verwendet werden kann:

http://www.example.com/news/items/james-wilson-returns.html

Die oben genannte URL fordert den Beitrag "james-wilson-returns" auf der Seite "news" an. Denken sie daran, dass Contao ein Seiten-basiertes CMS ist; gäbe es die Seite "news" nicht oder enthielte sie nicht das Modul Nachrichtenleser, würde der Beitrag auch nicht angezeigt.

Nachrichten 45 Handbuch für Contao 3.4

Termine

Die Kalender-Erweiterung ermöglicht die Verwaltung von Terminen und deren Darstellung als Kalender oder Eventliste im Frontend. Im Gegensatz zu Artikeln, die mit einer bestimmten Seite assoziiert sind, werden Termine in Kalendern organisiert und können so einfach gruppiert, kategorisiert oder als RSS- bzw. Atom-Feed exportiert werden.

Kalender

Kalender werden zur Gruppierung und/oder Kategorisierung von Terminen verwendet. Jeder Kalender kann sich auf eine bestimmte Sprache oder ein bestimmtes Thema beziehen.

Frontend-Module

Mit den Frontend-Modulen der Kalender-Erweiterung können Termine bzw. Events auf der Webseite dargestellt werden. Module können im Backend unter "Layout" -> "Module" konfiguriert werden und müssen anschließend in einem Artikel oder Seitenlayout eingebunden werden.

Modul CSS-Klasse Beschreibung

Kalender mod_calendar Fügt der Seite einen Kalender hinzu.

Eventleser mod_eventreader Stellt einen einzelnen Event dar.

Eventliste mod_eventlist Listet alle Events eines bestimmten Zeitraums auf.

Eventliste-Menü mod_eventmenu Erzeugt ein Menü zur Navigation der Eventliste.

Permalinks

Jeder Termin hat eine eindeutige URL (Permalink), die zur Referenzierung des Events verwendet werden kann:

http://www.example.com/event-reader/events/final-exams.html

Die oben genannte URL fordert den Event "final-exams" auf der Seite "events" an. Denken sie daran, dass Contao ein Seiten-basiertes CMS ist; gäbe es die Seite "events" nicht oder enthielte sie nicht das Modul Eventleser, würde der Beitrag auch nicht angezeigt.

Termine 46 Handbuch für Contao 3.4

RSS-/Atom-Feed

Diese Funktion ist für News Archive und Kalender verfügbar. Hier ein Beispiel der Kalender-Liste.

Einstellungen

Ein oder mehrere Kalender können gruppiert und als RSS- bzw. Atom-Feed ausgegeben werden. Genau gleich funktioniert es bei News Archiven. Hier kann auch gewählt werden, ob nur der Teaser oder der komplette Artikel des Events bzw. der News ausgegeben werden soll.

RSS-/Atom-Feed 47 Handbuch für Contao 3.4

XML Dateien

Die XML Dateien werden automatisch generiert und im share Verzeichnis Ihrer Contao Installation abgelegt. In diesem Beispiel: share/events.xml .

RSS-/Atom-Feed 48 Handbuch für Contao 3.4

Newsletter

Die Newsletter-Erweiterung ermöglicht das Versenden von Newslettern, die Verwaltung von Abonnements sowie die optionale Ausgabe versendeter Nachrichten im Frontend. Im Gegensatz zu Artikeln, die mit einer bestimmten Seite assoziiert sind, werden Newsletter in Verteilern organisiert und können so einfach gruppiert oder kategorisiert werden.

Abonnenten

Newsletter-Abonnements werden normalerweise automatisch über die entsprechenden Frontend-Module verwaltet, ohne dass Sie in den Prozess eingreifen müssten. Aus datenschutzrechtlichen Gründen muss das Abonnieren eines Verteilers mittels Double Opt-In erfolgen und es wird nur die E-Mail-Adresse des Abonnements gespeichert.

Falls Sie bereits einen Verteiler haben, können Sie die Abonnenten aus einer CSV-Datei in Contao importieren.

Newsletter personalisieren

Insofern Sie Newsletter an registrierte Mitglieder verschicken, können Sie diese mit Hilfe der sogenannten "Simple Tokens" personalisieren. Simple Tokens funktionieren ähnlich wie Inserttags und können sowohl im HTML- als auch im Text-Inhalt eines Newsletters verwendet werden.

Sehr geehrte(r) ##firstname## ##lastname##,

bitte prüfen und aktualisieren Sie Ihre Daten:

Anschrift: ##street## PLZ/Ort: ##postal## ##city## Telefon: ##phone## E-Mail: ##email##

Ihr Administrator

Im Gegensatz zu Inserttags können Sie mit Simple Tokens aber nicht nur auf die Daten der Mitgliedertabelle tl_member zugreifen, sondern auch einfache If-Else-Abfragen realisieren und so beispielsweise die Anrede präzisieren.

{if gender=="male"} Sehr geehrter Herr ##lastname##,

Newsletter 49 Handbuch für Contao 3.4

{elseif gender=="female"} Sehr geehrte Frau ##lastname##, {else} Sehr geehrte Damen und Herren, {endif}

[Inhalt des Newsletters]

{if phone==""} Bitte aktualisieren Sie Ihre Daten und geben Sie Ihre Telefonnummer an. {endif}

Ihr Administrator

Newsletter versenden

Speziell auf Shared-Hosting-Servern gibt es normalerweise Limits für die maximale Skriptlaufzeit und/oder die Anzahl der E-Mails, die pro Minute versendet werden dürfen. Contao versucht, diese beiden Probleme zu umgehen, indem der Versendungsprozess in mehreren Teilschritten mit einer bestimmten Wartezeit dazwischen erfolgt und so die Anzahl der E- Mails pro Minute kontrolliert werden kann.

Frontend-Module

Mit den Frontend-Modulen der Newsletter-Erweiterung können Abonnements verwaltet und optional Newsletter angezeigt werden. Module können im Backend unter "Layout" -> "Module" konfiguriert werden und müssen anschließend in einem Artikel oder Seitenlayout eingebunden werden.

Modul CSS-Klasse Beschreibung

Newsletter 50 Handbuch für Contao 3.4

Abonnieren mod_subscribe Erzeugt ein Formular zum Abonnieren von Verteilern.

Kündigen mod_unsubscribe Erzeugt ein Formular zum Kündigen von Abonnements.

Newsletterliste mod_nl_list Fügt der Seite eine Newsletterliste hinzu.

Newsletterleser mod_nl_reader Stellt einen einzelnen Newsletter dar.

Permalinks

Jeder Newsletter hat eine eindeutige URL (Permalink), die zur Referenzierung der Nachricht verwendet werden kann:

http://www.example.com/newsletters/items/james-wilson-returns.html

Die obige URL fordert den Newsletter "james-wilson-returns" auf der Seite "newsletters" an. Denken sie daran, dass Contao ein Seiten-basiertes CMS ist; gäbe es die Seite "newsletters" nicht oder enthielte sie nicht das Modul Newsletterleser, würde der Beitrag auch nicht angezeigt.

Newsletter 51 Handbuch für Contao 3.4

Formulare

Mit dem Formulargenerator lassen sich interaktive Formulare erstellen, die per E-Mail verschickt oder in der Datenbank gespeichert werden können. Hochgeladene Dateien werden als Anhang versendet oder auf dem Server gespeichert. Folgende Datenformate werden unterstützt:

Format Beschreibung

Rohdaten Die Formulardaten werden als einfache Textnachricht mit einer Zeile pro Feld versendet.

XML file Die Formulardaten werden der E-Mail als XML-Datei angefügt.

CSV file Die Formulardaten werden der E-Mail als CSV-Datei angefügt.

Ignoriert alle Felder außer "email", "subject", "message" und "cc" (Carbon Copy) und verschickt die E-mail Daten als wären sie mit einem E-Mail-Programm versendet worden. Datei-Uploads sind erlaubt.

Formularfelder

Ähnlich wie bei Inhaltselementen, enthält Contao ein eigenes Element für jedes Formularfeld, wie z.B. Textfelder, Auswahlmenüs, Dateiuploads, versteckte Felder oder Schaltflächen. Folgende Formularfelder sind im Contao-Core enthalten:

Feld CSS-Klasse Beschreibung

Überschrift headline Ein individuelles Feld zum Einfügen einer Bereichsüberschrift.

Erklärung explanation Ein individuelles Feld zum Einfügen eines Erklärungstexts.

HTML - Ein individuelles Feld zum Einfügen von HTML-Code.

Fieldset - Ein Container für Formularfelder mit einer optionalen Legende.

Textfeld text Ein einzeiliges Eingabefeld für einen kurzen oder mittellangen Text.

Ein einzeiliges Eingabefeld für ein Passwort. Contao fügt automatisch ein Passwortfeld password Bestätigungsfeld hinzu.

Textarea textarea Ein mehrzeiliges Eingabefeld für einen mittellangen oder langen Text.

Select-Menü select/multiselect Ein ein- oder mehrzeiliges Drop-Down-Menü.

Radio-Button- radio Eine Liste mehrerer Optionen, von denen eine ausgewählt werden kann. Menü

Checkbox- Eine Liste mehrerer Optionen, von denen beliebig viele ausgewählt checkbox Menü werden können.

Ein einzeiliges Eingabefeld zur Übertragung lokaler Dateien auf den Datei-Upload upload Server.

Verstecktes - Ein einzeiliges Eingabefeld, das im Formular nicht sichtbar ist. Feld

Eine einfache Rechenaufgabe zur Prüfung ob das Formular von einem Sicherheitsfrage captcha Menschen abgesendet wurde (CAPTCHA).

Absendefeld submit Eine Absende-Schaltfläche zur Versendung des Formulars.

Frontend-Modul

Mit dem Frontend-Module des Formulargenerators können Formulare angezeigt werden. Module können im Backend unter "Layout" -> "Module" konfiguriert werden und müssen anschließend in einem Artikel oder Seitenlayout eingebunden

Formulare 52 Handbuch für Contao 3.4

werden.

Modul CSS-Klasse Beschreibung

Formular mod_form Fügt ein Formular auf der Seite ein.

Inhaltselement

Das Inhaltselement bietet dieselben Funktionen wie das Modul, lässt sich aber direkt im Artikel einbinden und konfigurieren. Der Formulargenerator stellt ein Inhaltselement zur Verfügung:

Inhaltselement CSS-Klasse Beschreibung

Formular ce_form Fügt ein Formular ein.

Formulare 53 Handbuch für Contao 3.4

Kommentare

Kommentare sind eine weitere Form von Inhalt, welcher über das Backend verwaltet werden kann. Kommentare können in Kalendern und News-Archiven aktiviert werden.

Frontend-Modul

Mit dem Frontend-Module der Kommentar-Erweiterung können Kommentare ein- und ausgegeben werden. Module können im Backend unter "Layout" -> "Module" konfiguriert werden und müssen anschließend in einem Artikel oder Seitenlayout eingebunden werden.

Modul CSS-Klasse Beschreibung

Kommentare mod_comments Bietet Kommentare oder eine Gästebuch-Funktion.

Inhaltselement

Das Inhaltselement bietet dieselben Funktionen wie das Modul, lässt sich aber direkt im Artikel einbinden und konfigurieren. Die Kommentar-Erweiterung stellt ein Inhaltselement zur Verfügung:

Inhaltselement CSS-Klasse Beschreibung

Kommentare ce_comments Fügt das Kommentar-Formular auf der Seite ein.

BBCode

Der Besucher kann ausserdem die BBCode Sprache verwenden. Contao versteht folgende Tags:

BBCode Beschreibung

[b][/b] Der enthaltene Text wird fett dargestellt.

[i][/i] Der enthaltene Text wird kursiv dargestellt.

[u][/u] Der enthaltene Text wird unterstrichen.

[img][/img] Ersetzen das Tag durch ein Bild (Bild-Pfad zwischen den Tags).

[code][/code] Der enthaltene Text wird in einer Schrift mit fester Laufweite dargestellt.

[color=#ff0000][/color] Der enthaltene Text wird in der entsprechenden Farbe dargestellt.

[quote][/quote] Stellt den entsprechenden Text als Zitat dar.

[quote=John]Hallo[/quote] Stellt den entsprechenden Text als Zitat eines Autors dar.

[url][/url] Die enthaltene URL wird als Link dargestellt.

[url=http://][/url] Der enthaltene Text wird mit der entsprechenden URL verlinkt.

[email][/email] Die enthaltene E-Mail-Adresse wird als Link dargestellt.

[[email protected]][/email] Der enthaltene Text wird mit der E-Mail-Adresse verknüpft.

Kommentare 54 Handbuch für Contao 3.4

Templates

Ein Template enthält meist HTML und PHP code. Es wird zur Ausgabe von Inhalten eines Moduls oder Inhaltelements etc. verwendet. Beispielsweise gibt das Template news_full. eine vollständige Nachricht aus, während das Template news_short.html5 nur einen Teil davon anzeigt.

Templates befinden sich direkt in den dazugehören Modulen. Das news_full.html5 Template befindet sich beispielsweise in system/modules/news/templates/news .

Falls diese Datei direkt in diesem Ordner bearbeitet wird, gehen die Änderungen bei einem nächsten Update von Contao verloren. Um dies zu vermeiden, Templates können im Backend bearbeitet werden. Dabei wird die Datei kopiert um Änderungen während einem Update nicht zu verlieren.

Unter dem Menüpunkt Templates können die Dateien bearbeitet und in Ordnern abgelegt werden. Ordner müssen wie unter Theme-Bestandteile beschrieben einem Theme zugewiesen sein.

Ein Template gehört zu einem Modul, einem Inhaltselement, einem Formular oder anderen Komponenten. Sie werden zur einfacheren Erkennung deshalb meist mit einem Präfix versehen. Beispielsweise deutet j_ auf jQuery oder nl_ auf ein Newsletter-Template.

Template-Vererbung

Template-Vererbung erlaubt, ein Template basierend auf einem anderen Template aufzubauen. Dies bedeutet, ein Template (Kind) fügt Inhalt in ein zweites Template (Eltern) ein.

Damit Inhalte in einem Eltern-Template angepasst werden können, muss sich der Inhalt innerhalb eines block -Elements befinden.

Ein Block ist wie folgt aufgebaut:

block('name_des_blocks'); ?>

// Block-Inhalt

endblock(); ?>

Das folgende Beispiel zeigt ein Template bei welchem der head -Tag als eigener Block definiert wurde.

Template fe_page.html5 :

block('head'); ?> <?php echo $this->title; ?> endblock(); ?>

Templates 55 Handbuch für Contao 3.4

...

Im Kindtemplate fe_custom.html wird zusätzlich zum bisherigen Inhalt noch ein CSS style sheet in das übergeordnete Template eingefügt.

Template fe_custom.html5 :

extend('fe_page'); ?>

block('head'); ?> parent(); ?> endblock(); ?>

Die Funktion extend() definiert das übergeordnete Template. Die Funktion parent() übernimmt den Inhalt des übergeordneten Template.

Die Ausgabe des fe_custom.html5 Template sieht danach so aus:

A title ...

Templates mischen

Mit Hilfe der insert() -Funktion kann ein Template in ein anderes Template einfügt werden.

insert('template_name'); ?>

Die insert() -Funktion akzeptiert ausserdem auch die Übergabe von zusätzlichen Variablen als zweiten Parameter.

insert('template_name', array('key'=>'value')); ?>

// Übergibt alle Variablen aus dem aktuellen Template insert('template_name', $this->getData()); ?>

Im folgenden Beispiel fügen wir den Inhalt des Templates image-copyright.html5 in das Template image.html5 ein.

Das Template image.html5 enthält lediglich einen img -Tag und die insert() -Funktion.

Template image.html5 :

src; ?>" alt="alt; ?>" /> insert('image-copyright', array('name'=>'Donna Evans', 'license'=>'Creative Commons')); ?>

Templates 56 Handbuch für Contao 3.4

Das image-copyright.html5 Template enthält einen small -Tag welcher nach dem img -Tag im image.html5 Template eingefügt werden soll. Die Variabeln name und license werden durch die Parameter der insert() -Funktion ersetzt.

Template image-copyright.html5 :

Fotografiert von name; ?>, lizenziert als license; ?>

Die Ausgabe des image.html5 sieht danach folgendermassen aus:

Fotografiert von Donna Evans, lizenziert als Creative Commons

Templates 57 Handbuch für Contao 3.4

Markdown

Markdown ist eine einfache Auszeichnungssprache, die es erlaubt, Text mittels einfachem Syntax zu formatieren. Markdown hat den Vorteil, einfach lesbar zu sein und automatisch in HTML konvertiert werden zu können.

Nachfolgend einige Beispiele für die Markdown-Syntax:

Syntax

Paragrafen

Absätze werden durch eine Leerzeile erstellt:

Erster Absatz

Zweiter Absatz

Überschriften

Es sind sechs Ebenen für Überschriften möglich:

# Überschrift 1 ## Überschrift 2 ### Überschrift 3 #### Überschrift 4 ##### Überschrift 5 ###### Überschrift 6

Wichtig

Um wichtigen Text zu markieren:

**strong** __strong__

Wird zu folgendem HTML-Code konvertiert: strong

Hervorhebung

Um Text hervor zu heben:

*emphasize* _emphasize_

Wird zu folgendem HTML-Code konvertiert: emphasize

Code

Um einen Text als Computercode zu markieren:

Markdown 58 Handbuch für Contao 3.4

`monospaced font`

Wird zu folgendem HTML-Code konvertiert: monospaced font

Code-Blöcke

Um einen ganzen Absatz in Code zu konvertieren, den Text mit vier Leerzeichen einrücken.

Schrift mit fester Laufweite ...... über mehrere Zeilen

Zitat-Block

Zitatblöcke können durch eine rechte spitze Klammer am Beginn der Zeile erstellt werden.

> Dies ist ein Zitat.

Zeilenumbruch

Durch zwei oder mehr Leerzeichen am Ende einer Zeile wird ein Umbruch erzeugt:

Contao ist ein barrierefreies Open Source content management system.

Links

Es gibt zwei Möglichkeiten für Links: inline und als Referenz.

Ein Inline-Link sieht wie folgt aus:

[Contao](https://contao.org/de)

oder optional auch mit einem Titel:

[Contao](https://contao.org/de "Offizielle Contao-Webseite")

Ein Referenz-Link sieht wie folgt aus:

[Offizielle Contao-Webseite][1]

[1]:https://contao.org/de

Die Referenz kann an beliebiger Stelle im Dokument platziert werden.

Bilder

Wie für Links gibt es auch für Bilder zwei Syntax-Möglichkeiten.

Markdown 59 Handbuch für Contao 3.4

Ein Inline-Bild sieht wie folgt aus:

![Alt text](/pfad/zum/bild.jpg "Optionaler Titel")

Ein Bild im Referenz-Stil wird durch folgende Syntax erreicht:

![Alternativer Text][id]

[id]: /pfad/zum/bild.jpg "Optionaler Titel"

Die Referenz kann an beliebiger Stelle im Dokument platziert werden.

Aufzählungslisten

Unsortierte Listen

Unsortierte Listen verwenden Sternzeichen oder Trennstriche:

* Listeneintrag * Listeneintrag * Verschachtelter Listeneintrag * Verschachtelter Listeneintrag * Listeneintrag

- Listeneintrag - Listeneintrag - Listeneintrag

Sortierte Listen

Sortierte Listen verwenden Zahlen:

1. Listeneintrag 2. Listeneintrag 3. Listeneintrag

Erweiterter Syntax

Nicht alle HTML-Element wie beispielsweise Tabellen oder Fußnoten können mit normalem Markdown beschrieben werden. Aus diesem Grund gibt es ein Projekt für "Markdown Extra" um die Syntax zu erweitern.

Nachfolgend einige Beispiele für die erweiterte Syntax:

Tabellen

Eine Tabelle kann wie folgt erstellt werden:

Erste Kopfzeile | Zweite Kopfzeile | Dritte Kopfzeile ------| ------| ------Zelleninhalt | Zelleninhalt | Zelleninhalt Zelleninhalt | Zelleninhalt | Zelleninhalt

Die Textausrichtung kann durch Doppelpunkte gesteuert werden:

Markdown 60 Handbuch für Contao 3.4

Erste Kopfzeile | Zweite Kopfzeile | Dritte Kopfzeile :------| :------: | ------: Linksbündig | Zentriert | Rechtsbündig Linksbündig | Zentriert | Rechtsbündig

Fußnoten

Fußnoten werden wie folgt erstellt:

Dies ist ein Text mit Fußnote.[^1]

[^1]: Und dies ist die Fußnote.

Die Fußnoten-Definition kann an beliebiger Stelle im Dokument platziert werden.

Weitere Informationen

Für eine komplette Dokumentation zu Markdown, besuchen Sie die offizielle Webseite unter folgendem Link.

Für eine komplette Dokumentation zu Markdown Extra, besuchen Sie die offizielle Webseite unter folgendem Link.

Markdown 61 Handbuch für Contao 3.4

Inserttags

Inserttags sind Platzhalter, die bei der Ausgabe einer Seite durch bestimmte Inhalte ersetzt werden. So kann beispielsweise das aktuelle Datum angezeigt oder ein Benutzer mit seinem Namen angesprochen werden. Inserttags können fast überall in Contao verwendet werden.

Link-Elemente

Mit den folgenden Inserttags können Seiten und Artikel anhand ihrer ID oder ihres Alias verlinkt werden.

Insert-Tag Beschreibung

{{link::*}} Dieses Tag wird mit einem Link zu einer internen Seite ersetzt (ersetzen Sie * mit der ID oder dem Alias).

{{link::back}} Dieses Tag wird mit einem Link zur der zuletzt besuchte Seite ersetzt. Kann auch als {{link_open::back}} , {{link_url::back}} und {{link_title::back}} verwendet werden.

{{link::login}} Dieses Tag wird mit einem Link zur Anmeldeseite des aktuellen Frontend-Benutzers (falls vorhanden) ersetzt.

{{link_open::*}} Wird mit dem öffnenden Tag eines Links zu einer internen Seite ersetzt: {{link_open::12}}Hier klicken{{link_close}} .

Hier {{link_url::*}} Dieses Tag wird mit der URL einer internen Seite ersetzt: klicken .

Hier klicken .

{{link_name::*}} Dieses Tag wird mit dem Namen einer internen Seite ersetzt: {{link_name::12}} .

{{link_close}} Wird mit dem schließenden Tag eines Links zu einer internen Seite ersetzt: {{link_open::12}}Hier klicken{{link_close}} .

{{article::*}} Dieses Tag wird mit einem Link zu einem Artikel ersetzt (ersetzen Sie * mit der ID oder dem Alias).

{{article_open::12}}Hier {{article_open::*}} Wird mit dem öffnenden Tag eines Links zu einem Artikel ersetzt: klicken{{link_close}} .

Hier {{article_url::*}} Dieses Tag wird mit der URL eines Artikels ersetzt: klicken .

Hier {{article_title::*}} Dieses Tag wird mit dem Titel eines Artikels ersetzt: klicken .

{{news::*}} Dieses Tag wird mit einem Link zu einer Nachricht ersetzt (ersetzen Sie * mit der ID oder dem Alias).

{{news_open::12}}Hier {{news_open::*}} Wird mit dem öffnenden Tag eines Links zu einer Nachricht ersetzt: klicken{{link_close}} .

Hier {{news_url::*}} Dieses Tag wird mit der URL einer Nachricht ersetzt: klicken .

Hier {{news_title::*}} Dieses Tag wird mit dem Titel einer Nachricht ersetzt: klicken .

{{news_feed::*}} Dieser Tag wird mit der URL zu einem News-Feed ersetzen (ersetzen Sie * mit der ID).

{{event::*}} Dieses Tag wird mit einem Link zu einem Event ersetzt (ersetzen Sie * mit der ID oder dem Alias).

{{event_open::12}}Hier {{event_open::*}} Wird mit dem öffnenden Tag eines Links zu einem Event ersetzt: klicken{{link_close}} .

Inserttags 62 Handbuch für Contao 3.4

{{event_url::*}} Dieses Tag wird mit der URL eines Events ersetzt: Hier klicken .

Hier {{event_title::*}} Dieses Tag wird mit dem Titel eines Events ersetzt: klicken .

{{calendar_feed::*}} Dieser Tag wird mit der URL zu einem Kalender-Feed ersetzen (ersetzen Sie * mit der ID).

{{faq::*}} Dieses Tag wird mit einem Link zu einer häufig gestellten Frage ersetzt (ersetzen Sie * mit der ID oder dem Alias).

{{faq_open::12}}Hier {{faq_open::*}} Wird mit dem öffnenden Tag eines Links zu einer Frage ersetzt: klicken{{link_close}} .

Hier {{faq_url::*}} Dieses Tag wird mit der URL einer Frage ersetzt: klicken .

Hier {{faq_title::*}} Dieses Tag wird mit dem Titel einer Frage ersetzt: klicken .

Benutzereigenschaften

Mit den folgenden Inserttags können Eigenschaften des angemeldeten Benutzers ausgebeben werden.

Insert-Tag Beschreibung

{{user::firstname}} Dieses Tag wird mit dem Vornamen des angemeldeten Benutzers ersetzt.

{{user::lastname}} Dieses Tag wird mit dem Nachnamen des angemeldeten Benutzers ersetzt.

{{user::company}} Dieses Tag wird mit dem Firmennamen des angemeldeten Benutzers ersetzt.

{{user::phone}} Dieses Tag wird mit der Telefonnummer des angemeldeten Benutzers ersetzt.

{{user::mobile}} Dieses Tag wird mit der Handynummer des angemeldeten Benutzers ersetzt.

{{user::fax}} Dieses Tag wird mit der Faxnummer des angemeldeten Benutzers ersetzt.

{{user::email}} Dieses Tag wird mit der E-Mail-Adresse des angemeldeten Benutzers ersetzt.

{{user::website}} Dieses Tag wird mit der Internetadresse des angemeldeten Benutzers ersetzt.

{{user::street}} Dieses Tag wird mit dem Staßennamen des angemeldeten Benutzers ersetzt.

{{user::postal}} Dieses Tag wird mit der Postleitzahl des angemeldeten Benutzers ersetzt.

{{user::city}} Dieses Tag wird mit der Stadt des angemeldeten Benutzers ersetzt.

{{user::country}} Dieses Tag wird mit dem Land des angemeldeten Benutzers ersetzt.

{{user::username}} Dieses Tag wird mit dem Benutzernamen des angemeldeten Benutzers ersetzt.

Seiteneigenschaften

Mit den folgenden Inserttags können Seiteneigenschaften wie z.B. der Seitenname ausgegeben werden.

Insert-Tag Beschreibung

{{page::id}} Dieses Tag wird mit der ID der aktuellen Seite ersetzt.

{{page::alias}} Dieses Tag wird mit dem Alias der aktuellen Seite ersetzt.

{{page::title}} Dieses Tag wird mit dem Namen der aktuellen Seite ersetzt.

{{page::pageTitle}} Dieses Tag wird mit dem Titel der aktuellen Seite ersetzt.

{{page::language}} Dieses Tag wird mit der Sprache der aktuellen Seite ersetzt.

{{page::parentAlias}} Dieses Tag wird mit dem Alias der übergeordneten Seite ersetzt.

Inserttags 63 Handbuch für Contao 3.4

{{page::parentTitle}} Dieses Tag wird mit dem Namen der übergeordneten Seite ersetzt.

{{page::parentPageTitle}} Dieses Tag wird mit dem Titel der übergeordneten Seite ersetzt.

{{page::mainAlias}} Dieses Tag wird mit dem Alias der übergeordneten Hauptseite ersetzt.

{{page::mainTitle}} Dieses Tag wird mit dem Namen der übergeordneten Hauptseite ersetzt.

{{page::mainPageTitle}} Dieses Tag wird mit dem Titel der übergeordneten Hauptseite ersetzt.

{{page::rootTitle}} Dieses Tag wird mit dem Namen der Webseite ersetzt.

{{page::rootPageTitle}} Dieses Tag wird mit dem Titel der Webseite ersetzt.

Umgebungsvariablen

Mit den folgenden Inserttags können Umgebungsvariablen wie z.B. der Seitenname oder der Request-String ausgegeben werden.

Insert-Tag Beschreibung

{{env::host}} Dieses Tag wird mit dem aktuellen Hostnamen ersetzt.

{{env::url}} Dieses Tag wird mit dem Hostnamen und dem Protokoll ersetzt.

{{env::path}} Dieses Tag wird mit der aktuellen Basis-URL samt Pfad zum Contao-Verzeichnis ersetzt.

{{env::request}} Dieses Tag wird mit dem aktuellen Request-String ersetzt.

{{env::ip}} Dieses Tag wird mit der IP-Adresse des aktuellen Besuchers ersetzt.

{{env::referer}} Dieses Tag wird mit der URL der zuletzt besuchten Seite ersetzt.

{{env::files_url}} Dieses Tag wird mit der statischen URL des Uploadverzeichnis ersetzt.

{{env::assets_url}} Dieses Tag wird mit der statischen URL des Assets-Verzeichnis ersetzt.

Include-Elemente

Mit den folgenden Inserttags können Ressourcen wie z.B. Artikel, Module oder Dateien aus dem "templates"-Verzeichnis eingebunden werden.

Insert-Tag Beschreibung

{{insert_article::*}} Dieses Tag wird mit dem referenzierten Artikel ersetzt (ersetzen Sie * mit der ID oder dem Alias).

{{insert_content::*}} Dieses Tag wird mit dem referenzierten Inhaltselement ersetzt (ersetzen Sie * mit der ID des Elements).

{{insert_module::*}} Dieses Tag wird mit dem referenzierten Modul ersetzt (ersetzen Sie * mit der ID des Moduls).

{{insert_form::*}} Dieses Tag wird mit dem referenzierten Formular ersetzt (ersetzen Sie * mit der ID des Formulars).

{{article_teaser::*}} Dieses Tag wird mit dem Teaser eines Artikels ersetzt (ersetzen Sie * mit der ID des Artikels).

{{news_teaser::*}} Dieses Tag wird mit dem Teaser einer Nachricht ersetzt (ersetzen Sie * mit der ID der Nachricht).

{{event_teaser::*}} Dieses Tag wird mit dem Teaser eines Events ersetzt (ersetzen Sie * mit der ID des Events).

Dieses Tag wird mit dem Inhalt einer .php-, .tpl-, .- oder .html5-Datei aus dem "templates"-Verzeichnis ersetzt (ersetzen Sie * mit dem Namen). Bei Bedarf können Sie

Inserttags 64 Handbuch für Contao 3.4

{{file::*}} Argumente übergeben: {{file::file.php?arg1=val}} . Mittels UUID kann außerdem der Pfad einer Datei aus der Datenbank abgefragt werden: {{file::6939a448-9b30-11e4-bcba- 079af1e9baea}} .

Verschiedenes

Mit den folgenden Inserttags können Sie verschiedene Aufgaben erledigen und z.B. das aktuelle Datum oder ein Lightbox- Bild einfügen.

Insert-Tag Beschreibung

{{date}} Dieses Tag wird mit dem aktuellen Datum gemäß des globalen Datumsformats ersetzt.

{{date::*}} Dieses Tag wird mit dem aktuellen Datum gemäß eines individuellen Datumsformats ersetzt.

{{last_update}} Dieses Tag wird mit dem Datum der letzten Aktualisierung gemäß des globalen Datumsformats ersetzt.

{{last_update::*}} Dieses Tag wird mit Datum der letzten Aktualisierung gemäß eines individuellen Datumsformats ersetzt.

{{email::*}} Dieses Tag wird mit einem verschlüsselten Link zu einer E-Mail-Adresse ersetzt.

{{email_open::*}} Dieses Tag wird mit einem verschlüsselten Link zu einer E-Mail-Adresse ersetzt. Allerdings wird das schließende nicht angefügt.

{{email_url::*}} Dieses Tag wird nur durch die verschlüsselte E-Mail-Adresse ersetzt.

Mit diesem Tag können fremdsprachige Wörter in einem Text markiert werden: {{lang::*}} {{lang::fr}}Au revoir{{lang}} . Dies wird ersetzt mit Au revoir und fügt xml:lang="fr" hinzu falls das Seitenformat XHTML ist.

{{abbr::World Wide Web}}WWW{{abbr}} {{abbr::*}} Abkürzungen in einem Text markieren: . Dies wird ersetzt mit WWW .

Akronyme in einem Text markieren: {{acronym::Multipurpose Internet Mail {{acronym::*}} Extensions}}MIME{{acronym}} . Dies wird ersetzt mit MIME .

{{ua::browser}} {{ua::*}} Eigenschaften des Browsers (User Agent) ausgeben: . Dies wird beispielsweise ersetzt mit "chrome".

Dieses Tag wird komplett entfernt, wenn die Sprache der Seite nicht mit der Tag-Sprache {{iflng::*}} übereinstimmt. Sie können so sprachspezifische Bezeichnungen erstellen: {{iflng::en}}Your name{{iflng::de}}Ihr Name{{iflng}}

Dieses Tag wird komplett entfernt, wenn die Sprache der Seite mit der Tag-Sprache {{ifnlng::*}} übereinstimmt. Sie können so sprachspezifische Bezeichnungen erstellen: {{ifnlng::de}}Your name{{ifnlng}}{{iflng::de}}Ihr Name{{iflng}}

Dieses Tag wird mit der Vorschauansicht eines Bildes ersetzt (wobei * eine Datenbank ID, eine UUID oder ein Pfad aus dem Dateisystem sein kann): {{image::58ca4a90-2d30-11e4- 8c21-0800200c9a66?width=200&height=150}} . width: Breite des Vorschaubildes, {{image::*}} height: Höhe des Vorschaubildes, alt: Alternativer Text, class: CSS-Klasse, rel: rel-Attribut (z.B. "lightbox"), mode: Modus ("proportional", "crop" oder "box").

Dieses Tag wird mit einer Übersetzung ersetzt. Der erste Parameter ist der Name einer Sprachdatei oder einem Akronym (z.B. CNT für Länder oder LNG für Sprachen). Beispiele: {{label::*}} {{label::CNT:au}} wird zu "Australien" und {{label::tl_article:title:0}} wird zu "Titel". Beachten Sie, dass innerhalb des Pfads zur Bezeichnung nur einfache Doppelpunkte verwendet werden.

{{version}} Dieses Tag wird mit der verwendeten Contao-Version (z.B. 3.2.7) ersetzt.

{{request_token}} Dieses Tag wird mit dem zur aktuellen Session gehörenden Request-Token ersetzt.

Dieses Tag wird mit einem Link ersetzt, welcher zwischen Mobile- und Desktop-Layout

Inserttags 65 Handbuch für Contao 3.4

wechselt.

{{br}} Dieses Tag wird mit einem HTML
Element (Zeilenumbruch) ersetzt.

Inserttag-Flags

Mittels Flags können Sie Insert-Tags weiter verarbeiten. Der Wert kann damit z.B. einer PHP-Funktion übergeben werden. Beliebig viele Flags können miteinander kombiniert werden:

{{ua::browser|uncached}} {{page::title|decodeEntities|strtoupper}}

Verfügbare Flags:

Flag Beschreibung Weitere Informationen

uncached Erhält das Tag beim Schreiben der Cache-Datei.

refresh Erstellt die Ausgabe bei jeder Anfrage neu.

addslashes Stellt bestimmten Zeichen eines Strings ein "\" voran. PHP-Funktion

stripslashes Entfernt das "\" vor bestimmten Zeichen eines Strings. PHP-Funktion

standardize Standardisiert die Ausgabe (z.B. das Alias bei der Seitenstruktur).

ampersand Wandelt Und-Zeichen in Entities um.

specialchars Wandelt Sonderzeichen in Entities um.

Fügt vor allen Zeilenumbrüchen eines Strings HTML- nl2br PHP-Funktion Zeilenumbrüche ein.

nl2br_pre Erhält die Zeilenumbrüche innerhalb von

 -Tags.

strtolower Wandelt die Ausgabe in Kleinbuchstaben um. PHP-Funktion

utf8_strtolower Unicode-bewusste Umwandlung in Kleinbuchstaben

strtoupper Wandelt die Ausgabe in Großbuchstaben um. PHP-Funktion

utf8_strtoupper Unicode-bewusste Umwandlung in Großbuchstaben

ucfirst Wandelt das erste Zeichen in einen Großbuchstaben um. PHP-Funktion

lcfirst Wandelt das erste Zeichen in einen Kleinbuchstaben um. PHP-Funktion

Wandelt das erste Zeichen jedes Wortes in einen ucwords PHP-Funktion Großbuchstaben um.

trim Entfernt Leerzeichen vom Anfang und Ende der Ausgabe. PHP-Funktion

rtrim Entfernt Leerzeichen vom Anfang der Ausgabe. PHP-Funktion

ltrim Entfernt Leerzeichen vom Ende der Ausgabe. PHP-Funktion

utf8_romanize Romanisiert die Ausgabe.

strrev Dreht die Ausgabe um. PHP-Funktion

encodeEmail Kodiert E-Mail-Adressen in der Ausgabe. siehe String::encodeEmail

decodeEntities Dekodiert Entities in der Ausgabe. siehe String::decodeEntities()

number_format Formatiert eine Zahl (keine Dezimalstellen). siehe System::getFormattedNumber()

Inserttags 66 Handbuch für Contao 3.4

currency_format Formatiert eine Währung (zwei Dezimalstellen). siehe System::getFormattedNumber()

readable_size Wandelt die Ausgabe in ein menschenlesbares Format um. siehe System::getReadableSize()

urlencode URL-kodiert einen String. PHP-Funktion

rawurlencode URL-Kodierung nach RFC 3986. PHP-Funktion

Inserttags 67 Handbuch für Contao 3.4

Systemadministration

Die folgenden Kapitel erklären, wie man Contao administriert. Neben der Installation und Aktualisierung des Systems ist der Administrator auch für das Anlegen von Benutzern und Gruppen, die Erweiterungsverwaltung und die Wartung der Applikation zuständig.

Systemadministration 68 Handbuch für Contao 3.4

Benutzer und Gruppen

Contao unterscheidet zwischen Backend-Benutzern ("Benutzer"), die sich am Administrationsbereich anmelden können, und Frontend-Benutzern ("Mitglieder"), die sich auf der Webseite anmelden können. Im Gegensatz zu Administratoren, die standardmäßig alle Seiten und Elemente bearbeiten dürfen ("allow all"), können reguläre Benutzer nur auf die Ressourcen zugreifen, die explizit in ihrem Profil oder dem Profil einer der Gruppen, denen sie angehören, freigeschaltet wurden ("deny all").

Benutzer

Jeder Benutzer kann mehreren Gruppen angehören und erbt automatisch deren Rechte. Zugriffsrechte sind additiv, das heißt ein Benutzer erbt die Summe der Rechte aller seiner Gruppen. Wird ein bestimmtes Recht in Gruppe A vergeben, kann es nicht in Gruppe B widerrufen werden.

Pagemounts

Pagemounts legen fest, welche Seiten ein Benutzer in der Seitenstruktur sehen kann. Der nachfolgende Screenshot zeigt die Seitenstruktur aus Sicht von Helen Lewis. Obwohl die Webseite wesentlich mehr Seiten enthält, kann sie nur drei davon sehen, denn nur die "Courses"-Seite wurde in in der "Editors"-Gruppe gemountet. Beachten Sie außerdem, dass Helen Lewis nur eine der drei Seiten bearbeiten kann!

Eine Seite sehen zu können, beinhaltet noch nicht das Recht, sie zu bearbeiten. Erinnern Sie sich, dass Zugriffsrechte in der Seitenstruktur vergeben werden, daher muss eine Seite sowohl im Benutzerprofil gemountet, als auch in der Seitenstruktur freigeschaltet werden.

Filemounts

Filemounts legen fest, welche Verzeichnisse ein Benutzer in der Dateiverwaltung sehen kann. Der nachfolgende Screenshot zeigt den Dateimanager aus Sicht von Helen Lewis, die im Gegensatz zum Administrator nur auf den campus - Ordner zugreifen darf.

Benutzer und Gruppen 69 Handbuch für Contao 3.4

Erlaubte Felder

Wie oben erwähnt, haben reguläre Benutzer standardmäßig überhaupt keine Rechte ("deny all"), dürfen also auch nicht auf Formularfelder zugreifen. Selbst wenn sie also beispielsweise das Nachrichten-Modul aufrufen könnten, wäre das Formular zum Anlegen eines Beitrags solange leer, bis der Administrator in den Gruppenrechten eines oder mehrere Felder der Tabelle tl_news freigeschaltet hat.

Mitglieder

Benutzer und Gruppen 70 Handbuch für Contao 3.4

Die Verwaltung von Mitgliedern (Frontend-Benutzern) ist viel simpler als die von Backend-Benutzern, weil es keine Pagemounts oder erlaubte Felder gibt. Die Mitgliederverwaltung wird hauptsächlich benötigt, um den auf Gruppenebene implementierten Zugriffsschutz für Seiten zu kontrollieren. Je nach Konfiguration können registrierte Mitglieder geschützte Seiten oder Downloads aufrufen, die für Gäste nicht erreichbar sind.

Benutzer und Gruppen 71 Handbuch für Contao 3.4

Erweiterungen

Erweiterungen sind ein wichtiger Bestandteil von Contao, weil sie das Hinzufügen weiterer Funktionalität ermöglichen. Momentan befinden sich 1.400 Erweiterungen im Extension Repository, die Sie direkt im Backend aufrufen können. Beachten Sie dabei, dass das Extension Repository 2.0 nur noch solche Erweiterungen anzeigt, die zu Ihrer Contao- Version kompatibel sind. Die Anzahl der Erweiterungen in Ihrem Erweiterungskatalog wird daher je nach Version wahrscheinlich deutlich unter 1.400 liegen. Die Kommunikation mit dem Repository-Server erfolgt mittels SOAP, daher benötigen Sie die PHP SOAP-Erweiterungen, um den Service zu nutzen.

Erweiterungskatalog

Mit dem "Erweiterungskatalog"-Modul können Sie die Erweiterungsliste durchsuchen und Erweiterungen auf Knopfdruck installieren. Nutzen Sie die Filter- und Sortieroptionen zum Auffinden eines Moduls und klicken Sie auf dessen Namen, um die Beschreibung zu lesen oder es zu installieren.

Die Detailseite enthält die Beschreibung der Erweiterung sowie wichtige Informationen zu Systemvoraussetzungen, Versionen und Abhängigkeiten von anderen Modulen. Klicken Sie auf die "Installieren"-Schaltfläche, um die Erweiterung herunterzuladen und zu installieren.

Erweiterungen 72 Handbuch für Contao 3.4

Contao lädt die Erweiterung automatisch herunter, kopiert die Dateien und aktualisiert wenn nötig die Datenbank.

Erweiterungen 73 Handbuch für Contao 3.4

Erweiterungsverwaltung

Mit dem Modul "Erweiterungsverwaltung" können Erweiterungen aktualisiert oder deinstalliert werden. Es wird automatisch auf Updates geprüft und auf neue Versionen hingewiesen. Viele Erweiterungen enthalten außerdem einen Support-Link zur Dokumentation und/oder zum Forum.

Um eine Erweiterung zu deinstallieren, klicken Sie auf das entsprechende Icon und folgen Sie den Anweisungen. Es werden alle Dateien entfernt und falls nötig die Datenbank aktualisiert. Beachten Sie, dass diese Aktion nicht rückgängig gemacht werden kann!

Erweiterungen 74 Handbuch für Contao 3.4

Manuelle Installation

Falls die PHP SOAP-Erweiterung auf Ihrem Server nicht verfügbar ist, können Sie Extensions auch manuell installieren. Finden Sie das entsprechende Modul in der Erweiterungsliste und laden Sie das .zip-Archiv des aktuellen Release herunter. Entpacken Sie die Dateien und kopieren Sie sie in Ihr lokales oder entferntes Contao-Verzeichnis. Abschließend prüfen Sie die Datenbank mit dem Contao-Installtool.

Erweiterungen 75 Handbuch für Contao 3.4

Systemwartung

Die meisten Wartungsaufgaben in Contao sind automatisiert, so dass Sie sich auf Ihre eigentliche Arbeit konzentrieren können. Manchmal kann es jedoch notwendig sein, die sonst automatisch ausgeführten Aufgaben der Systemwartung manuell zu starten.

Daten bereinigen

Neben den Benutzer-generierten Inhalten speichert Contao verschiedene Systemdaten, die für die Suche oder das Wiederherstellen gelöschter Datensätze oder früherer Versionen verwendet werden. Sie können diese Daten manuell bereinigen, um z.B. alte Vorschaubilder zu entfernen oder die XML-Sitemaps nach einer Änderung an der Seitenstruktur zu aktualisieren.

Suchindex neu aufbauen

Seiten werden automatisch beim Aufruf im Frontend indiziert (es sei denn Sie sind parallel im Backend angemeldet), daher müssen Sie sich um den Suchindex normalerweise keine Gedanken machen. Wenn Sie allerdings viele Seiten auf einmal aktualisiert haben, ist es bequemer, den Suchindex manuell neu aufzubauen, als alle geänderten Seiten einzeln im Browser aufzurufen.

Systemwartung 76 Handbuch für Contao 3.4

Systemwartung 77 Handbuch für Contao 3.4

Data Container Arrays

Data Container Arrays (DCAs) dienen zur Speicherung von Tabellen-Metadaten. Jedes DCA beschreibt die Konfiguration einer bestimmten Tabelle, ihre Beziehungen zu anderen Tabellen sowie die einzelnen Felder. Die Contao Core-Engine erkennt anhand dieser Metadaten, wie Datensätze aufgelistet, bearbeitet und gespeichert werden. Die DCA-Dateien aller aktiven Module werden nacheinander geladen (zuerst backend und frontend und dann in alphabetischer Reihenfolge) und jedes Modul kann die bestehende Konfiguration überschreiben. Die Datei system/config/dcaconfig.php wird ganz am Ende eingelesen, so dass dort Änderungen updatesicher gespeichert werden können.

Data Container Arrays 78 Handbuch für Contao 3.4

Referenz

Ein Data Container Array ist in 6 Sektionen unterteilt. Die erste Sektion speichert globale Informationen wie z.B. Relationen zu anderen Tabellen. Die zweite und dritte Sektion legt fest, wie Datensätze aufgelistet werden und welche Aktionen ein Benutzer ausführen kann. Die vierte Sektion definiert verschiedene Gruppen von Eingabefeldern (Paletten) und die letzten beiden Sektionen beschreiben die Eingabefelder im Detail.

Tabellenkonfiguration

Die Tabellenkonfiguration legt unter anderem fest, welcher Data Container-Typ verwendet wird oder ob Relationen zu anderen Tabellen bestehen. Sie können außerdem die Versionierung aktivieren und festlegen, was mit Kinddatensätzen beim Löschen von Elterndatensätzen passiert.

Schlüssel Wert Beschreibung

&$GLOBALS['TL_LANG'] Die Bezeichnung wird in der Seitenstruktur und in der label Dateiverwaltung verwendet. Enthält normalerweise eine ( string ) Referenz auf das Spracharray.

Elterntabelle ptable Name der bezogenen Elterntabelle (table.pid = ptable.id). ( string )

ctable Kindtabellen ( array ) Name der bezogenen Kindtabellen (table.id = ctable.pid).

Data Container Table (Tabellen), File (lokale Konfigurationsdatei) oder Folder dataContainer ( string ) (Dateiverwaltung).

closed true/false ( boolean ) Verbietet das Anlegen neuer Datensätze in der Tabelle.

notEditable true/false ( boolean ) Verbietet das Bearbeiten der Tabelle.

notDeletable true/false ( boolean ) Verbietet das Löschen von Datensätzen in der Tabelle.

notSortable true/false ( boolean ) Verbietet das Sortieren von Datensätzen in der Tabelle.

notCopyable true/false ( boolean ) Verbietet das Kopieren von Datensätzen in der Tabelle.

Verbietet das Erstellen von neuen Datensätzen (kopieren bleibt notCreatable true/false ( boolean ) erlaubt).

Aktiviert die "Speichern und Bearbeiten"-Schaltfläche beim switchToEdit true/false ( boolean ) Anlegen eines neuen Datensatzes (nur Sortierungsmodus 4).

Aktiviert das Anlegen einer neuen Version beim Speichern eines enableVersioning true/false ( boolean ) Datensatzes.

Verhindert die Duplizierung der Kinddatensätze, wenn ein doNotCopyRecords true/false ( boolean ) Datensatz der Elterntabelle dupliziert wird.

Verhindert die Löschung der Kinddatensätze, wenn ein doNotDeleteRecords true/false ( boolean ) Datensatz der Elterntabelle gelöscht wird.

Ruft eine Callback-Funktion beim Initialisieren des Data Callback-Funktion onload_callback Containers auf und übergibt das DataContainer-Objekt als ( array ) Argument.

Ruft eine Callback-Funktion nach der Aktualisierung eines Callback-Funktion onsubmit_callback Datensatzes auf und übergibt das DataContainer-Objekt als ( array ) Argument.

Callback-Funktion Ruft eine Callback-Funktion beim Löschen eines Datensatzes ondelete_callback ( array ) auf und übergibt das DataContainer-Objekt als Argument.

Ruft eine Callback-Funktion beim Verschieben eines Callback-Funktion oncut_callback Datensatzes auf und übergibt das DataContainer-Objekt als ( array ) Argument.

Referenz 79 Handbuch für Contao 3.4

Ruft eine Callback-Funktion beim Duplizieren eines Datensatzes Callback-Funktion oncopy_callback auf und übergibt die Insert ID sowie das DataContainer-Objekt ( array ) als Argument.

Ruft eine Callback-Funktion beim Erstellen einer neuen Version Callback-Funktion onversion_callback eines Datensatzes auf und übergibt die Tabelle, die Insert ID ( array ) sowie das DataContainer-Objekt als Argument.

Ruft eine Callback-Funktion beim Wiederherstellen einer Version Callback-Funktion onrestore_callback eines Datensatzes auf und übergibt die Insert ID, die Tabelle, die ( array ) Daten sowie die Version als Argument.

Tabellen- Bestimmt die Konfigurartion der Datenbank-Tabelle, z.B. 'keys' sql Konfiguration => array ( 'id' => 'primary', 'pid' => 'index' ) ( array )

Datensätze auflisten

Das Auflistungsarray legt fest, wie Datensätze aufgelistet werden. Die Contao Core-Engine unterstützt drei Ansichten: den "List View", den "Parent View" und den "Tree View". Sie können verschiedene Filter- und Sortieroptionen setzen und eigene Bezeichnungen einfügen.

Sortieroptionen

Schlüssel Wert Beschreibung

0 Keine Sortierung 1 Sortierung nach einem festen Feld 2 Sortierung nach einem variablen Feld 3 Sortierung anhand der Elterntabelle Sortierungsmodus mode 4 Darstellung der Kinddatensätze eines Elterndatensatzes (vgl. ( integer ) Stylesheets-Modul) 5 Darstellung als Baum (vgl. Seitenstruktur) 6 Sortierung der Kinddatensätze anhand eines Baumes (vgl. Artikelverwaltung)

1 Aufsteigende Sortierung nach Anfangsbuchstabe 2 Absteigende Sortierung nach Anfangsbuchstabe 3 Aufsteigende Sortierung nach den ersten beiden Buchstaben 4 Absteigende Sortierung nach den ersten beiden Buchstaben 5 Aufsteigende Sortierung nach Tag Sortierflag 6 Absteigende Sortierung nach Tag flag ( integer ) 7 Aufsteigende Sortierung nach Monat 8 Absteigende Sortierung nach Monat 9 Aufsteigende Sortierung nach Jahr 10 Absteigende Sortierung nach Jahr 11 Aufsteigende Sortierung 12 Absteigende Sortierung

search zeigt das Suchfeld an sort zeigt das Sortiermenü an Panellayout filter zeigt die Filtermenüs an panelLayout ( string ) limit zeigt das Limitmenü an. Trennen Sie die Menüs mit Komma (= Abstand) oder Strichpunkt (= neue Zeile), also z.B. sort,filter;search,limit .

Standard- fields Sortierfelder Eines oder mehrere Felder, anhand derer die Tabelle sortiert wird. ( array )

Header-Felder Eines oder mehrere Felder, die im Header des Parent View headerFields ( array ) angezeigt werden (nur Sortierungsmodus 4).

Baumsymbole Pfad zu einem Symbol, das oberhalb des Baumes angezeigt wird icon ( string ) (nur Sortierungsmodus 5 und 6).

Wurzeldatensätze IDs der Wurzeldatensätze (Pagemounts). Wird normalerweise root ( array ) automatisch gesetzt.

Referenz 80 Handbuch für Contao 3.4

Abfragefilter Ermöglicht das Hinzufügen eigener Filter als Arrays, z.B. filter ( array ) array('status=?', 'active') .

true/false Ermöglicht das Deaktivieren der Gruppenüberschriften im List disableGrouping ( boolean ) View und Parent View.

Callback-Funktion Wird anstatt der Standardroutine zur Erstellung der Einfüge- paste_button_callback ( array ) Schaltflächen ausgeführt.

Callback-Funktion Wird zur Darstellung der Kinddatensätze ausgeführt (nur child_record_callback ( array ) Sortierungsmodus 4).

CSS-Klasse Ermöglicht das Hinzufügen einer CSS-Klasse zu den Parent-View- child_record_class ( string ) Elementen.

Bezeichnungen

Schlüssel Wert Beschreibung

Eines oder mehrere Felder, die in der Liste angezeigt werden (z.B. fields Felder ( array ) array('title', 'user_id:tl_user.name') ).

true/false Legt fest, ob Contao einen Tabellenkopf mit Spaltennamen ausgeben soll showColumns ( boolean ) (vgl. Mitgliederliste im Backend)

Format-String format HTML-Zeichenkette zur Formatierung der angezeigten Felder (z.B. %s ). ( string )

Anzahl an maxCharacters Maximale Länge der Bezeichnung. Zeichen ( integer )

Callback-Funktion Wird anstatt der Standardroutine zur Erstellung der Gruppennamen group_callback ( array ) ausgeführt.

Callback-Funktion Wird anstatt der Standardroutine zur Erstellung der Bezeichnung label_callback ( array ) ausgeführt.

Aktionen

Das Aktionsarray ist in zwei Bereiche unterteilt: globale Aktionen, die sich auf die Tabelle beziehen (z.B. mehrere Datensätze auf einmal bearbeiten), sowie reguläre Aktionen, die sich auf einen bestimmten Datensatz beziehen (z.B. Bearbeiten oder Löschen).

Globale Aktionen

Schlüssel Wert Beschreibung

&$GLOBALS['TL_LANG'] Bezeichnung der Schaltfläche. Enthält normalerweise eine Referenz label ( string ) auf das Spracharray.

URL-Fragment URL-Fragment, das beim Anklicken der Schaltfläche an die URL href ( string ) angehängt wird (z.B. act=editAll ).

CSS-Klasse class CSS-Klasse der Schaltfläche. ( string )

Zusätzliche Attribute attributes Zusätzliche Attribute wie z.B. Eventhandler oder Style-Definitionen. ( string )

Callback-Funktion Wird anstatt der Standardroutine zur Erstellung des button_callback ( array ) Navigationssymbols ausgeführt.

Reguläre Aktionen

Schlüssel Wert Beschreibung

Referenz 81 Handbuch für Contao 3.4

&$GLOBALS['TL_LANG'] Bezeichnung der Schaltfläche. Enthält normalerweise eine Referenz label ( string ) auf das Spracharray.

URL-Fragment URL-Fragment, das beim Anklicken der Schaltfläche an die URL href ( string ) angehängt wird (z.B. act=edit ).

Navigationssymbol icon Pfad und Dateiname des Icons. ( string )

Zusätzliche Attribute attributes Zusätzliche Attribute wie z.B. Eventhandler oder Style-Definitionen. ( string )

Callback-Funktion Wird anstatt der Standardroutine zur Erstellung des button_callback ( array ) Navigationssymbols ausgeführt.

Felder

Das Felderarray beschreibt die Spalten einer Tabelle. Anhand dieser Metadaten entscheidet die Contao Core-Engine, welches Eingabefeld geladen wird, ob ein Benutzer darauf zugreifen darf und ob es als Sortierkriterium verwendet werden kann.

Schlüssel Wert Beschreibung

&$GLOBALS['TL_LANG'] Bezeichnung des Feldes. Enthält normalerweise eine Referenz label ( string ) auf das Spracharray.

Standardwert Der Standardwert wird bei der Erstellung eines neuen default ( mixed ) Datensatzes gesetzt.

Blendet das Feld für reguläre Benutzer aus. Kann in den exclude true/false ( boolean ) Gruppeneinstellungen festgelegt werden (erlaubte Felder).

Fügt das Feld dem Suchmenü hinzu (vgl. "Datensätze sortieren" - search true/false ( boolean ) > "Paneellayout").

Fügt das Feld dem Sortiermenü hinzu (vgl. "Datensätze sortieren" sorting true/false ( boolean ) -> "Paneellayout").

Fügt das Feld dem Filtermenü hinzu (vgl. "Datensätze sortieren" - filter true/false ( boolean ) > "Paneellayout").

1 Aufsteigende Sortierung nach Anfangsbuchstabe 2 Absteigende Sortierung nach Anfangsbuchstabe 3 Aufsteigende Sortierung nach den ersten X Buchstaben (vgl. length) 4 Absteigende Sortierung nach den ersten X Buchstaben (vgl. length) 5 Aufsteigende Sortierung nach Tag flag Sortierflag ( integer ) 6 Absteigende Sortierung nach Tag 7 Aufsteigende Sortierung nach Monat 8 Absteigende Sortierung nach Monat 9 Aufsteigende Sortierung nach Jahr 10 Absteigende Sortierung nach Jahr 11 Aufsteigende Sortierung 12 Absteigende Sortierung

Sortierlänge Gibt die Anzahl der Zeichen an, die zur Gruppierung der length ( integer ) Datensätze verwendet wird (Sortierflag 3 und 4).

text Textfeld password Passwortfeld textarea Textarea select Drop-Down-Menü checkbox Checkbox radio Radio-Button radioTable Tabelle mit Bildern und Radio-Buttons imageSize 2 Textfelder mit Drop-Down-Menü zur Auswahl inputUnit Textfeld mit Drop-Down-Menü zur Auswahl der Einheit inputType Feldtyp ( string ) trbl Vier Textfelder mit Drop-Down-Menü zur Auswahl der Einheit

Referenz 82 Handbuch für Contao 3.4

chmod CHMOD-Tabelle pageTree Seitenbaum fileTree Dateibaum tableWizard Tabellenassistent timePeriod Textfeld mit Drop-Down-Menü zur Auswahl listWizard Listenassistent optionWizard Optionsassistent moduleWizard Modulassistent checkboxWizard Checkbox-Assistent

options Optionen ( array ) Optionen eines Drop-Down- oder Radio-Button-Menüs.

Kann verwendet werden, um die Optionen eines Drop-Down- oder Callback-Funktion options_callback Radio-Button-Menüs mit Hilfe einer individuellen Funktion zu ( array ) laden.

Lädt die Optionen eines Drop-Down- oder Radio-Button-Menüs foreignKey tabelle.feld ( string ) aus einer Tabelle. Verwendet die ID als Schlüssel und das angegebene Feld als Wert.

&$GLOBALS['TL_LANG'] Bezeichnungen der Optionen. Enthält normalerweise eine reference ( string ) Referenz auf das Spracharray.

&$GLOBALS['TL_LANG'] Erklärung des Feldes. Enthält normalerweise eine Referenz auf explanation ( string ) das Spracharray.

Wird anstatt der Standardroutine zur Erstellung eines Callback-Funktion input_field_callback Formularfeldes ausgeführt und übergibt das DataContainer-Objekt ( array ) sowie die Bezeichnung als Argument.

Feldkonfiguration eval Verschiedene Einstellungen (vgl. nächsten Abschnitt). ( array )

Callback-Funktion Fügt dem Eingabefeld den Rückgabewert einer individuellen wizard ( array ) Funktion hinzu.

Tabellenkonfiguration Bestimmt den Datentyp und seine Konfiguration in der Datenbank, sql ( string ) z.B. varchar(255) NOT NULL default ''

Relations- Bestimmt die Beziehung zur Elterntabelle (vgl. Abschnitt relation Konfiguration "Relationen"). ( array )

Wird beim Laden des Eingabefeldes ausgeführt und übergibt den Callback-Funktion load_callback Feldwert sowie das DataContainer-Objekt als Argument. Erwartet ( array ) einen Feldwert als Rückgabewert.

Wird beim Speichern des Feldes ausgeführt und übergibt den Callback-Funktion Feldwert sowie das DataContainer-Objekt als Argument. Erwartet save_callback ( array ) einen Feldwert als Rückgabewert. Durch Auslösen einer Exception kann eine Fehlermeldung ausgegeben werden.

Evaluation

Das Evaluationsarray konfiguriert ein Eingabefeld im Detail. Sie können es z.B. zu einem Pflichtfeld machen, die verschlüsselte Datenspeicherung aktivieren oder sein Aussehen verändern. Benutzereingaben können anhand eines regulären Ausdrucks geprüft werden.

Schlüssel Wert Beschreibung

true/false Zeigt das Icon zum Aufruf des Hilfeassistenten neben der helpwizard ( boolean ) Feldbezeichnung an.

true/false mandatory Macht ein Feld zu einem Pflichtfeld. ( boolean )

Maximale Legt die maximale Anzahl an Zeichen fest, die in das Feld eingegeben maxlength Länge werden dürfen. ( integer )

Referenz 83 Handbuch für Contao 3.4

minlength Mindestlänge Legt die Anzahl an Zeichen fest, die mindestens in das Feld eingegeben ( integer ) werden müssen.

Maximaler maxval Wert Höchste erlaubte Zahl (bei nummerischen Feldern). ( integer )

Minimaler minval Wert Minimal erlaubte Zahl (bei nummerischen Feldern). ( integer )

true/false Legt fest, dass das Feld nur ein einziges Mal pro Tabelle ausgewählt fallback ( boolean ) werden darf.

alias Prüft auf ein gültiges Alias.

Erlaubt nur alphanumerische Zeichen (inklusive alnum Punkt [.] Minus [-], Unterstrich [_] und Leerschlag [ ]).

Erlaubt nur alphabetische Zeichen (inklusive Punkt alpha [.] Minus [-] und Leerschlag [ ]).

date Prüft auf ein gültiges Datum.

datim Prüft auf ein gültiges Datum mit Uhrzeit.

Erlaubt nur numerische Zeichen (inklusive Punkt [.] digit und Minus [-]).

natural Erlaubt nur nicht-negative Zahlen (inklusive 0).

email Prüft auf eine gültige E-Mail-Adresse.

Regulärer emails Prüft auf eine Liste von gültigen E-Mail-Adressen. rgxp Ausdruck ( string ) extnd Erlaubt alles außer #&()/<=> .

Prüft auf eine gültige E-Mail-Adresse im "friendly friendly name format".

language Prüft auf einen gültigen Sprachcode.

locale Prüft auf ein gültiges Gebietsschema (z.B. "de-CH").

folderalias Prüft auf ein gültiges Ordner-URL Alias.

Prüft auf eine gültige Telefonnummer (Zahlen, phone Leerschlag [ ], Plus [+], Minus [-], Klammern [()] und Schrägstrich [/]).

prcnt Erlaubt Zahlen zwischen 0 und 100.

url Prüft auf eine gültige URL.

time Prüft auf eine gültige Uhrzeit.

Spalten cols Anzahl an Spalten (gilt nur für Textareas). ( integer )

Reihen rows Anzahl an Reihen (gilt nur für Textareas). ( integer )

Erlaubt die mehrfache Auswahl bzw. Eingabe und kann für Textfelder, true/false multiple Drop-Down-Menüs, Radio-Buttons und Checkboxen verwendet werden. ( boolean ) Für den Checkbox-Assistenten benötigt.

Größe size Größe eines Mehrfachfeldes bzw. Anzahl an Eingabefeldern. ( integer )

Formatierung style CSS-Formatierung (z.B. border:2px ) ( string )

Referenz 84 Handbuch für Contao 3.4

Rich Text tinyMCE Konfigurationsdatei config/tinyMCE.php verwenden rte Editor-Datei tinyFlash Konfigurationsdatei config/tinyFlash.php verwenden ( string ) Die Verwendung eigener Konfigurationsdateien ist möglich.

true/false Legt fest, ob das Formular bei der Änderung des Feldwertes automatisch submitOnChange ( boolean ) abgeschickt wird.

true/false nospace Legt fest, ob Leerzeichen eingegeben werden dürfen. ( boolean )

true/false allowHtml Legt fest, ob HTML-Eingaben erlaubt sind. ( boolean )

true/false preserveTags Erlaubt alle (!) HTML-Tags in Benutzereingaben. ( boolean )

true/false Legt fest, ob HTML-Entities dekodiert werden (immer der Fall bei HTML- decodeEntities ( boolean ) Eingaben).

true/false doNotSaveEmpty Verhindert das Speichern des leeren Feldes. ( boolean )

true/false Legt fest, dass Eingaben immer gespeichert werden, selbst wenn der alwaysSave ( boolean ) Feldwert nicht verändert wurde.

true/false spaceToUnderscore Wandelt alle Leerzeichen in Unterstriche um. ( boolean )

true/false unique Legt fest, dass ein Feldwert nur einmal vorkommen darf. ( boolean )

true/false encrypt Speichert den Feldwert verschlüsselt. ( boolean )

true/false Legt fest, ob dem Feldwert ein Schrägstrich hinzugefügt (`true`) oder ein trailingSlash ( boolean ) bestehender Schrägstrich am Ende entfernt (`false`) wird.

true/false Legt fest, ob Dateien und Ordner oder nur Ordner angezeigt werden. Gilt files ( boolean ) nur für Dateibäume.

true/false Entfernt die Radio Buttons bzw. Checkboxen zur Auswahl von Ordnern. filesOnly ( boolean ) Gilt nur für Dateibäume.

Dateitypen Beschränkt den Dateibaum auf bestimmte Dateitypen (kommagetrennte extensions ( string ) Liste). Gilt nur für Dateibäume.

Pfad path Individuelles Wurzelverzeichnis für Dateibäume. ( string )

Feldtyp checkbox erlaubt die Auswahl mehrerer Dateien fieldType ( string ) radio erlaubt die Auswahl genau einer Datei. Gilt nur für Dateibäume.

true/false includeBlankOption Legt fest, ob ein Drop-Down-Menü eine leere Option am Anfang enthält. ( boolean )

Label blankOptionLabel Bezeichnung der leeren Option (Standard: - ). ( string )

true/false chosen Auswahlmenüs mittels Chosen erweitern. ( boolean )

true/false findInSet Sortiert ein Optionsarray anhand der Schlüssel anstatt anhand der Werte. ( boolean )

true/false datepicker Aktiviert das Popup zur Auswahl eines Datums. ( boolean )

true/false colorpicker Aktiviert das Popup zur Farbauswahl. ( boolean )

true/false Legt fest, ob ein Feld im Frontend bearbeitet werden darf. Gilt nur für die feEditable ( boolean ) Tabelle tl_member.

Referenz 85 Handbuch für Contao 3.4

personal Persönliche Daten Gruppe address Adressdaten feGroup ( string ) contact Kontaktdaten login Login-Daten (nur Tabelle tl_member ) Das Hinzufügen eigener Gruppen ist möglich.

true/false feViewable Legt fest, ob das Feld in der Mitgliederliste sichtbar ist. ( boolean )

true/false Legt fest, dass das Feld beim Duplizieren des Datensatzes nicht mit doNotCopy ( boolean ) kopiert wird.

true/false Versteckt den Inhalt des Feldes (dieser ist jedoch trotzdem im Quelltext hideInput ( boolean ) sichtbar!).

true/false Versteckt das Feld in der "Mehrere bearbeiten"- und "Details anzeigen"- doNotShow ( boolean ) Ansicht.

true/false isBoolean Zeigt an, dass das Feld vom Typ Boolean ist. ( boolean )

true/false disabled Deaktiviert das Eingabefeld (wird nicht von allen Feldern unterstützt). ( boolean )

true/false Das Feld kann nur gelesen werden (wird nicht von allen Feldern readonly ( boolean ) unterstützt).

Trennzeichen Die Auswahl dieses Feldes wird nicht als serialisierter String sondern als csv Trennzeichen-separierte Liste gespeichert. Bsp: 'eval' => ( string ) array('csv'=>',')

Relationen

Relationen definieren, ob und wie Feldwerte mit einer weiteren Tabelle zusammenhängen. Die referenzierte Tabelle wird im foreignKey Schlüssel definiert. Relationen ermöglichen den Model-Klassen, referenzierte Datensätze effizient und entwicklerfreundlich zu laden (siehe Model::getRelated() ).

Schlüssel Wert Beschreibung

hasOne Feldwert referenziert einen Kinddatensatz Beziehungstyp hasMany Feldwert referenziert mehrere Kinddatensätze (serialisiert) type ( string ) belongsTo Feldwert referenziert eine Elterntabelle (z.B. pid ) belongsToMany Feldwert referenziert mehrere Elterndatensätze (serialisiert)

Ladeverhalten lazy lädt referenzierte Datensätze erst wenn erforderlich (Standard, spart RAM). load ( string ) eager lädt referenzierte Datensätze automatisch (spart DB-Abfragen).

Referenz 86 Handbuch für Contao 3.4

Paletten

Eine Palette besteht aus mehreren Formularfeldern, die zur Bearbeitung eines Datensatzes benötigt werden. Dabei sind meistens nicht alle Spalten einer Tabelle enthalten, sondern nur die, die zu einem bestimmten Modul oder Element gehören. Paletten können sich je nach Benutzerrechten oder Elementtyp dynamisch ändern und Teile des Formulars (Subpaletten) können interaktiv per Ajax nachgeladen werden.

Gruppen definieren

Eine Palette ist eine Reihung mehrerer Feldnamen, die durch einen Strichpunkt (;) oder ein Komma (,) verbunden sind. Während das Komma nur zur Abgrenzung der Feldnamen verwendet wird, markiert der Strichpunkt den Beginn einer neuen Gruppe, die aus- und eingeklappt werden kann.

Das obige Beispiel wird durch folgenden Code definiert:

Paletten 87 Handbuch für Contao 3.4

{title_legend},headline,alias,author;{date_legend},date,time;{teaser_legend:hide},subheadline,teaser

Die Platzhalter title_legend und date_legend werden durch die entsprechenden Übersetzungen im "TL_LANG"-Array ersetzt.

$GLOBALS['TL_LANG']['tl_news']['title_legend'] = 'Titel und Autor'; $GLOBALS['TL_LANG']['tl_news']['date_legend'] = 'Datum und Uhrzeit';

Felder ausrichten

Das Contao-Backend verwendet ein 2-spaltiges Grid-System, um Formularfelder innerhalb ihrer Gruppen auszurichten. Folgende CSS-Klassen können in der "eval"-Sektion des Data Container Arrays als tl_class vergeben werden (z.B. 'tl_class'=>'w50 wizard' ):

tl_class Beschreibung

w50 Setzt die Feldbreite auf 50% und floatet das Element ( float:left ).

clr Hebt alle Floats auf ( clear:both ).

wizard Verkürzt das Eingabefeld, damit genug Platz für den Wizard (z.B. Date Picker) ist.

long Lässt das Eingabefeld zwei Spalten umspannen.

m12 Fügt dem Element einen oberen Abstand von 12 Pixeln hinzu (z.B. für einzelne Checkboxen).

Paletten 88 Handbuch für Contao 3.4

Callbacks

Callback-Funktionen basieren auf dem Event Dispatcher-Pattern. Sie können mehrere Callback-Funktionen pro Ereignis registrieren, die dann bei dessen Eintreten ausgeführt werden. Mit Hilfe von Callbacks kann der Programmablauf der Contao Core-Engine angepasst werden.

Globale Callbacks

Callback Beschreibung

Wird bei der Initialisierung des DataContainer-Objekts ausgeführt. Ermöglicht z.B. das Prüfen onload_callback von Zugriffsrechten oder die dynamische Änderung des Data Container Arrays zur Laufzeit.

Wird beim Abschicken eines Backend-Formulars ausgeführt. Ermöglicht z.B. die Modifizierung onsubmit_callback der Formulardaten, bevor diese in die Datenbank geschrieben werden (wird in der Kalender- Erweiterung zur Intervalberechnung eingesetzt).

ondelete_callback Wird ausgeführt bevor ein Datensatz aus der Datenbank entfernt wird.

oncut_callback Wird ausgeführt nachdem ein Datensatz verschoben wurde.

oncopy_callback Wird ausgeführt nachdem ein Datensatz dupliziert wurde.

Auflistungscallbacks

Callback Beschreibung

Ermöglicht individuelle Einfüge-Schaltflächen und wird z.B. in der Seitenstruktur paste_button_callback verwendet, um die Icons abhängig von den Benutzerrechten zu deaktivieren (erfordert eine zusätzliche Prüfung mittels load_callback).

child_record_callback Legt fest, wie die Kindelemente im "Parent View" dargestellt werden.

group_callback Ermöglicht individuelle Gruppennamen in der Listenansicht.

Ermöglicht individuelle Bezeichnungen in der Listenansicht und wird z.B. im Benutzer- label_callback Modul verwendet, um die Status-Icons hinzuzufügen.

Aktionscallbacks

Callback Beschreibung

Ermöglicht individuelle Navigationssymbole und wird z.B. in der Seitenstruktur verwendet, um button_callback Icons abhängig von den Benutzerrechten zu deaktivieren (erfordert eine zusätzliche Prüfung mittels load_callback).

Feldcallbacks

Callback Beschreibung

Ermöglicht das Befüllen eines Drop-Down-Menüs oder einer Checkbox-Liste mittels einer options_callback individuellen Funktion. Kann z.B. für bedingte Fremdschlüssel-Relationen verwendet werden.

Ermöglicht das Erstellen individueller Formularfelder und wird z.B. im Backend-Modul input_field_callback "Persönliche Daten" verwendet, um das "Daten bereinigen"-Feld zu erstellen. Achtung: Eingaben werden nicht automatisch gespeichert!

Wird bei der Initialisierung eines Formularfeldes ausgeführt. Ermöglicht z.B. das Laden eines load_callback Standardwertes.

Wird beim Abschicken eines Feldes ausgeführt. Ermöglicht z.B. das Hinzufügen einer save_callback

Callbacks 89 Handbuch für Contao 3.4

save_callback individuellen Prüfung.

Callbacks 90 Handbuch für Contao 3.4

Contao anpassen

Anpassbarkeit ist eine zentrale Anforderung an jede Applikation und besonders an ein Content Management System. Contao bietet sehr viele Möglichkeiten, die Konfiguration zu modifizieren, Felder und Bezeichnungen anzupassen, eigene Routinen hinzuzufügen oder eigene Module zu erstellen. Sie können fast jeden Ablauf der Contao Core-Engine beeinflussen, ohne dabei deren Dateien ändern zu müssen.

Contao anpassen 91 Handbuch für Contao 3.4

Internen Cache umgehen

Vor der Anpassung von Contao oder der Entwicklung von Erweiterungen sollte unbedingt der interne Cache deaktiviert bzw. umgangen werden. Dazu navigieren Sie im Backend zu "System"->"Einstellungen" und setzten einen Haken unter "Globale Einstellungen" bei "Internen Cache umgehen".

Sobald die Seite jedoch in den produktiven Betrieb geht, sollte unbedingt der Haken bei "Internen Cache umgehen" entfernt werden, da das System ohne den Cache gerade bei größeren Projekten um einiges langsamer reagiert.

Internen Cache umgehen 92 Handbuch für Contao 3.4

Konfiguration anpassen

Die Contao-Konfiguration ist in drei Bestandteile aufgeteilt: die Systemkonfiguration, die DCA-Konfiguration und die Sprachkonfiguration. Das globale Konfigurationsarray wird zur Laufzeit aus denjenigen Bestandteilen zusammengesetzt, die für die Ausgabe einer Seite gebraucht werden. Um Zeit und Arbeitsspeicher zu sparen, werden nicht benötigte Konfigurationsdateien dabei übersprungen.

Die Systemkonfiguration anpassen

Die Systemkonfiguration ist in den config.php -Dateien der verschiedenen Contao-Module gespeichert. Änderungen können updatesicher in der Datei system/config/localconfig.php hinterlegt werden. Die meisten Parameter werden in den Backend-Einstellungen gesetzt und automatisch in die lokale Konfigurationsdatei geschrieben, so dass Sie diese in der Regel nicht manuell bearbeiten müssen.

// Den Extension Creator abschalten unset($GLOBALS['BE_MOD']['devtools']['extension']);

### INSTALL SCRIPT START ### $GLOBALS['TL_CONFIG']['debugMode'] = false; $GLOBALS['TL_CONFIG']['displayErrors'] = false;

Platzieren Sie Ihre Änderungen unbedingt oberhalb der Zeile INSTALL SCRIPT START , da sie andernfalls automatisch entfernt werden. Und speichern Sie Ihre Einstellungen niemals in der Datei config.php, da diese Datei bei Aktualisierungen überschrieben werden kann!

Die DCA-Konfiguration anpassen

Contao verwendet Data Container Arrays zur Speicherung von Tabellen-Metadaten. Die Data Container-Konfiguration ist in den dca -Ordnern der verschiedenen Contao-Module hinterlegt und kann in der Datei system/config/dcaconfig.php updatesicher angepasst werden.

// Firma zu einem Pflichtfeld in der Mitgliedertabelle machen $GLOBALS['TL_DCA']['tl_member']['fields']['company']['eval']['mandatory'] = true;

// Firmennamen dürfen nur alphanumerische Zeichen beinhalten $GLOBALS['TL_DCA']['tl_member']['fields']['company']['eval']['rgxp'] = 'alnum';

// Nur Administratoren dürfen Include-Elemente verwenden if (!BackendUser::getInstance()->isAdmin) { unset($GLOBALS['TL_CTE']['includes']); }

Wie Sie sehen, eignet sich die Datei dcaconfig.php hervorragend für kleinere Anpassung der Contao-Konfiguration. Größere Änderungen sollten jedoch zur besseren Übersicht in einem eigenen Modul gekapselt werden.

Bezeichnungen und Übersetzungen anpassen

Bezeichnungen und Übersetzungen sind in den languages -Ordnern der verschiedenen Contao-Module hinterlegt. Jede Sprache wird anhand ihres ISO-639-1 Sprachcodes identifiziert. Änderungen können updatesicher in der Datei system/config/langconfig.php gespeichert werden.

// Eine Bezeichnung in allen Sprachen ändern

Konfiguration anpassen 93 Handbuch für Contao 3.4

$GLOBALS['TL_LANG']['MSC']['goBack'] = '«';

// Eine Bezeichnung in einer bestimmten Sprache ändern if ($GLOBALS['TL_LANGUAGE'] == 'de') { $GLOBALS['TL_LANG']['tl_layout']['column'] = 'Bereich'; } elseif ($GLOBALS['TL_LANGUAGE'] == 'fr') { $GLOBALS['TL_LANG']['tl_layout']['column'] = 'Section'; }

Auch Sprachanpassungen können in einem eigenen Modul gekapselt werden, was ab einer bestimmten Anzahl empfohlen ist.

Konfiguration anpassen 94 Handbuch für Contao 3.4

Eigene Felder hinzufügen

Nehmen wir an, Sie möchten die Mitgliedertabelle um eine Kundennummer erweitern. Da das Hinzufügen eines Feldes mehr erfordert als nur das Ändern einer einzelnen Datei, wird das Anlegen eines eigenen Moduls im Verzeichnis system/modules empfohlen. Denken Sie daran, dass Module in alphabetischer Reihenfolge geladen werden. Nennen Sie es also nicht custom , wenn Sie damit die news -Erweiterung anpassen wollen.

Die DCA-Konfiguration erweitern

Legen Sie die Datei dca/tl_member.php in Ihrem Modulordner an und fügen Sie die Metadaten des neuen Feldes ein. Seit Contao 3 werden außerdem auch die dazugehörigen Felder sowie deren Konfiguration für die Datenbank unter sql direkt mit angegeben.

// Anpassung der Palette $GLOBALS['TL_DCA']['tl_member']['palettes']['default'] = str_replace ( 'company', 'customer_number,company', $GLOBALS['TL_DCA']['tl_member']['palettes']['default'] );

// Hinzufügen der Feld-Konfiguration $GLOBALS['TL_DCA']['tl_member']['fields']['customer_number'] = array ( 'label' => &$GLOBALS['TL_LANG']['tl_member']['customer_number'], 'exclude' => true, 'inputType' => 'text', 'eval' => array('mandatory'=>true, 'rgxp'=>'digit', 'maxlength'=>8), 'sql' => "varchar(8) NOT NULL default ''" );

Falls Sie den obigen Code nicht verstehen, lesen Sie den Abschnitt über Data Container Arrays.

Nachdem Sie die Datei abgespeichert haben, müssen Sie die Datenbank aktualisieren. Dazu verwenden Sie das Contao- Installtool.

Eine Übersetzung hinzufügen

Erstellen Sie die Datei languages/de/tl_member.php in Ihrem Modulordner und legen Sie die deutschen Bezeichnungen an:

$GLOBALS['TL_LANG']['tl_member']['customer_number'] = array ( 'Kundennummer', 'Bitte geben Sie die 8-stellige Kundennummer ein.' );

Jetzt können Sie in der Mitgliederverwaltung eine bis zu 8 Ziffern lange Kundennummer eingeben. Wird das Feld nicht ausgefüllt oder enthält es nicht-numerische Zeichen, gibt Contao beim Abschicken des Formulars eine entsprechende Fehlermeldung aus.

Eigene Felder hinzufügen 95 Handbuch für Contao 3.4

TinyMCE anpassen

Diese Seite erklärt, wie man die Rich Text Editor-Konfiguration anpasst und updatesicher speichert. Beachten Sie, dass Contao standardmäßig nicht alle TinyMCE-Plugins enthält und fehlende Ressourcen gegebenenfalls von der TinyMCE- Projektwebseite heruntergeladen und in den Ordner assets/tinyMCE/plugins Ihrer Contao-Installation kopiert werden müssen.

Das obige Bild zeigt die Standardkonfiguration des Editors, die in der Datei system/config/tinyMCE.php hinterlegt ist. Um eine eigene Konfiguration zu erstellen, duplizieren Sie die Datei, fügen Sie Ihre Änderungen ein und speichern Sie die neue Datei als tinyCustom.php . Passen Sie dann noch die DCA-Konfiguration in der Datei system/config/dcaconfig.php an, damit Contao zukünftig die neue Konfigurationsdatei lädt.

// Die eigene RTE-Konfiguration für Text-Elemente verwenden $GLOBALS['TL_DCA']['tl_content']['fields']['text']['eval']['rte'] = 'tinyCustom';

TinyMCE anpassen 96 Handbuch für Contao 3.4

Methoden überschreiben

Nehmen wir an, Sie möchten das Navigationsmodul so anpassen, dass es immer erscheint, selbst wenn keine Unterseiten vorhanden sind und es normalerweise ausgeblendet würde. In letzterem Fall soll stattdessen ein entsprechender Hinweis ausgegeben werden. Damit zukünftige Updates ohne Probleme eingespielt werden können, soll möglichst viel von der Originalklasse erhalten bleiben. Inhaltselement- und Modulklassen können dynamisch in der Contao-Konfiguration angegeben und so einfach durch eigene Versionen ersetzt werden.

Eine eigene Klasse erstellen

Die originale Navigationsklasse verhält sich schon fast so wie gewünscht, außer dass die Methode generate() das Modul ganz ausblendet, wenn keine Unterseiten vorhanden sind. Da also nur diese eine Methode angepasst werden muss, empfiehlt es sich, die Originalklasse zu erweitern und einfach zu überschreiben. Definieren Sie dazu die Klasse ModuleMyNavigation in der Datei xcustom/ModuleMyNavigation.php :

// xcustom/ModuleMyNavigation.php class ModuleMyNavigation extends ModuleNavigation { public function generate() { // Die Originalmethode ausführen $buffer = parent::generate();

if (empty($buffer)) { $buffer = 'Keine Unterseiten vorhanden'; }

return $buffer; } }

Eine eigene Klasse registrieren

Inhaltselement- und Modulklassen können dynamisch in der Contao-Konfiguration zugeordnet und so einfach durch eigene Versionen ersetzt werden. Die Namen der Modulklassen werden im globalen Array FE_MOD gespeichert.

// xcustom/config/config.php $GLOBALS['FE_MOD']['navigationMenu']['navigation'] = 'ModuleMyNavigation';

Dank der dynamischen Konfiguration lädt Contao bei der nächsten Anfrage automatisch Ihre eigene Klasse und das Navigationsmodul gibt den Hinweis "Keine Unterseiten vorhanden" aus anstatt gar nicht zu erscheinen. Die Modifikation ist updatesicher und wartungsfrei.

Methoden überschreiben 97 Handbuch für Contao 3.4

Contao-Hooks

Hooks funktionieren ähnlich wie die Callback-Funktionen des Data Container Arrays. Sie können eine oder mehrere Funktionen für ein bestimmtes Ereignis registrieren, die dann bei dessen Eintreten ausgeführt werden. Dadurch lässt sich der Core um eigene Funktionalität erweitern. activateAccount

Der "activateAccount"-Hook wird bei der Aktivierung eines neuen Mitgliederkontos ausgeführt. Er übergibt das Benutzer- Objekt als Argument und erwartet keinen Rückgabewert. Hinzugefügt in Version 2.4.3.

// config.php $GLOBALS['TL_HOOKS']['activateAccount'][] = array('MyClass', 'myActivateAccount');

// MyClass.php public function myActivateAccount(Database_Result $objUser) { // Beliebiger Code } activateRecipient

Der "activateRecipient"-Hook wird bei der Aktivierung eines neuen Newsletter-Abonnenten ausgeführt. Er übergibt die E- Mail-Adresse, die IDs der Empfänger und die IDs der Verteiler als Argument und erwartet keinen Rückgabewert. Hinzugefügt in Version 2.8.RC1.

// config.php $GLOBALS['TL_HOOKS']['activateRecipient'][] = array('MyClass', 'myActivateRecipient');

// MyClass.php public function myActivateRecipient($strEmail, $arrRecipients, $arrChannels) { // Beliebiger Code } addComment

Der "addComment"-Hook wird beim Hinzufügen eines Kommentars ausgeführt. Er übergibt die ID des Datensatzes und das Datenarray als Argument und erwartet keinen Rückgabewert. Hinzugefügt in Version 2.8.2.

// config.php $GLOBALS['TL_HOOKS']['addComment'][] = array('MyClass', 'myAddComment');

// MyClass.php public function myAddComment($intId, $arrSet) { // Beliebiger Code } addCustomRegexp

Der "addCustomRegexp"-Hook wird beim Antreffen eines unbekannten regulären Ausdrucks ausgeführt. Er übergibt den Namen des Ausdrucks, den aktuellen Wert und das Widget-Objekt als Argument und erwartet einen booleschen Rückgabewert. Hinzugefügt in Version 2.6.2.

Contao-Hooks 98 Handbuch für Contao 3.4

// config.php $GLOBALS['TL_HOOKS']['addCustomRegexp'][] = array('MyClass', 'myAddCustomRegexp');

// MyClass.php public function myAddCustomRegexp($strRegexp, $varValue, Widget $objWidget) { if ($strRegexp == 'postal') { if (!preg_match('/^0-9{4,6}$/', $varValue)) { $objWidget->addError('Field ' . $objWidget->label . ' should be a postal code.'); }

return true; }

return false; } addLogEntry

Der "addLogEntry"-Hook wird beim Anlegen eines Log-Eintrags ausgeführt. Er übergibt den Log-Text, die Funktion und die Aktion als Argument und erwartet keinen Rückgabewert. Hinzugefügt in Version 2.8.RC1.

// config.php $GLOBALS['TL_HOOKS']['addLogEntry'][] = array('MyClass', 'myAddLogEntry');

// MyClass.php public function myAddLogEntry($strText, $strFunction, $strAction) { // Beliebiger Code } checkCredentials

Der "checkCredentials"-Hook wird bei der Eingabe eines falschen Passworts bei der Anmeldung ausgeführt. Er übergibt den Benutzernamen und das Passwort sowie das Benutzer-Objekt als Argument und erwartet einen booleschen Rückgabewert. Hinzugefügt in Version 2.6.0.

// config.php $GLOBALS['TL_HOOKS']['checkCredentials'][] = array('MyClass', 'myCheckCredentials');

// MyClass.php public function myCheckCredentials($strUsername, $strPassword, User $objUser) { // Eine globale Datenbank abfragen if ($this->checkGlobalDbFor($strUsername, $strPassword)) { return true; }

return false; } closeAccount

Der "closeAccount"-Hook wird bei der Schließung eines Benutzerkontos ausgeführt. Er übergibt die ID des Benutzers, den Betriebsmodus und das Modul-Objekt als Argument und erwartet keinen Rückgabewert. Hinzugefügt in Version 2.8.0.

// config.php $GLOBALS['TL_HOOKS']['closeAccount'][] = array('MyClass', 'myCloseAccount');

Contao-Hooks 99 Handbuch für Contao 3.4

// MyClass.php public function myCloseAccount($intId, $strMode, $objModule) { if ($strMode == 'close_delete') { // Beliebiger Code } } colorizeLogEntries

Der "colorizeLogEntries"-Hook wird im Label-Callback eines tl_log-Eintrags ausgeführt. Er übergibt den Log-Eintrag als Array und das Label als String und erwartet einen HTML-String als Rückgabewert. Dieser Hook kann dafür genutzt werden, ein Label für eigene Log-Kategorien zu generieren oder bestehende Labels zu modifizieren. Hinzugefügt in Version 3.3.RC1.

// config.php $GLOBALS['TL_HOOKS']['colorizeLogEntries'][] = array('MyClass', 'colorizeLogEntries');

// MyClass.php public function colorizeLogEntries($row, $label) { // Beliebiger Code

return $label; } compileDefinition

Der "compileDefinition"-Hook wird bei der Erstellung einer Formatdefinition in einem Stylesheet ausgeführt. Er übergibt das Konfigurationsarray als Argument und erwartet einen String als Rückgabewert. Hinzugefügt in Version 2.9.4.

// config.php $GLOBALS['TL_HOOKS']['compileDefinition'][] = array('MyClass', 'myCompileDefinition');

// MyClass.php public function myCompileDefinition($arrRow) { if (isset($arrRow['border-radius'])) { return "\nborder-radius:" . $arrRow['border-radius'] . ";"; }

return ''; } compileFormFields

Der "compileFormFields"-Hook wird vor der Ausgabe eines Formulars ausgeführt. Er übergibt ein Array mit FormFieldModel-Objekten, die Form-Id und das Formular-Objekt als Argument und erwartet das Array mit FormFieldModel- Objekten als Rückgabewert. Hier können Formularfelder dynamisch angepasst werden, bevor sie ausgegeben werden. Hinzugefügt in Version 3.2.

// config.php $GLOBALS['TL_HOOKS']['compileFormFields'][] = array('MyClass', 'myCompileFormFields');

// MyClass.php public function myCompileFormFields($arrFields, $formId, $this) { if ($formId == 'my_form_id')

Contao-Hooks 100 Handbuch für Contao 3.4

{ foreach ($arrFields AS $objFields) { if ($objFields->name == 'my_form_field_1') { // Beliebiger Code } } }

return $arrFields; } createDefinition

Der "createDefinition"-Hook wird beim Import einer Formatdefinition eines Stylesheets ausgeführt. Er übergibt Schlüssel und Wert, die originale Formatdefinition sowie das Daten-Array als Argument und erwartet ein Array oder false als Rückgabewert. Hinzugefügt in Version 2.9.4.

// config.php $GLOBALS['TL_HOOKS']['createDefinition'][] = array('MyClass', 'myCreateDefinition');

// MyClass.php public function myCreateDefinition($strKey, $strValue, $strDefinition, $arrSet) { if ($strKey == 'border-radius') { return array('border-radius'=>$strValue); }

return false; } createNewUser

Der "createNewUser"-Hook wird bei der Registrierung eines neuen Mitglieds ausgeführt. Er übergibt die ID des neuen Benutzers und das Datenarray als Argument und erwartet keinen Rückgabewert. Hinzugefügt in Version 2.2.0.

// config.php $GLOBALS['TL_HOOKS']['createNewUser'][] = array('MyClass', 'myCreateNewUser');

// MyClass.php public function myCreateNewUser($intId, $arrData) { // Den Datensatz modifizieren } executePreActions

Der "executePreActions"-Hook wird bei unbekannten Ajax-Anfragen ausgeführt, die keine DCA-Objekt benötigen. Er übergibt den Namen der Aktion als Argument und erwartet keinen Rückgabewert. Hinzugefügt in Version 2.6.1.

// config.php $GLOBALS['TL_HOOKS']['executePreActions'][] = array('MyClass', 'myExecutePreActions');

// MyClass.php public function myExecutePreActions($strAction) { if ($strAction == 'update') { // Beliebiger Code }

Contao-Hooks 101 Handbuch für Contao 3.4

} executePostActions

Der "executePostActions"-Hook wird bei unbekannten Ajax-Anfragen ausgegeben, die ein DCA-Objekt benötigen. Er übergibt den Namen der Aktion und das DataContainer-Objekt als Argument und erwartet keinen Rückgabewert. Hinzugefügt in Version 2.6.1.

// config.php $GLOBALS['TL_HOOKS']['executePostActions'][] = array('MyClass', 'myExecutePostActions');

// MyClass.php public function myExecutePostActions($strAction, DataContainer $dc) { if ($strAction == 'update') { // Beliebiger Code } } generateBreadcrumb

Der "generateBreadcrumb"-Hook ermöglicht das Modifizieren der Pfadnavigation. Er übergibt das Navigations-Array und das Modul-Objekt als Argument und erwartet ein Array als Rückgabewert. Hinzugefügt in Version 2.10.0

// config.php $GLOBALS['TL_HOOKS']['generateBreadcrumb'][] = array('MyClass', 'myGenerateBreadcrumb');

// MyClass.php public function myGenerateBreadcrumb($arrItems, \Module $objModule) { return $arrItems; } generateFrontendUrl

Der "generateFrontendUrl"-Hook wird bei der Erstellung einer Frontend-URL ausgeführt. Er übergibt die originale URL als Argument und erwartet eine Zeichenkette als Rückgabewert. Hinzugefügt in Version 2.5.8.

// config.php $GLOBALS['TL_HOOKS']['generateFrontendUrl'][] = array('MyClass', 'myGenerateFrontendUrl');

// MyClass.php public function myGenerateFrontendUrl($arrRow, $strParams, $strUrl) { return str_replace('.html', '.xml', $strUrl); } generatePage

Der "generatePage"-Hook wird vor der Erstellung des Seitenlayouts ausgeführt. Er übergibt das Seitenobjekt, das Layoutobjekt und eine Eigenreferenz als Argument und erwartet keinen Rückgabewert. Hinzugefügt in Version 2.8.RC1.

// config.php $GLOBALS['TL_HOOKS']['generatePage'][] = array('MyClass', 'myGeneratePage');

// MyClass.php

Contao-Hooks 102 Handbuch für Contao 3.4

public function myGeneratePage(\PageModel $objPage, \LayoutModel $objLayout, \PageRegular $objPageRegular) { // Beliebiger Code } getAllEvents

Der "getAllEvents"-Hook ermöglicht das Modifizieren von Terminen in Kalendern und Eventmodulen. Er übergibt das originale Datenarray, die IDs der Elternelemente sowie die Start- und Endzeit als Argument und erwartet ein Datenarray als Rückgabewert. Hinzugefügt in Version 2.6.4.

// config.php $GLOBALS['TL_HOOKS']['getAllEvents'][] = array('MyClass', 'myGetAllEvents');

// MyClass.php public function myGetAllEvents($arrEvents, $arrCalendars, $intStart, $intEnd, Module $objModule) { ksort($arrEvents); return $arrEvents; } getAttributesFromDca

Der "getAttributesFromDca"-Hook ermöglicht das Modifizieren der Formularfeldattribute. Er übergibt die originalen Attribute als Array und das DataContainer-Objekt und erwartet ein Array von Attributen als Rückgabewert. Hinzugefügt in Version 3.2.RC1.

// config.php $GLOBALS['TL_HOOKS']['getAttributesFromDca'][] = array('MyClass', 'myGetAttributesFromDca');

// MyClass.php public function myGetAttributesFromDca($arrAttributes, $objDca) { // do something return $arrAttributes; } getContentElement

Der "getContentElement"-Hook wird beim Rendern von Inhaltselementen ausgeführt. Er übergibt das Datenbankobjekt und den Ausgabe-String als Argument und erwartet einen Ausgabe-String als Rückgabewert. Hinzugefügt in Version 2.9.0.

// config.php $GLOBALS['TL_HOOKS']['getContentElement'][] = array('MyClass', 'myGetContentElement');

// MyClass.php public function myGetContentElement(Database_Result $objElement, $strBuffer) { return $strBuffer; } getImage

Der "getImage"-Hook wird bei der Erstellung eines Vorschaubildes ausgeführt und ermöglicht das Hinzufügen einer eigenen Routine. Er übergibt den Pfad, die Breite und Höhe, den Modus, den Cache-Namen und das Dateiobjekt als Argument und erwartet einen Pfad als Rückgabewert. Hinzugefügt in Version 2.8.RC1.

Contao-Hooks 103 Handbuch für Contao 3.4

// config.php $GLOBALS['TL_HOOKS']['getImage'][] = array('MyClass', 'myGetImage');

// MyClass.php public function myGetImage($image, $width, $height, $mode, $strCacheName, $objFile) { return MyImage::generateThumbnail($image, $widht, $height, $mode); } getPageIdFromUrl

Der "getPageIdFromUrl"-Hook wird beim Auswerten der URL-Fragmente ausgeführt. Er übergibt das Fragment-Array als Argument und erwartet ein Datenarray als Rückgabewert. Hinzugefügt in Version 2.5.4.

// config.php $GLOBALS['TL_HOOKS']['getPageIdFromUrl'][] = array('MyClass', 'myGetPageIdFromUrl');

// MyClass.php public function myGetPageIdFromUrl($arrFragments) { return array_unique($arrFragments); } getPageLayout

Der "getPageLayout"-Hook wird vor dem Initialisieren des Frontend-Templates ausgeführt. Er übergibt das Seitenobjekt, das Layoutobjekt und eine Eigenreferenz als Argument und erwartet keinen Rückgabewert. Hinzugefügt in Version 3.1.0.

// config.php $GLOBALS['TL_HOOKS']['getPageLayout'][] = array('MyClass', 'mygetPageLayout');

// MyClass.php public function mygetPageLayout(\PageModel $objPage, \LayoutModel $objLayout, \PageRegular $objPageRegular) { // Beliebiger Code } getSearchablePages

Der "getSearchablePages"-Hook wird beim Aufbau des Suchindex ausgeführt. Er übergibt das URL-Array und die ID der Wurzelseite als Argument und erwartet ein Array mit absoluten URLs (!) als Rückgabewert. Hinzugefügt in Version 2.2.0.

// config.php $GLOBALS['TL_HOOKS']['getSearchablePages'][] = array('MyClass', 'myGetSearchablePages');

// MyClass.php public function myGetSearchablePages($arrPages, $intRoot) { return array_merge($arrPages, array('Additional pages')); } initializeSystem

Der "initializeSystem"-Hook wird bei der Initialisierung des Systems ausgeführt. Hinzugefügt in Version 3.1.RC1.

// config.php $GLOBALS['TL_HOOKS']['initializeSystem'][] = array('MyClass', 'myInitializeSystem');

Contao-Hooks 104 Handbuch für Contao 3.4

// MyClass.php public function myInitializeSystem() { // Beliebiger Code } importUser

Der "importUser"-Hook wird beim Antreffen eines unbekannten Benutzernamens ausgeführt. Er übergibt den Benutzernamen, das Passwort und den Tabellennamen als Argument und erwartet einen booleschen Rückgabewert. Hinzugefügt in Version 2.7.RC1.

// config.php $GLOBALS['TL_HOOKS']['importUser'][] = array('MyClass', 'myImportUser');

// MyClass.php public function myImportUser($strUsername, $strPassword, $strTable) { if ($strTable == 'tl_member') { // Benutzer von einem LDAP-Server importieren if ($this->importUserFromLdap($strUsername, $strPassword)) { return true; } }

return false; } isVisibleElement

Der "isVisibleElement"-Hook wird beim Überprüfen, ob ein Element im Frontend sichtbar sein soll oder nicht, ausgeführt. Ein "Element" bedeutet an dieser Stelle entweder ein Artikel, ein Frontend-Modul oder ein Inhaltselement. Im Gegensatz zu den drei anderen Hooks "getArticle", "getFrontendModule" und "getContentElement" kann hier das Generieren des gesamten Markups verhindert werden. Der Hook übergibt das Model des Elements sowie den aktuellen Sichtbarkeitsstatus als Argumente und erwartet den neuen Sichtbarkeitsstatus als Rückgabewert. Hinzugefügt in Version 3.2.RC1.

// config.php $GLOBALS['TL_HOOKS']['isVisibleElement'][] = array('MyClass', 'myIsVisibleElement');

// MyClass.php public function myIsVisibleElement($objElement, $blnIsVisible) { if ($objElement instanceof ContentElement) { // Prüfen ob das Inhaltselement angezeigt werden darf if ($this->myElementCanBeShownInFrontend($objElement)) { return true; } }

// Andernfalls verändern wir den Sichtbarkeitsstatus nicht return $blnIsVisible; } listComments

Der "listComments"-Hook wird bei der Darstellung von Kommentaren im Backend ausgeführt. Er übergibt den aktuellen Datensatz als Argument und erwartet einen String als Rückgabewert. Hinzugefügt in Version 2.8.RC2.

Contao-Hooks 105 Handbuch für Contao 3.4

// config.php $GLOBALS['TL_HOOKS']['listComments'][] = array('MyClass', 'myListComments');

// MyClass.php public function myListComments($arrRow) { return '' . $arrRow['title'] . ''; } loadFormField

Der "loadFormField"-Hook wird beim Laden eines Formularfeldes ausgeführt. Er übergibt das Widget-Objekt, die ID und die Metadaten des Formulars als Argument und erwartet ein Widget-Objekt als Rückgabewert. Hinzugefügt in Version 2.5.0.

// config.php $GLOBALS['TL_HOOKS']['loadFormField'][] = array('MyClass', 'myLoadFormField');

// MyClass.php public function myLoadFormField(Widget $objWidget, $strForm, $arrForm) { $objWidget->class = 'myclass'; return $objWidget; } loadDataContainer

Der "loadDataContainer"-Hook wird beim Laden eines Data Containers ausgeführt. Er übergibt den Namen der DCA-Datei als Argument und erwartet keinen Rückgabewert. Hinzugefügt in Version 2.8.2.

// config.php $GLOBALS['TL_HOOKS']['loadDataContainer'][] = array('MyClass', 'myLoadDataContainer');

// MyClass.php public function myLoadDataContainer($strName) { // Beliebiger Code } loadLanguageFile

Der "loadLanguageFile"-Hook wird beim Laden einer Sprachdatei ausgeführt. Er übergibt den Namen der Sprachdatei und die Sprache als Argument und erwartet keinen Rückgabewert. Hinzugefügt in Version 2.8.RC1.

// config.php $GLOBALS['TL_HOOKS']['loadLanguageFile'][] = array('MyClass', 'myLoadLanguageFile');

// MyClass.php public function myLoadLanguageFile($strName, $strLanguage) { // Beliebiger Code } outputBackendTemplate

Der "outputBackendTemplate"-Hook wird bei der Ausgabe eines Backend-Templates auf dem Bildschirm ausgeführt. Er übergibt Inhalt und Name des Templates als Argument und erwartet den geänderten Template-Inhalt als Rückgabewert. Hinzugefügt in Version 2.6.0.

Contao-Hooks 106 Handbuch für Contao 3.4

// config.php $GLOBALS['TL_HOOKS']['outputBackendTemplate'][] = array('MyClass', 'myOutputBackendTemplate');

// MyClass.php public function myOutputBackendTemplate($strContent, $strTemplate) { if ($strTemplate == 'be_main') { // Ausgabe modifizieren }

return $strContent; } outputFrontendTemplate

Der "outputFrontendTemplate"-Hook wird bei der Ausgabe eines Frontend-Templates auf dem Bildschirm ausgeführt. Er übergibt Inhalt und Name des Templates als Argument und erwartet den geänderten Template-Inhalt als Rückgabewert. Hinzugefügt in Version 2.6.0.

// config.php $GLOBALS['TL_HOOKS']['outputFrontendTemplate'][] = array('MyClass', 'myOutputFrontendTemplate');

// MyClass.php public function myOutputFrontendTemplate($strContent, $strTemplate) { if ($strTemplate == 'fe_page') { // Ausgabe modifizieren }

return $strContent; } parseBackendTemplate

Der "parseBackendTemplate"-Hook wird bei der Aufbereitung eines Backend-Templates ausgeführt. Er übergibt Inhalt und Name des Templates als Argument und erwartet den geänderten Template-Inhalt als Rückgabewert. Hinzugefügt in Version 2.6.0.

// config.php $GLOBALS['TL_HOOKS']['parseBackendTemplate'][] = array('MyClass', 'myParseBackendTemplate');

// MyClass.php public function myParseBackendTemplate($strContent, $strTemplate) { if ($strTemplate == 'be_main') { // Ausgabe modifizieren }

return $strContent; } parseFrontendTemplate

Der "parseFrontendTemplate"-Hook wird bei der Aufbereitung eines Frontend-Templates ausgeführt. Er übergibt Inhalt und Name des Templates als Argument und erwartet den geänderten Template-Inhalt als Rückgabewert. Hinzugefügt in Version 2.6.0.

Contao-Hooks 107 Handbuch für Contao 3.4

// config.php $GLOBALS['TL_HOOKS']['parseFrontendTemplate'][] = array('MyClass', 'myParseFrontendTemplate');

// MyClass.php public function myParseFrontendTemplate($strContent, $strTemplate) { if ($strTemplate == 'ce_text') { // Ausgabe modifizieren }

return $strContent; } parseTemplate

Der "parseTemplate"-Hook wird vor der Verarbeitung eines Templates ausgeführt. Er übergibt die Template -Instanz als Argument (kann FrontendTemplate und BackendTemplate sein) und erwartet keinen Rückgabewert. Hinzugefügt in Version 2.10.0.

// config.php $GLOBALS['TL_HOOKS']['parseTemplate'][] = array('MyClass', 'myParseTemplate');

// MyClass.php public function myParseTemplate($objTemplate) { if ($objTemplate->getName() == 'mod_html') { // Objekt modifizieren } } postDownload

Der "postDownload"-Hook wird nach dem Herunterladen einer Datei mit Hilfe des Download(s)-Elements ausgeführt. Er übergibt den Dateinamen als Argument und erwartet keinen Rückgabewert. Hinzugefügt in Version 2.4.6.

// config.php $GLOBALS['TL_HOOKS']['postDownload'][] = array('MyClass', 'myPostDownload');

// MyClass.php public function myPostDownload($strFile) { // Beliebiger Code } postLogin

Der "postLogin"-Hook wird nach der Anmeldung eines Frontend-Mitglieds oder Backend-Benutzers ausgeführt. Er übergibt das Benutzerobjekt als Argument und erwartet keinen Rückgabewert.

// config.php $GLOBALS['TL_HOOKS']['postLogin'][] = array('MyClass', 'myPostLogin');

// MyClass.php public function myPostLogin(User $objUser) { // Beliebiger Code }

Contao-Hooks 108 Handbuch für Contao 3.4

postLogout

Der "postLogout"-Hook wird nach der Abmeldung eines Frontend-Mitglieds oder Backend-Benutzers ausgeführt. Er übergibt das Benutzerobjekt als Argument und erwartet keinen Rückgabewert.

// config.php $GLOBALS['TL_HOOKS']['postLogout'][] = array('MyClass', 'myPostLogout');

// MyClass.php public function myPostLogout(User $objUser) { // Beliebiger Code } postUpload

Der "postUpload"-Hook wird nach dem Hochladen einer oder mehrerer Dateien in der Contao-Dateiverwaltung ausgeführt. Er übergibt ein Array mit Dateinamen als Argument und erwartet keinen Rückgabewert. Hinzugefügt in Version 2.6.4.

// config.php $GLOBALS['TL_HOOKS']['postUpload'][] = array('MyClass', 'myPostUpload');

// MyClass.php public function myPostUpload($arrFiles) { // Beliebiger Code } prepareFormData

Der prepareFormData -Hook wird beim Absenden eines Formulars ausgeführt. Er übergibt die Formulardaten, die Feldbezeichnungen und das Formular-Objekt. Damit lassen sich die Daten ändern oder erweitern, bevor Aktionen wie z.B. E-Mail Versand oder in der Datenbank speichern ausgeführt wird. Hinzugefügt in Version 3.0.0.

// config.php $GLOBALS['TL_HOOKS']['prepareFormData'][] = array('MyClass', 'myPrepareFormData');

// MyClass.php public function myPrepareFormData(&$arrSubmitted, $arrLabels, $objForm) { // Beliebiger Code } printArticleAsPdf

Der "printArticleAsPdf"-Hook wird bei der Ausgabe eines Artikels im PDF-Format ausgeführt. Er übergibt den Artikeltext und das Artikelobjekt als Argument und erwartet keinen Rückgabewert. Hinzugefügt in Version 2.8.RC1.

// config.php $GLOBALS['TL_HOOKS']['printArticleAsPdf'][] = array('MyClass', 'myPrintArticleAsPdf');

// MyClass.php public function myPrintArticleAsPdf($strArticle, Database_Result $objArticle) { // Beliebiger Code exit; }

Contao-Hooks 109 Handbuch für Contao 3.4

processFormData

Der "processFormData"-Hook wird nach dem Abschicken eines Formulars ausgeführt. Er übergibt das Datenarray, das Data Container Array und das Dateiarray als Argument und erwartet keinen Rückgabewert. Hinzugefügt in Version 2.4.4.

// config.php $GLOBALS['TL_HOOKS']['processFormData'][] = array('MyClass', 'myProcessFormData');

// MyClass.php public function myProcessFormData($arrPost, $arrForm, $arrFiles) { // Beliebiger Code } removeOldFeeds

Der "removeOldFeeds"-Hook wird beim Entfernen alter XML-Dateien aus dem Contao-Verzeichnis ausgeführt. Er übergibt nichts als Argument und erwartet ein Array mit zu erhaltenden Dateien als Rückgabewert. Hinzugefügt in Version 2.5.8.

// config.php $GLOBALS['TL_HOOKS']['removeOldFeeds'][] = array('MyClass', 'myRemoveOldFeeds');

// MyClass.php public function myRemoveOldFeeds() { return array('custom.xml'); } removeRecipient

Der "removeRecipient"-Hook wird bei der Kündigung eines Newsletter-Abonnements (Unsubscribe) ausgeführt. Er übergibt die E-Mail-Adresse und die IDs der Verteiler als Argument und erwartet keinen Rückgabewert. Hinzugefügt in Version 2.8.RC1.

// config.php $GLOBALS['TL_HOOKS']['removeRecipient'][] = array('MyClass', 'myRemoveRecipient');

// MyClass.php public function myRemoveRecipient($strEmail, $arrChannels) { // Beliebiger Code } replaceInsertTags

Der "replaceInsertTags"-Hook wird beim Antreffen eines unbekannten Insert-Tags ausgeführt. Er übergibt das Insert-Tag als Argument und erwartet die Ersetzung oder false als Rückgabewert. Hinzugefügt in Version 2.6.0.

// config.php $GLOBALS['TL_HOOKS']['replaceInsertTags'][] = array('MyClass', 'myReplaceInsertTags');

// MyClass.php public function myReplaceInsertTags($strTag) { if ($strTag == 'mytag') { return 'mytag replacement'; }

Contao-Hooks 110 Handbuch für Contao 3.4

return false; } reviseTable

Der "reviseTable"-Hook wird beim Bereinigen verwaister Datensätze einer Tabelle ausgeführt. Er übergibt den Namen der Tabelle, die IDs aller neu angelegten Datensätze, den Namen der Elterntabelle und die Namen aller Kindtabellen als Argument und erwartet einen booleschen Rückgabewert. Geben Sie true zurück, um die Seite neu zu laden. Hinzugefügt in Version 2.6.4.

// config.php $GLOBALS['TL_HOOKS']['reviseTable'][] = array('MyClass', 'myReviseTable');

// MyClass.php public function myReviseTable($table, $new_records, $parent_table, $child_tables) { // Beliebiger Code } setNewPassword

Der "setNewPassword"-Hook wird nach dem Abspeichern eines neuen Passworts ausgeführt. Er übergibt das Benutzerobjekt und das verschlüsselte Passwort als Argument und erwartet keinen Rückgabewert. Hinzugefügt in Version 2.2.3.

// config.php $GLOBALS['TL_HOOKS']['setNewPassword'][] = array('MyClass', 'mySetNewPassword');

// MyClass.php public function mySetNewPassword($objUser, $strPassword) { // Beliebiger Code } validateFormField

Der "validateFormField"-Hook wird beim Abschicken eines Formularfeldes ausgeführt. Er übergibt das Widget-Objekt und die ID des Formulars als Argument und erwartet ein Widget-Objekt als Rückgabewert. Hinzugefügt in Version 2.5.0.

// config.php $GLOBALS['TL_HOOKS']['validateFormField'][] = array('MyClass', 'myValidateFormField');

// MyClass.php public function myValidateFormField(Widget $objWidget, $intId) { if ($objWidget instanceof FormPassword) { // Beliebiger Code }

return $objWidget; }

Contao-Hooks 111 Handbuch für Contao 3.4

Das Extension Repository

Um eine Erweiterung im Extension Repository zu veröffentlichen, benötigen Sie ein Benutzerkonto. Nach der Anmeldung können Sie über die beiden Links "Erweiterungen verwalten" und "Übersetzungen verwalten" im Extension Repository auf das Entwickler-Interface zugreifen.

Das Extension Repository 112 Handbuch für Contao 3.4

Eine Erweiterung anlegen

Um eine neue Erweiterung anzulegen, folgen Sie dem Link "Erweiterungen verwalten" und klicken Sie auf die Schaltfläche "Erweiterung hinzufügen". Sie gelangen nun zu einem Formular, in das Sie die Daten der Erweiterung eingeben können. Der Kasten oberhalb des Formulars enthält wichtige Hinweise zur Namensgebung, die Sie unbedingt berücksichtigen sollten.

Folgende Kategorien sind momentan verfügbar:

Kategorie Beschreibung

Anwendung Die Erweiterung ist eine eigenständige Anwendung.

Plugin Die Erweiterung ist eine PHP- oder JavaScript-Library.

Theme Die Erweiterung ist ein Theme für das Backend.

Hilfsprogramm Die Erweiterung ist ein Hilfsprogramm für das Backend.

Widget Die Erweiterung ist ein Eingabefeld (Widget) für Formulare.

Übersetzung Die Erweiterung ist eine Übersetzung für eine Version von Contao.

Bundle Eine Gruppe von Erweiterungen, die gleichzeitig installiert werden kann.

Andere Die Erweiterung passt in keine der genannten Kategorien.

Eine Erweiterung anlegen 113 Handbuch für Contao 3.4

Eine Freigabe hinzufügen

Nachdem Sie die Erweiterung angelegt haben, können Sie ein erstes Release hinzufügen, das im Extension Repository als "Freigabe" bezeichnet wird. Jede weitere Version der Erweiterung wird später als eigene Freigabe gespeichert. Wechseln Sie mit Hilfe des entsprechenden Navigationssymbols in die Freigabenverwaltung und klicken Sie auf die Schaltfläche "Freigabe hinzufügen".

Versionsnummern im Extension Repository bestehen immer aus drei Zahlenblöcken, die die Major-, Minor- und Maintenance-Version kennzeichnen (z.B. "1.0.0"), sowie einer Angabe zum Entwicklungsstatus (z.B. "beta1"):

Status Beschreibung

alpha1 - alpha3 Es handelt sich um eine Alpha-Version.

beta1 - beta3 Es handelt sich um eine Beta-Version.

rc1 - rc3 Es handelt sich um ein Release Candidate.

stable Es handelt sich um ein stabiles Release für den produktiven Einsatz.

Eine Freigabe hinzufügen 114 Handbuch für Contao 3.4

Die Dateien hochladen

Als Nächstes müssen Sie dem neuen Release Dateien hinzufügen. Wechseln Sie dazu in die Dateiverwaltung und klicken Sie dort auf die Schaltfläche "Dateien hinzufügen/aktualisieren". Sie können nun einzelne Dateien oder ganze Zip-Archive auf den Server übertragen. Achten Sie dabei darauf, das richtige Zielverzeichnis auszuwählen, damit die Pfade nach dem Upload stimmen.

Die Dateien hochladen 115 Handbuch für Contao 3.4

Dateien aus einem GitHub-Repository hinzufügen

Die Dateien können auch aus einem GitHub-Repository importiert werden. Voraussetzung dafür ist, dass das Release mit einem Tag markiert wurde und dieses in das zentrale GitHub-Repository gepusht wurde.

In den Einstellungen muss die HTTPS-URL des GitHub-Repository hinterlegt werden.

Wird ein Wurzelverzeichnis festgelegt, ignoriert das System Dateien und Verzeichnisse außerhalb dieses Ordners beim Import.

Wenn Sie ein Tag auswählen, werden dessen Dateien automatisch heruntergeladen und stehen danach wie bei einem manuellen Upload zur Verfügung.

Dateien aus einem GitHub-Repository hinzufügen 116 Handbuch für Contao 3.4

Eine Übersetzung hinzufügen

Bevor Sie eine Erweiterung veröffentlichen können, muss mindestens eine Übersetzung angelegt worden sein. Wechseln Sie in die Sprachverwaltung und klicken Sie dort auf die Schaltfläche "Sprache hinzufügen". Es empfiehlt sich, immer auch eine englische Übersetzung anzulegen, da die Benutzer im Backend grundsätzlich nur die Erweiterungen sehen, die in ihrer jeweiligen Sprache oder in Englisch verfügbar sind.

Fertige Übersetzungen können Sie mit einem Klick auf das entsprechende Navigationssymbol veröffentlichen.

Eine Übersetzung hinzufügen 117 Handbuch für Contao 3.4

Abhängigkeiten speichern

Unter Umständen nutzen Sie in einer Ihrer Erweiterungen die Funktionalität einer anderen wie z.B. Cronjobs. Für den Betrieb Ihrer Erweiterung ist es also zwingend notwendig, dass auch die Cron-Erweiterung installiert ist, was im allgemeinen Sprachgebrauch als "Abhängigkeit" bezeichnet wird. Diese Abhängigkeiten können im Extension Repository gespeichert werden, so dass bei der Installation einer Erweiterung automatisch alle für deren Betrieb benötigten Module ebenfalls installiert werden.

Wählen Sie als Erstes die Erweiterung aus, die Sie als Abhängigkeit hinzufügen möchten, und bestätigen Sie Ihre Auswahl mit "Weiter". Im nächsten Schritt können Sie die Versionen festlegen, die für den reibungslosen Betrieb mindestens und höchstens erforderlich sind.

Abhängigkeiten speichern 118 Handbuch für Contao 3.4

Die Erweiterung veröffentlichen

Nachdem Sie mindestens eine Freigabe angelegt und mit Dateien befüllt sowie mindestens eine Übersetzung veröffentlicht und ggf. Abhängigkeiten hinterlegt haben, können Sie die Erweiterung mit Hilfe des entsprechenden Navigationssymbols veröffentlichen. Beachten Sie dabei, dass Sie eine veröffentlichte Erweiterung nicht wieder entfernen können. Um zu prüfen, ob alles korrekt funktioniert, melden Sie sich im Backend an und führen Sie eine Testinstallation in der Erweiterungsverwaltung durch.

Die Erweiterung veröffentlichen 119 Handbuch für Contao 3.4

Contao-Entwicklungsprozess

Die Contao-Entwicklungsseite, die Basis der stetigen Weiterentwicklung von Contao, ist unter github.com/contao erreichbar. Sie enthält z.B. ein Journal der bisherigen Änderungen und der zukünftigen Features (Milestones) sowie ein Ticketsystem, um Fehler zu melden oder neue Funktionen vorzuschlagen. Sie unterstützt auch das Durchsuchen des Contao Code-Repository, in dem alle Code-Änderungen nachvollzogen und chronologisch zurückverfolgt werden können.

Contao-Entwicklungsprozess 120 Handbuch für Contao 3.4

Tickets erstellen

Beachten Sie zunächst, dass Sie angemeldet sein müssen, um neue Tickets zu erstellen. Die Registrierung auf GitHub ist kostenlos. Melden Sie sich danach an und klicken Sie in der Hauptnavigation auf "New Issue".

Beschreiben Sie etwaige Probleme stets ausführlich und geben Sie Hinweise, wie das Problem in der Onlinedemo oder in unserer Entwicklungsumgebung reproduziert werden kann. Tritt ein Problem nur in Ihrer Installation aber nicht in der Onlinedemo auf, gehört die Anfrage ins Forum.

Tickets erstellen 121