Magento ermöglicht die Erstellung von Multistores, d h. von mehreren Stores, die über ein einziges Administrationspanel verwaltet werden. Dadurch kann u. A. der Kategoriebaum, die Sprachversion sowie die Produktsammlung für jeden Store einzeln eingestellt werden.
Die Struktur des Multistores sieht folgendermaßen aus: Website > Store > Store View.
Mit anderen Worten: Eine Website setzt sich aus einer bestimmten Anzahl an Stores zusammen, wobei sich ein Store in verschiedene Views unterteilt. Sämtliche Einstellungen können im Reiter System > Manage Stores vorgenommen werden.
Implementierung der Struktur in der Datenbank
Für die Implementierung der Multistore-Struktur sind in der Datenbank drei Tabellen verantwortlich:
- core_website – enthält Identifikator, Name sowie einzigartigen Websitecode, Standardgruppe (default_group_id) und die Website (is_default);
- core_store_group – enthält Kategoriestammbaum (root_category_id), Identifikator des Standard-Shops (store_id) sowie die Website, zu der die entsprechende Store-Gruppe gehört;
- core_store – enthält Identifikator, Code und Name des Views sowie die zugehörige Gruppe.
ACHTUNG! Die Namensgebung der Tabellen in der Datenbank und im Konfigurationspanel unterscheidet sich etwas und kann irreführend sein, denn store entspricht im Panel der store_group in der Datenbank (und analog dazu entspricht store view im Panel dem store in der Datenbank).
Produkte und Nutzer
Produkte können nur bestimmten Websites (nicht Stores oder Views) zugewiesen werden. Dies wird mithilfe des Reiters Websites in der Produktbearbeitung (Tabelle catalog_product_website) realisiert. Natürlich wird das Produkt durch die Zuweisung an eine entsprechende Website in sämtlichen dieser Website zugehörigen Shops und Views zugänglich. Darüber hinaus werden die Nutzer auf der gleichen Ebene gespeichert (Spalte website_id in der Tabelle customer_entity).
Attributwerte – EAV-Model
Jede Tabelle mit Attributwerten im EAV-Model enthält eine zusätzliche Spalte (store_id), in der beschrieben wird, welchem View der jeweilige Attributwert zugehörig ist (wobei 0 einen globalen Wert darstellt). Wenn ein bestimmtes Attribut beispielsweise auf der Ebene der Website (website) definiert werden kann, entspricht die Anzahl der hinzugefügten Zeilen der Anzahl an zur entsprechenden Website gehörenden Views (je eine Zeile für je einen View).
Attributwerte – Flat-Model
Bei Daten des Flat-Models stellt sich die Situation etwas anders dar: Die Spalte store_id existiert nicht. Es wird jedoch eine gesonderte Tabelle mit einem Suffix, der dem Identifikator (Nummer) des Views entspricht, für jeden Entity-Typ erstellt:
- catalog_product_flat_1, catalog_product_flat_2, ...
- catalog_category_flat_store_1, catalog_category_flat_store_2, ...
Wann ist eine bestimmte Ebene zu wählen
Bei der Anwendung der Multistore-Lösung sieht man sich häufig mit dem Problem konfrontiert, ob eine gesonderte Website, ein gesonderter Shop oder nur ein gesonderter View erstellt werden soll. Die Antwort ist von einigen grundlegenden Informationen abhängig:
- wenn nur eine andere Sprachversion erforderlich ist und die Produkte (u. a. Preise) sowie die Kategorienstruktur identisch bleiben, ist ein neuer View (store view) ausreichend;
- wenn eine andere Kategorienstruktur erforderlich ist, muss zumindest ein neuer Shop (store) hinzugefügt werden, da der Kategorienstammbaum erst auf dieser Ebene definiert werden kann;
- wenn die Produkte in jedem einzelnen Shop unterschiedlich sein können (oder unterschiedliche Preise haben können), ist die Erstellung einer gesonderten Website (website), d. h. der höchsten Strukturebene, erforderlich.
In der Praxis wird häufig von vornherein eine gesonderte Website erstellt (es sei denn, man sich absolut sicher, dass beispielsweise nur eine andere Sprachversion erforderlich sein wird). Dies ermöglicht das einfache zukünftige Hinzufügen von gesonderten Produktsammlungen, Kategoriebäumen und Sprachversion.