Wolf CMS zum MultiSite-/MultiDomain-CMS ausbauenExtend Wolf CMS to a multi-site/multi-domain CMS

wolfDieses Posting sollte eigentlich erst nach dem Posting “Die 10 besten Content Management System die die Eigenschaft <state of the art> verdienen” kommen. Nachdem ich jedoch mit Wolf CMS (dem Fork von Frog CMS) gearbeitet habe und so begeistert bin, habe ich mich entschlossen dieses Tutorial zum Ausbau zum Multidomain-System vorher zu veröffentlichen.

Für diejenigen, die noch auf der Suche nach einem CMS sind werde ich in nächster Zeit obiges Posting bereitstellen.

Was ist ein MultiSite-/MultiDomain CMS?

Das Problem für jeden Betreiber einer Website ist, dass es meistens nicht bei einer Domain bleibt, sondern neue hinzukommen. Dies geschieht zum einen weil Bereiche zu gross geworden sind und eine eigene Struktur (Domain) verdient haben, oder vielleicht für mehrere Kunden nicht mehrere CMS installiert werden sollen oder weil man sich einfach das mehrmalige Installieren/Updaten derselben Software ersparen möchte.

Hier haben CMS, die über diese Eigenschaft verfügen sehr grosse Vorteile und vereinfachen einem das Leben doch sehr. Drupal zum Beispiel besitzt diese Fähigkeit, die ausserdem sehr simplen in der Umsetzung ist. Man legt ein neues Verzeichnis für die Konfiguration an und startet die Installation für eben diese neue Domain erneut – Fertig.

Komplizierter sollte es nicht sein, dachte ich mir und da mir Drupal für mein Projekt zu “Community-Funktions-lastig” war habe ich dieses nette Prinzip auf Wolf CMS übertragen.

Wie baue ich diese Funktionalität in Wolf CMS ein und welche Dateien müssen verändert werden?

Insgesamt müssen 4 Dateien angepasst werden, deren Änderungen ich nachfolgend aufführe:

  1. /index.php
    folgende Zeile:
    [sourcecode language=”php”]
    $config_file = CMS_ROOT.’/config.php’;
    [/sourcecode]
    mit dieser ersetzen:
    [sourcecode language=”php”]
    $config_file = conf_path().’/config.php’;
    [/sourcecode]
  2. /admin/index.php
    folgende Zeile:
    [sourcecode language=”php”]
    $config_file = CMS_ROOT.’/config.php’;
    [/sourcecode]
    mit dieser ersetzen:
    [sourcecode language=”php”]
    $config_file = conf_path().’/config.php’;
    [/sourcecode]
  3. /install/index.php
    folgende Zeilen:
    [sourcecode language=”php”]
    define(‘CORE_ROOT’, dirname(__FILE__).’/../wolf’);
    $config_file = ‘../config.php’;
    [/sourcecode]
    mit diesen ersetzen:
    [sourcecode language=”php”]
    define(‘CMS_ROOT’, dirname(__FILE__).’/..’);
    define(‘CORE_ROOT’, CMS_ROOT.’/wolf’);
    require_once(CORE_ROOT.’/utils.php’);
    $config_file = conf_path().’/config.php’;
    [/sourcecode]
  4. /wolf/utils.php
    Hinzufügen der Funktion “conf_path()”:
    [sourcecode language=”php”]
    /**
    * Find the appropriate configuration directory.
    *
    * Try finding a matching configuration directory by stripping the website’s
    * hostname from left to right and pathname from right to left. The first
    * configuration file found will be used; the remaining will ignored. If no
    * configuration file is found, return a default value ‘$confdir/default’.
    **/
    function conf_path($require_settings = TRUE, $reset = FALSE) {
    static $conf = ”;

    if ($conf && !$reset) {
    return $conf;
    }

    $confdir = CMS_ROOT.’/sites’;
    $uri = explode(‘/’, $_SERVER[‘SCRIPT_NAME’] ? $_SERVER[‘SCRIPT_NAME’] : $_SERVER[‘SCRIPT_FILENAME’]);
    $server = explode(‘.’, implode(‘.’, array_reverse(explode(‘:’, rtrim($_SERVER[‘HTTP_HOST’], ‘.’)))));
    for ($i = count($uri) – 1; $i > 0; $i–) {
    for ($j = count($server); $j > 0; $j–) {
    $dir = implode(‘.’, array_slice($server, -$j)) . implode(‘.’, array_slice($uri, 0, $i));
    if (file_exists(“$confdir/$dir/config.php”) || (!$require_settings && file_exists(“$confdir/$dir”))) {
    $conf = “$confdir/$dir”;
    return $conf;
    }
    }
    }
    $conf = “$confdir/default”;
    return $conf;
    }
    [/sourcecode]

Wie funktioniert nun die Installation einer weiteren Domain/Site?

Als erstes muss folgendes Verzeichnis im Document-Root des CMS angelegt werden:

/sites/default

