Multidomains mit Yellow CMS

Installieren Sie bei Yellow den Inhalt mehrerer Domains bzw. Themes und schalten dann bequem hin und her

Inhalt

Statisches Master-Image für die Verteilung

Yellow CMS kann als statisches Image auf dem lokalen PC mit mehreren Content-Bereichen für verschiedene Ziel-Domains angelegt und konfiguriert werden. Für die spätere Verteilung via FTP auf den Webserver der Domain oder in das Zielverzeichnis des Webspace, wird das Image vorher entsprechend lokal konfiguriert. Nach der Verteilung und durch den Aufruf eines Besuchers, steuert Yellow CMS den korrekten, für diese Domain gültigen Content dem Leser zu.

Von dieser Technik profitieren besonders Admins, die viele große Domains betreiben und Gefahr laufen, sich technisch zu verzetteln. Das lokale Image wird passend für die Ziel-Domain konfiguriert und auf den Server (Domain) verteilt.

Yellow und Multidomains

Die technische Struktur von Yellow ist bedingt dazu geeignet, den Inhalt mehrerer Webseiten zeitgleich zu verwalten. Durch Anpassung der Programme und INI-Files ist es zunächst leicht möglich, den Content zwischen verschiedenen Webseiten einfach umzuschalten - das ist noch recht einfach. Bedeutend schwieriger ist es jedoch, wenn die unterschiedlichen Domains auch mit unterschiedlichen Templates betrieben werden sollen, denn die Umschaltung des Templates in Yellow ist ein Problem (für Single-Domains stellt sich das Problem natürlich nicht). Bedingt wird dies dadurch, das Templates und Stylevorgaben getrennt wurden (was wenig Sinn macht) und die Synchronisierung durch eine Umschaltung auf einen anderen Content schwierig wird.

Der Betrieb einer Yellow-Installation mit verschiedenem Content ist möglich, jedoch steht dann immer nur ein gemeinsames Theme für alle Webseiten gleichermaßen zur Verfügung.

Für Umschaltung des Content system.ini erweitern

Yellow CMS bietet eine üppige Konfigurationseinstellung in Form der system.ini an, allerdings fehlt dor die Möglichkeit der Vorgabe eines Pfades für die Lage des Contents. Folglich wird im Yellow-Core eine feste Vorgabe verwendet die auf content zeigt. In Zeile 72 findet sich dazu die Programmanweisung:

073  $this->system->set("coreContentDirectory", "content/");

die das CMS dazu anweist, den Inhalt aus dem Verzeichnis content zu laden. Um dies flexibler zu gestalten, muss eine neue Variable in der system.ini angelegt werden, die CoreContentDirectory lautet und zuknüftig die Vorgabe erledigt. Dazu wird in der system.ini wie folgt:

025  CoreContentDirectory: content-cmsworkbench/

irgendwo bei Zeile 25 hinzugefügt. Damit der Yellow-Core diese neue Variable auch verarbeiten kann, muss das bisherige Statement auskommentiert werden und mit der neuen Anweisung ersetzt werden, etwa so:

073  // $this->system->set("coreContentDirectory", "content/");   ALT!
074  $this->system->set("coreContentDirectory", $this->system->get("coreContentDirectory")); // NEU!!!

Mit dieser kleinen Programmanpassung des Yellow CMS kann eine Master-Installation verschiedenen Content beherbergen. Je nachdem wohin dieses Image auf den Webserver kopiert wird (in welcher Domain es verwendet wird), kann der Admin über die Konfigurationen die korrekten Inhalte der jeweiligen Domain freischalten.

Dynamisches Master-Image im Internet

Mit dieser Variante soll die Master-Installation im Internet beschrieben werden, die in einem Verzeichnis des Webservers liegt und je nachdem welche Domain vom Leser angefordert wird den passenden Content umschaltet. Alle teilnehmenden Domains des Admins müssen dann natürlich auf genau dieses Verzeichnis im Webspace zeigen - logo!

Diese Variante richtet sich vor allem an Admins und Domainbesitzer, die viele Domains im Internet betreiben und den Wartungsaufwand drastisch reduzieren möchten und zudem auch technische Redundanzen abbauen wollen.

Anpassung der yellow.php

Das PHP-Script yellow.php liegt in der root der Webseite und ist das erste Script das bei Aufruf durch einen Leser startet. Im Script selbst befindet sich die folgende Startprozedur:

...
$yellow = new YellowCore();
$yellow->load();
exit($yellow->request());
...

