Multi-Domains

Wir haben das AddOn entwickelt, um einfacher Projekte umzusetzen, die die gleiche SallyCMS-Installation zum Betreiben mehrerer Domains verwenden. Dazu kann zu einem Artikel neben dem Alias auch eine alternative Domain gespeichert werden. Dies wirkt sich auf den Artikel selbst sowie alle Kinder aus.

realURL2 ist clever genug, auf einer Seite mit Links zu verschiedenen Domains an den richtigen Stellen vollständige URLs zu erzeugen.

Beispiel

Die hier dargestellte Website befindet sich in www.example.com/projekt1/. Wir gehen auch davon aus, dass der Besucher sich gerade auf der example.com-Variante befindet.

Bemerkung

Diese Tabelle ignoriert die Sprach-Angaben in den URLs. Das ist so gewollt.

+---------------------+----------------------+------------------------------------+--------------------------------------------------+
|STRUKTUR             | ALIAS-ANGABE         | ERZEUGTE URL                       | HINWEISE                                         |
+---------------------+----------------------+------------------------------------+--------------------------------------------------+
|  |                  |                      |                                    |                                                  |
|  +-- Kategorie 1    |                      | kategorie1/                        | (keine Domain, weil unnötig)                     |
|  +-- Kategorie 2    | alternativ           | alternativ/                        | (Aliasname zum kommt Zug)                        |
|  |   +-- Kind 1     |                      | alternativ/kind-1.html             | (Aliasname wirkt sich auf alle Kinder aus)       |
|  |   +-- Kind 2     | bruder               | alternativ/bruder/                 | (Kindkategorie)                                  |
|  |                  |                      |                                    |                                                  |
|  +-- Wiki           | //wiki.example.com   | http://wiki.example.com/           | (Domainwechsel)                                  |
|  |   +-- Backend    | /backend             | http://wiki.example.com/backend    | (completely useless alias)                       |
|  |   +-- Hilfe      |                      | http://wiki.example.com/hilfe      |                                                  |
|  |       +-- Syntax | /syntax              | http://wiki.example.com/syntax     | (Kürzel)                                         |
|  |                  |                      |                                    |                                                  |
|  +-- Blog           | //blog.foo.com/wp    | http://blog.foo.com/wp/            | (Domain kann auch Root-Pfad enthalten)           |
|      +-- Backend    | /back                | http://blog.foo.com/wp/back        | (Alias + Kürzel)                                 |
|      +-- Hilfe      |                      | http://blog.foo.com/wp/hilfe       |                                                  |
|      |   +-- Syntax | /syntax/foo          | http://blog.foo.com/wp/syntax/foo  | (Kürzel können auch virtuelle Pfade enthalten)   |
|      +-- Impressum  | /im                  | http://blog.foo.com/wp/im.html     | (Alias + Kürzel für einen Artikel)               |
|                     |                      |                                    |                                                  |
+---------------------+----------------------+------------------------------------+--------------------------------------------------+

Mehrere Projekte

Möchte man zwei gänzlich unabhängige Projekte in einer Installation verwalten, so trifft man zwangsweise auf das “Seiten-Startartikel & die Home-Kategorie”-Problem, das sich wie folgt darstellt.

Bemerkung

Multi-Projekt-Systeme sind nichts weiter als eine clevere Nutzung der Konfliktlösung von realURL2.

TL;DR