Hier hinein wird die config.php aus dem Document-Root kopiert oder verschoben:

/config.php => /sites/default/config.php

Ablauf einer Installation für eine (neue/erste) Domain “meinedomain.de”:

  1. Anlegen eines neuen Konfigurations-Verzeichnisses für diese Domain
    /sites/meinedomain.de
  2. Kopieren der config.php aus dem default-Verzeichnis in dieses neue Verzeichnis
  3. http://www.meinedomain.de/install/index.php aufrufen und Wolf CMS ganz normal mit den entsprechenden Daten installieren.
    ACHTUNG: Entweder es wird für jede Domain eine extra Datenbank verwendet, oder es wird jeweils ein gesondertes Datenbank-Prefix bei der Installation gewählt. Es muss aber sichergestellt sein, dass eines zutrifft ansonsten funktioniert  das so nicht.
  4. FERTIG.

Ich hoffe das war einigermaßen verständlich dargelegt ansonsten verflucht mich in den Kommentaren 😉

wolfWhat does “multidomain” or “multisite” mean?

It means that you have the cms installed just one time, but you can administer as many domains with different content as you like.

Sounds good, didn’t it?

How can this be done with Wolf CMS or Frog CMS?

The original code is from Drupal, where is also a multisite cms and they have done this very easy going. Change just thes 4 files:

  1. /index.php
    replace this line:
    [sourcecode language=”php”]
    $config_file = CMS_ROOT.’/config.php’;
    [/sourcecode]
    with this:
    [sourcecode language=”php”]
    $config_file = conf_path().’/config.php’;
    [/sourcecode]
  2. /admin/index.php
    replace this line:
    [sourcecode language=”php”]
    $config_file = CMS_ROOT.’/config.php’;
    [/sourcecode]
    with this:
    [sourcecode language=”php”]
    $config_file = conf_path().’/config.php’;
    [/sourcecode]
  3. /install/index.php
    replace this lines:
    [sourcecode language=”php”]
    define(‘CORE_ROOT’, dirname(__FILE__).’/../wolf’);
    $config_file = ‘../config.php’;
    [/sourcecode]
    with these:
    [sourcecode language=”php”]
    define(‘CMS_ROOT’, dirname(__FILE__).’/..’);
    define(‘CORE_ROOT’, CMS_ROOT.’/wolf’);
    require_once(CORE_ROOT.’/utils.php’);
    $config_file = conf_path().’/config.php’;
    [/sourcecode]
  4. /wolf/utils.php
    Add the function “conf_path()”:
    [sourcecode language=”php”]
    /**
    * Find the appropriate configuration directory.
    *
    * Try finding a matching configuration directory by stripping the website’s
    * hostname from left to right and pathname from right to left. The first
    * configuration file found will be used; the remaining will ignored. If no
    * configuration file is found, return a default value ‘$confdir/default’.
    **/
    function conf_path($require_settings = TRUE, $reset = FALSE) {
    static $conf = ”;

    if ($conf && !$reset) {
    return $conf;
    }

    $confdir = CMS_ROOT.’/sites’;
    $uri = explode(‘/’, $_SERVER[‘SCRIPT_NAME’] ? $_SERVER[‘SCRIPT_NAME’] : $_SERVER[‘SCRIPT_FILENAME’]);
    $server = explode(‘.’, implode(‘.’, array_reverse(explode(‘:’, rtrim($_SERVER[‘HTTP_HOST’], ‘.’)))));
    for ($i = count($uri) – 1; $i > 0; $i–) {
    for ($j = count($server); $j > 0; $j–) {
    $dir = implode(‘.’, array_slice($server, -$j)) . implode(‘.’, array_slice($uri, 0, $i));
    if (file_exists(“$confdir/$dir/config.php”) || (!$require_settings && file_exists(“$confdir/$dir”))) {
    $conf = “$confdir/$dir”;
    return $conf;
    }
    }
    }
    $conf = “$confdir/default”;
    return $conf;
    }
    [/sourcecode]

How do i add a new domain with new content?

First thing to do is make a sites-directory wich holds the different configurations for these additional domains, so add in the wolf/frog-root:

/sites/default

move the standard config.php from the root into the default container:

/config.php => /sites/default/config.php

Done the prerequisites for the multidomain-feature. Now i will give a description for adding the additional domain “www.mydomain.com”:

  1. Add the domain as a directory to the sites container:
    /sites/mydomain.com
  2. Copy the default config.php from the default container to sites/mydomain.com
  3. Call http://www.mydomain.com/install/index.php and install the CMS like you used to.
    ATTENTION: You need to use another database or another prefix at the installation.
  4. Done.

Maby some of you like to comment this method, go ahead 😉

2 Kommentare bei „Wolf CMS zum MultiSite-/MultiDomain-CMS ausbauenExtend Wolf CMS to a multi-site/multi-domain CMS

  1. Very interesting concept! I think I missed this when you first posted a link on the Wolf forums. Great idea, and hopefully it can be refined.

    Vielen dank!

    David.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.