Contao Modul erstellen – Initialisierung

Contao (ehemals Typolight) ist ein freies CMS von Leo Feyer und gibt es bereits seit 2004. Ich werde mich in nächster Zeit umfassender mit diesem System beschäftigen und werde meine Erfahrungen hier niederschreiben. Die Installation des Systems erfolgt über einen Installationsassistenten. Auf der Contao-Webseite ist das ausführlich beschrieben
Ich möchte mich hier mit der Erstellung eines Contao Moduls befassen.

Nach der Installation spielt sich alles im Ordner /system des Contao-Wurzelverzeichnisses ab:

Das Contao Systemverzeichnis

Wenn wir hier den Ordner /system/modules aufklappen, erhalten wir eine Liste der bereits installierten Module. Die Module werden in alphabetisch Reihenfolge initalisiert. Das ist wichtig zu wissen, wenn man Teile eines bestehenden Modul überschreiben möchte. Ich möchte an dieser Stelle etwas tiefer in die Materie gehen.

Die Initialisierung der Module erfolgt in der Datei system/libraries/Config.php. Aber wie und wo wird diese Klasse verwendet?

Ausgehend von der index.php im Root-Verzeichnis, die den Startpunkt des CMS repräsentiert, wird dort in den ersten Zeilen die Datei /system/initialize.php eingebunden. Das sieht dort so aus:

require('system/initialize.php');

In der initialize.php selbst, wird die Konfiguration instanziert (Singelton):

$objConfig = Config::getInstance();

Zum besseren Verständnis ein Auszug aus dem Konstruktor der Klasse Config (Die Zeilennummern entsprechen nicht den Zeilennummern des Quellcodes und dienen hier nur zu Referenzierung):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class Config
{
  /**
 * Load all configuration files
 */
 protected function __construct()
 {
   ...
   // Get module configuration files
   foreach ($this->getActiveModules() as $strModule)
   {
     $strFile = sprintf('%s/system/modules/%s/config/config.php', TL_ROOT, $strModule);
     @include($strFile);
   }
   ...
   /**
    * Return all active modules (starting with "backend" and "frontend") as array
    * @param boolean
    * @return array
    */
    public function getActiveModules($blnNoCache=false)
    {
       ...
       $arrAllModules = scan(TL_ROOT . '/system/modules');
       ...
       // Filterung, Speicherung der Module in Klassenvariable (Class-Caching)
       ...
       return $this->arrCache['activeModules'];
    }
}

Wir können in Zeile 10ff erkennen, dass in der foreach Schleife jede config.php eines Moduls eingebunden wird. Die Funktion scan ist in der Datei /system/functions.php definiert und ist quasi ein Wrapper für die PHP Funktion scandir. Da dort keine Parameter übergeben werden liefert scandir standardmäßig Verzeichnisse und Dateien alphabetisch in aufsteigender Reihenfolge zurück. Soweit so gut. Im nächsten Artikel beschäftige ich mich mit der Ordnerstrukter innerhalb der Module.

Ein Gedanke zu “Contao Modul erstellen – Initialisierung

  1. Pingback: Contao Module erstellen – Backend | Tobias Seckinger

Kommentar verfassen