Zunächst wird der YellowCore konstruiert und geladen, im Anschluss die Methode load() gerufen, welche die Basis-Konfiguration startet - dies wäre der ideale Ansatz, um Konfigurationen umzuschalten, daher wird diese Befehlskette wie folgt angepasst:

$yellow = new YellowCore();
if ($_SERVER['SERVER_NAME'] == 'chillville.de')   {$yellow->load('yellow-system_chillville.ini');}
if ($_SERVER['SERVER_NAME'] == 'cleaninggirl.de') {$yellow->load('yellow-system_cleaninggirl.ini');}
$yellow->request();

Zunächst ermittelt die Server-Variable $_SERVER['SERVER_NAME'] über welche Domain der Besucher einsteigt, im Beispiel oben kann er über die beiden Internetaddressen http://ChillVille.de oder http://CleaningGirl.de einsteigen. Das angepasste Coding ruft wie gewohnt die Methode load() auf, übergibt ihr allerdings einen Parameter, der festlegt, welche Konfiguration zu laden ist. Im wesentlichen handelt es sich um Duplikate der regulären yellow-system.ini die jedoch andere Einstellungen haben.

Anpassen des Yellow Core

Der Yellow CMS Core muss wie im Kapitel eingengs beschrieben angepasst werden und zudem muss die Signatur der Methode load()erweitert werden, etwa so:

...  ..
069  public function load($system_ini_file) {
070      //$this->system->load("system/extensions/yellow-system.ini"); // ALT
071      //$this->system->set("coreSystemFile", "yellow-system.ini");  // ALT
072
073      $this->system->load("system/extensions/".$system_ini_file);   // => NEU
074      $this->system->set("coreSystemFile", $system_ini_file);       // => NEU
075
076      //$this->system->set("coreContentDirectory", "content/");     // => ALT
077      $this->system->set("coreContentDirectory", $this->system->get("coreContentDirectory")); // => NEU
...  ...

Ab jetzt nimmt die Methode load($system_ini_file) den Dateinamen der vom Core zu ladenden Konfiguration in Zeile 69 entgegen und übergribt diese in Zeile 73 und 74, die bislang fix auf yellow-system.ini zeigten. Dies wird durch die angepasste yello.php im root-Verzeichnis ausgelöst.

In Zeile 76 und 77 erfolgt die Einstellung des Content-Verzeichnis, das je Domain unterschiedlich ist. Die Anpassung wurde bereits Eingangs zu diesem Artikel beschrieben. Dazu muss die neue System.ini Variable coreContentDirectory in der yellow-system.ini (und deren Kopien) zugefügt werden.

Konfigurationen (yellow-system_xxx.ini) erzeugen

Wenn alle Anpassungen erfolgt sind, kann die originale yellow-system.ini mehrfach mit neuem Namen dupliziert werden. Sinnvoll ist´, den Prefix yellow-system beizubahelten und ihm einen Suffix für die anzusteuerende Domain anzuhängen, beispielsweise so:

yellow-system_chillville.ini
yellow-system_cleaninggirl.ini

Die unterschiedlichen INI-Files können dann individuell für jeden Domainaufruf definiert werden.

Wichtiger Hinweis: dieses Verfahren funktioniert natürlich nur mit Domains die das selbe Verschlüsselungsprotokoll nutzen, das Mischen von http und https Domains ist nicht sinnvoll. Domains mit http sollten unter einer Installation laufen, sowie https Domains unter einer weiteren Installation laufen, um Sicherheitsprobleme zu vermeiden.

Fazit

Beide Verfahren funktionieren sehr gut und sind auch problemlos im Einsatz, jedoch... Es muss bedacht werden, wenn ein Programmfehler existiert, dann wirkt dieser auf alle teilnehmenden Domains ebenfalls (ggf. brechen alle Domains ab). Ebenfalls nachteilig ist, das es keine Umschaltung des Layouts gibt, zwar können unterschiedliche CSS je Domain umgeschaltet werden, jedoch ist das Layout der verschiedenen Domains identisch (was aber kein Nachteil sein muss).

Positiv beim letzteren Verfahren ist, das auf dem Webserver nur noch zwei Plattenverzeichnisse nötig sind, eines für HTTP-Webseiten und ein weiteres nimmt die Installation für alle HTTPS-Webseiten auf. Damit ist der Webserver sehr aufgeräumt und die Administration beschränkt sich auf die Verwaltung der Beiträge und des Content. Zudem führt das Templating und gestalten neuer Themes zu einem strengeren und einheitlichen Schema, das für alle Domains gleichermaßen funktioniert.


Oliver Lohse
2023-01-01
Example
post
10