Um mehrere Projekte in einer Sally-Installation zu verwalten, legt man pro Projekt eine Kategorie auf der obersten Ebene ab und routet dann wie folgt:

  • Das erste Projekt (die erste Kategorie) erhält keine Routing-Angabe.
  • Alle weiteren Projektkategorien werden auf die Projekt-Domain geroutet (//projektb.com, //projectc.com, ...).
  • Die erste Kategorie innerhalb der Projektkategorien (meistens Home oder Start) wird jeweils auf / geroutet.
  • Der Seiten-Startartikel (Homepage) wird auf die erste Projektkategorie gelegt (die, die keine eigene Routing-Angabe erhielt).

Einfache Projekte

Üblicherweise besteht ein Projekt aus einer Reihe von Kategorien, aus denen die Navigation zusammengebaut wird. Für ein einfaches Projekt kann dies wie folgt aussehen:

# Home
# Unternehmen
# Produkte
# Blog
# Über uns
+ Impressum        <- jeweils Artikel
+ AGB              <- jeweils Artikel
+ Suchergebnisse   <- jeweils Artikel

Nun würde man der Kategorie Home zum Seiten-Startartikel (START_ARTICLE_ID) machen, wodurch sie auf den Root des Projekts geroutet wird. Die URLs könnten dann wie folgt aussehen (angenommen, die Standard-Domain ist auf //example.com eingestellt):

# Home              http://example.com/
# Unternehmen       http://example.com/unternehmen/
# Produkte          http://example.com/produkte/
# Blog              http://example.com/blog/
# Über uns          http://example.com/ueber-uns/
+ Impressum         http://example.com/impressum.html
+ AGB               http://example.com/agb.html
+ Suchergebnisse    http://example.com/suchergebnisse.html

Damit sind alle URLs eindeutig und alles ist in Ordnung.

Zwei Projekte

Nun duplizieren wir die Struktur und führen eine Projekt-Ebene ein. Die neue Struktur:

# Projekt A
   # Home
   # Unternehmen
   # Produkte
   # Blog
   # Über uns
   + Impressum
   + AGB
   + Suchergebnisse

# Projekt B
   # Home
   # Unternehmen
   # Produkte
   # Blog
   # Über uns
   + Impressum
   + AGB

Nun kann man den Startartikel auf Projekt A legen und Projekt B auf eine eigene Domain routen. Das ergäbe dann URLs wie folgt:

# Projekt A          (Homepage)         http://example.com/
   # Home                               http://example.com/home/
   # Unternehmen                        http://example.com/unternehmen/
   # Produkte                           http://example.com/produkte/
   # Blog                               http://example.com/blog/
   # Über uns                           http://example.com/ueber-uns/
   + Impressum                          http://example.com/impressum.html
   + AGB                                http://example.com/agb.html
   + Suchergebnisse                     http://example.com/suchergebnisse.html

# Projekt B          //projektb.com     http://projektb.com/
   # Home                               http://projektb.com/home/
   # Unternehmen                        http://projektb.com/unternehmen/
   # Produkte                           http://projektb.com/produkte/
   # Blog                               http://projektb.com/blog/
   # Über uns                           http://projektb.com/ueber-uns/
   + Impressum                          http://projektb.com/impressum.html
   + AGB                                http://projektb.com/agb.html

Nun möchte man aber weiterhin die Home-Kategorien auf den Root der Domains legen können. Also routet man diese noch von Hand auf /.

# Projekt A          (Homepage)         http://example.com/
   # Home            /                  http://example.com/
   # Unternehmen                        http://example.com/unternehmen/
   # Produkte                           http://example.com/produkte/
   # Blog                               http://example.com/blog/
   # Über uns                           http://example.com/ueber-uns/
   + Impressum                          http://example.com/impressum.html
   + AGB                                http://example.com/agb.html
   + Suchergebnisse                     http://example.com/suchergebnisse.html

# Projekt B          //projektb.com     http://projektb.com/
   # Home            /                  http://projektb.com/
   # Unternehmen                        http://projektb.com/unternehmen/
   # Produkte                           http://projektb.com/produkte/
   # Blog                               http://projektb.com/blog/
   # Über uns                           http://projektb.com/ueber-uns/
   + Impressum                          http://projektb.com/impressum.html
   + AGB                                http://projektb.com/agb.html

Jetzt sind die URLs der Home-Kategorien in Ordnung, aber jeweils doppelt vergeben. Wir haben einen Konflikt erzeugt.

Konfliktbereinigung

Dieser Konflikt ist natürlich gewollt. Von Seiten der API gibt es keine Unterscheidung bei Konflikten, d.h. sowohl die Projekt B-Kategorie als auch die Home-Kategorie darin geben bei ->getURL() ihre URL zurück. Nur beim Auflösen von URLs in den jeweiligen Artikel kommt nun eine automatische Konfliktbereinigung zum Einsatz.

Beim Auflösen einer URL wird wie folgt vorgegangen:

  1. finde alle Datensätze mit dieser URL in der Datenbank
  2. falls keine URL gefunden wurde, abbrechen.
  3. falls nur eine URL gefunden wurde, fertig.
  4. trenne URLs in realURL2-URLs und AddOn-URLs auf.
    1. wenn eine oder mehrere AddOn-URLs gefunden wurde, gib die erste zurück.
    2. sind alle URLs von realURL2 erzeugt, werden die URLs anhand ihrer Tiefe im Strukturbaum sortiert (Tiefensuche). Der tiefste Treffer wird zurückgegeben.

Da zwei Artikel niemals die gleiche Position einnehmen können, terminiert der Algorithmus immer mit einem eindeutigen Ergebnis.

Einfach gesprochen gilt also die Regel: Tieferliegende Artikel haben Vorrang und überlagern die URLs ihrer Eltern. Wenn die Kandidaten-URLs nicht innerhalb des gleichen Pfads liegen, gilt “je weiter unten in der Liste, desto wichtiger”.

Nimmt man diesen Algorithmus, so wird die Home-Kategorie, da sie innerhalb der Projekt B-Kategorie liegt, als wichtiger bewertet und daher beim Auflösen von http://projektb.com/ ausgewählt und schlussendlich dem Besucher angezeigt.

Inhalt

Vorheriges Thema

User Guide

Nächstes Thema

Routing-Framework

Diese Seite