Magento – multistore

(witryny, sklepy i widoki)

Magento umożliwia tworzenie multistore – wielu sklepów zarządzanych z jednego panelu administracyjnego. Umożliwia to ustawienie m.in. drzewa kategorii, wersji językowej oraz zbioru produktów dla każdego sklepu osobno.

Struktura multistore jest następująca: Witryna > Sklep > Widok sklepu (Website > Store > Store View). Innymi słowy, witryna składa się z pewnej liczby sklepów, natomiast sklep dzieli się na widoki. Cała konfiguracja może być wykonana w zakładce System > Manage Stores.

Implementacja struktury w bazie danych

Za implementację struktury multistore odpowiadają w bazie danych 3 tabele:

  • core_website – zawiera identyfikator, nazwę i unikalny kod witryny, domyślną grupę (default_group_id) i witrynę (is_default);
  • core_store_group – zawiera korzeń drzewa kategorii (root_category_id), identyfikator domyślnego sklepu (store_id) oraz witrynę do której należy dana grupa sklepów;
  • core_store – zawiera identyfikator, kod i nazwę widoku oraz grupę do której należy.

UWAGA: Nazewnictwo tabel w bazie danych i w panelu konfiguracyjnym jest nieco inne i może być mylące – mianowicie store w panelu admnistracyjnym odpowiada store_group w bazie danych (i analogicznie store view w panelu odpowiada store w bazie).

Produkty i użytkownicy

Produkty przypisywać można  tylko do określonych witryn (nie do sklepu i widoku) – jest to realizowane za pomocą zakładki Websites w edycji produktu (tabela catalog_produt_website w bazie danych). Oczywiście przypisanie produktu do danej witryny powoduje jego dostępność we wszystkich sklepach i widokach należących do tej witryny. Także użytkownicy są zapisywani na tym samym poziomie (kolumna website_id w tabeli customer_entity).

Wartości atrybutów – model EAV

Każda tabela z wartościami atrybutów w modelu EAV zawiera dodatkową kolumnę (store_id) określającą do którego widoku należy dana wartość atrybutu (przy czym 0 oznacza wartość globalną). Jeżeli dany atrybut może być definiowany np. na poziomie witryny (website) – dopisywane jest tyle wierszy, ile widoków należy do danej witryny (jeden wiersz dla każdego widoku).

Wartości atrybutów – model płaski

Przy płaskim modelu danych sytuacja jest nieco inna – nie ma kolumny store_id, natomiast dla każdego typu encji tworzona jest osobna tabela z sufiksem odpowiadającym identyfikatorowi (numerowi) widoku:

  • catalog_product_flat_1, catalog_product_flat_2, …
  • catalog_category_flat_store_1, catalog_category_flat_store_2, …

Kiedy wybrać określony poziom

W przypadku użycia multistore stajemy często przed problemem czy tworzyć osobną witrynę, sklep czy tylko widok. Odpowiedź zależy od kilku podstawowych informacji:

  • jeżeli potrzebujemy tylko innej wersji językowej a produkty (m.in. ceny) i struktura kategorii będą identyczne – wystarczy tylko nowy widok (store view);
  • jeżeli potrzebujemy inną strukturę kategorii – należy dodać co najmniej dodać nowy sklep (store), gdyż dopiero na tym poziomie możemy zdefiniować korzeń drzewa kategorii;
  • jeżeli produkty mogą być różne w każdym sklepie (lub mogą mieć różne ceny) – należy koniecznie stworzyć odrębną witrynę (website), czyli najwyższy poziom struktury.

W praktyce często tworzy się od razu osobną witrynę (chyba że mamy absolutną pewność że wystarczy nam np. tylko inna wersja językowa) – umożliwia to łatwe dodanie w przyszłości odrębnego zbioru produktów, drzewa kategorii i wersji językowej.

pluswerk