Unsere Ideen für Ihr Projekt

Contao 4.0 - Installation und Erweiterungen

Contao 4 gibt es jetzt bereits einige Tage. Um genau zu sein seit dem 9. Juni diesen Jahres. Die Theorie, die wir hierzu auf der Contao-Konferenz gehört haben ist ja das Eine. Die Praxis aber ist etwas ganz anderes.

So stürzten wir uns gleich mit einer Beispielinstallation in eine erste Umsetzung. Die Herausforderung bestand in der Installation der deutschen Contao-Version mit einigen Erweiterungen.

Ziel war es, uns mit Contao 4 "anzufreunden" und die neuen Strukturen kennen zu lernen. Es sollte aber auch eine neue "trilobit Contao 4 Grundinstallation" daraus entstehen. Dieses vorkonfigurierte Contao dient als Basis für die meisten Kundenprojekte bei uns. So vermeiden wir sich wiederholenden Aufwand und es bleibt nur noch 5 Minuten für:

  1. Entwicklungs-Server und -Domain einrichten
  2. Per git unsere Contao-Grundinstallation auschecken
  3. Datenbank anlegen und Dump einspielen
  4. Webseite aufrufen
  5. Mit der eigentlichen Arbeit beginnen

Die Installation von Contao 4

Wen die Console nicht abschreckt, der kann Contao schnell und einfach installieren. Das passende Codeschnipsel gibt es direkt auf der Contao-Homepage. Ergänzende Informationen gibt es hier.

Um Contao zu installieren, gibt es mehrere Wege: Manuell das git-Repository clonen und danach über den Composer installieren oder ein neues Projekt direkt über den Composer initialisieren.

Manuell

git clone -b develop https://github.com/contao/standard-edition.git mein-neues-contao4-projekt
cd mein-neues-contao4-projekt
curl -sS https://getcomposer.org/installer | php
php composer.phar install

Mit create-project

curl -sS https://getcomposer.org/installer | php
php composer.phar create-project contao/standard-edition mein-neues-contao4-projekt 4.0.0

Danach werden alle benötigten Dateien heruntergeladen und installiert. Bei diesem Prozess werden auch die Datenbank-Daten sowie die Mail-Konfiguration abgefragt.

Sprache(n)

Contao 4 ist jetzt installiert, die Systemsprache ist jedoch englisch. Um dies "einzudeutschen" wird noch einen Transifex-Account benötigt, um die deutschen Sprachpakete herunterzuladen und zu installieren.

for i in $(ls -d vendor/contao/*-bundle); do \
  cd $i; \
  tx pull -l de; \
  cd -; \
done;

Weiter geht es ganz "normal": Install-Tool aufrufen und die noch offenen Punkte abarbeiten: Tabellen anlegen, Admin-Benutzer anlegen.

Das Contao 4-Backend weist (fast) keinen Unterschied zu anderen aktuellen Contao-Versionen auf.

Arbeiten mit Contao 4

Sind im Contao-Backend die ersten Einstellungen vorgenommen, die Seitenstruktur angelegt und auch Themes und Module konfiguriert, kommt bald der Wunsch auf, noch etwas mehr zu machen. An dieser Stelle würde man jetzt über die Erweiterungsverwaltung oder den Composer im Backend die gewünschten Erweiterungen (suchen und) installieren. Dieser Weg steht in Contao 4 leider noch nicht zur Verfügung.

Um Erweiterungen in das System zu bringen stehen uns jetzt drei verschiedene Möglichkeiten offen:

1. Der "alte" Weg

Hierzu wird im Ordner system/modules ein Unterordner für jedes gewünschte Modul angelegt. In unserem Beispiel haben wir die beliebte Google-Maps Erweiterung von Christian de la Haye in Contao 4 eingebunden.

Als erstes laden wird die Erweiterung "dlh_googlemaps" und "dlh_geocode" von GitHub herunter:

Danach werden die beiden Erweiterungen (wie gewohnt) in den Ordner  ./system/modules entpackt.

Als nächstes müssen die beiden Erweiterungen unter ./app/AppKernel.php dem System bekannt machen.

public function registerBundles()
{
    $bundles = [
        ...
        // other
        new Contao\CoreBundle\HttpKernel\Bundle\ContaoModuleBundle(('dlh_geocode'), $this->getRootDir()),
        new Contao\CoreBundle\HttpKernel\Bundle\ContaoModuleBundle(('dlh_googlemaps'), $this->getRootDir()),
    ];
    ...
    return $bundles;
}

Jetzt nur noch einen Symlink anlegen von ./system/modules/dlh_googlemaps/assets nach ./web/system/modules/dlh_googlemaps/assets. Damit kann im Backend das Erweiterungs-Icon angezeigt werden und die zugehörigen CSS-Dateien für Back- und Frontend können verwendet werden. Wir haben diese beiden Erweiterungen (sowie ein paar Weitere) bei Contao 4-Kundenprojekten im Einsatz - bisher problemlos!

Natürlich war danach gleich auch unser Interesse geweckt, unsere eigenen Erweiterungen für Contao 4 fit zu machen. Wir wollten aber nicht alten Wein einfach nur in neue Schläuche füllen, sonder haben uns für einen Zwischenschritt  entschieden.

2. Der "neue Zwischen-" Weg

Bei dieser Umsetzung muss die Erweiterung in die neue Struktur gebracht werden. Diese ist einleitend hier beschrieben. Wir haben bei der Umstellung das Rad auch nicht neu erfunden, sondern haben von der Einbindung des Calendar-Bundles gelernt. Ist die neue Struktur angelegt, kann die Erweiterung aus der alten Struktur in die neue kopiert werden. Bei diesem Schritt kann man sich überlegen, ob man den Code nicht auch gleich überarbeitet.

Als nächstes müssen die Erweiterungen unter ./app/AppKernel.php dem System bekannt machen.

public function registerBundles()
{
    $bundles = [
        ...
        // Trilobit
        new Trilobit\AddonsBundle\TrilobitAddonsBundle(),
        new Trilobit\SocialmedialinksBundle\TrilobitSocialmedialinksBundle(),
        new Trilobit\TaxonomyBundle\TrilobitTaxonomyBundle(),
        new Trilobit\TilesBundle\TrilobitTilesBundle(),
    ];
    ...
    return $bundles;
}

Nachdem das neue Bundle jetzt registriert ist, muss das ganze noch dem Autoloader bekannt gemacht werden. Die folgenden Zeilen werden in der Datei ./vendor/composer/autoload_psr4.php ergänzt. Diese Arbeit wird über den Composer realisiert. Damit dieser weiß, welche Erweiterungen dem Projekt hinzugefügt werden sollen, müssen die neuen Bundles auch dem Composer bekannt gemacht werden. Hierzu wird die Datei ./composer.json die notwendige Abhängigkeit hinterlegt. Wir haben lokale Repositories, über die wir aktuell unsere Erweiterungen für Contao installieren.

{
    ...
    "require": {
        ...
        "trilobit/tiles-bundle": "dev-master",
        "trilobit/taxonomy-bundle": "dev-master",
        "trilobit/addons-bundle": "dev-master",
        "trilobit/socialmedialinks-bundle": "dev-master"
    },
    "repositories": [
        ...
        {
            "type": "vcs",
            "url": "/development/bundles/"
        }
    ],
}

Über den folgenden Befehl werden die neuen Bundles installiert und die Autoload-Datei neu geschrieben.

/php composer.phar install

Danach ist die Datei ./vendor/composer/autoload_psr4.php um die folgenden Zeilen ergänzt:

return array(
    ...
    // Trilobit
    'Trilobit\\AddonsBundle\\' => array($vendorDir . '/trilobit/addons-bundle/src'),
    'Trilobit\\SocialmedialinksBundle\\' => array($vendorDir . '/trilobit/socialmedialinks-bundle/src'),
    'Trilobit\\TaxonomyBundle\\' => array($vendorDir . '/trilobit/taxonomy-bundle/src'),
    'Trilobit\\TilesBundle\\' => array($vendorDir . '/trilobit/tiles-bundle/src'),
);

Die Ressourcen der Erweiterung, die über das Web erreichbar sein müssen, liegen in dieser Struktur im Ordner public - zum Beispiel bei unserer Erweiterung Socialmedialinks unter ./vendor/trilobit/socialmedialinks-bundle/src/Resources/public. Die benötigten Sym-Links können von Contao selbst über die Systemwartung im Backend angelegt werden.

Wir haben bereits einen Teil unserer Erweiterungen für Contao 4 fit gemacht und im Einsatz. Bei Fragen hierzu oder Interesse melden Sie sich bitte bei uns (peter.adelmann@trilobit.de). Bisher laufen Sie bei uns problemlos:

3. Der "richtige" Weg - Erweiterungen für Contao im Symfony-Stil

Noch haben wir unsere Erweiterungen nicht komplett auf die neue Technik umgestellt. Aber wir haben dieses Ziel fest im Blick. Wichtig ist jetzt erst einmal, dass für Contao 4 schnell einige Erweiterungen zur Verfügung stehen und Contao 4 in den Produktiveinsatz kommt.

Probleme, über die wir gestolpert sind

Natürlich war die Einbindung alter Erweiterungen in das neue Contao nicht nur eitel Sonnenschein. Wir hatte auch das ein oder andere Problem. Zwei davon haben uns immer wieder ausgebremst:

  • der Cache
  • der Composer Autoloader

Beide Punkte sind aber sicher kein Thema mehr, sobald Installer mit einer GUI für Contao selbst sowie Erweiterungen zur Verfügung stehen.

Bis dahin haben wir uns damit beholfen, den Cache manuell zu löschen. Dazu haben wir die beiden Ordner ./app/cache/dev und ./app/cache/prod manuell geleert.

Update

In der Zwischenzeit ist Contao 4.0.2 erschienen. Diese Version bringt schon einen grafischen Installer mit, so dass die Installationsschritte wie oben beschrieben deutlich vereinfacht werden.

Auch wir von trilobit möchten dazu lernen. Nehmen Sie zu uns Kontakt auf und schildern Sie uns, wie Sie mit Contao 4 umgehen.