Datový model a dědičnost vlastností produktu
Datový model a dědičnost vlastností produktu
Produkt je složen z vlastností, které dodávají jednotlivé traity (Java rozhraní rozšiřující model — viz Traity). U variant a aliasů se část vlastností nedrží na samotné entitě, ale dědí z jiné entity (master produkt, resp. origin produkt / předloha). Tento dokument popisuje, které vlastnosti se dědí a jak.
Tato matice dříve žila jako externí Google Sheet (odkazovaný z Alias produktů); zde je zrevidovaná proti aktuálnímu kódu (v10).
Zkopírovat odkaz na sekciMechanismus dědičnosti
Chování dědičnosti u skalárních vlastností se deklaruje anotací @EdeeShopProductProperty na getteru vlastnosti v traitu — atributy variant() a alias():
- variant() typu VariantBehaviour:
- REFLECT_MASTER → PM (bere se vždy z masteru),
- REFLECT_VARIANT → PV (bere se vždy z varianty),
- VARIANT_IF_MISSING_MASTER → VM (z varianty; pokud chybí, z masteru),
- FORBIDDEN → Z (na variantě nelze zadat).
- alias() typu OriginBehaviour:
- REFLECT_ORIGIN → PO (bere se vždy z originu),
- REFLECT_ALIAS → PA (bere se vždy z aliasu),
- ALIAS_IF_OVERRIDDEN_ORIGIN_OTHERWISE → DO (z aliasu, pokud je nastaven override; jinak z originu).
Runtime dědičnost realizují wrappery:
- ProductVariantWrapper — drží masterProduct + variantProduct, delegátem je varianta.
- ProductAliasWrapper — drží origin + alias, delegátem je alias. Stav override drží AliasOverrides (přístup přes ProductWithAliasData#getOverrides()).
U relačních vlastností (typicky Značka, Kategorie, Skupiny, Vazby na produkty) a několika dalších (např. Omezení prodeje) není dědičnost řízena anotací @EdeeShopProductProperty, ale custom/wrapper logikou (u aliasu např. alias = CUSTOM, resp. getter není součástí uvedeného traitu). Hodnoty v matici u těchto vlastností proto vyjadřují skutečné chování, nikoli přímo hodnotu anotace.
Kombinace alias + varianta je dnes podporovaná traitem ProductWithAliasDataVariant (aliasové override se u alias-varianty přesměrovává na master produkt; zápis na variantě vyhazuje UnsupportedOperationException). (Poznámka: starší dokumentace tvrdila, že tento trait není připravený — to už neplatí.)
Zkopírovat odkaz na sekciMatice dědičnosti
Každá buňka je ve tvaru čtení / zápis.
Legenda:
- P — povinné, V — volitelné, Z — zakázáno.
- VM — z varianty; pokud údaj chybí, z masteru.
- PM — vždy z masteru, PV — vždy z varianty.
- DO — pokud je nastaveno dědění, z originu (jinak z aliasu).
- PO — vždy z originu, PA — vždy z aliasu.
| Vlastnost | Trait | BASIC | MASTER | VARIANT | SET | ALIAS | ALIAS (jiný kat.) |
|---|---|---|---|---|---|---|---|
| Stav | Product | P / P | P / P | PV / P | P / P | PA / P | PA / P |
| Časová validita | Product | V / V | V / V | VM / V | V / V | DO / V | DO / V |
| Viditelnost | Product | P / P | P / P | PV / P | P / P | PA / P | PA / P |
| Lokalizace | WithLocalization ¹ | V / V | V / V | VM / V | V / V | DO / V | DO / V |
| Název pro web | Product | P / P | P / P | VM / V | P / P | DO / V | DO / V |
| Url | WithUrl ¹ | P / Z | P / Z | P / Z | P / Z | PA / Z | PA / Z |
| Kód | Product | P / P | P / P | PV / P | P / P | PA / P | PA / P |
| Katalogové číslo | Product | V / V | V / V | VM / V | V / V | DO / V | DO / V |
| Krátký popis | Product | V / V | V / V | VM / V | V / V | DO / V | DO / V |
| Popis | Product | V / V | V / V | VM / V | V / V | DO / V | DO / V |
| Média (soubory) | EdeeShopEntityWithGalleries | V / V | V / V | VM / V | V / V | DO / V | DO / V |
| Ceny | ProductWithPrice | P / P | V / V | VM / V | V / V | DO / V | DO / V |
| Značka | ProductWithBrand | V / V | V / V | PM / Z | V / V | DO / V | DO / V |
| Kategorie | ProductWithCategory | V / V | V / V | PM / Z | V / V | DO / V | PA / V |
| Skupiny produktů | ProductWithGroup | V / V | V / V | PM / Z | V / V | PA / V | PA / V |
| Dostupnost | Product | P / P | V / V | VM / V | P / P | DO / V | DO / V |
| EAN | Product | V / V | V / V | VM / V | V / V | DO / V | DO / V |
| Skladové množství | ProductWithQuantity | P / P | Z / Z | PV / P | P / P | PO / Z | PO / Z |
| Omezení prodeje | Product ³ | P / P | P / P | PM / Z | Z / Z | DO / V | DO / V |
| Jednotka | Product | V / V | V / V | PM / Z | Z / Z | DO / V | DO / V |
| Min., Max., Balení | ProductWithOrderData | V / V | V / V | VM / V | V / V | DO / V | DO / V |
| Metadata | GenericEntityWithLocalization | V / V | V / V | VM / V | V / V | DO / V | DO / V |
| Vazby na produkty | ProductWithRelatedProducts | V / V | V / V | PM / Z | V / V | DO / V | DO / V |
| Štítky | EdeeShopEntityWithTags | V / V | V / V | PM / Z | V / V | DO / V | DO / V |
| Parametry produktu | ProductWithParameters | V / V | V / V | VM / V | V / V | DO / V | DO / V |
| Obsahové bloky | WithContentBlocks ¹ | V / V | V / V | VM / V | V / V | DO / V | DO / V ² |
| Záruční doba | WithWarrantyPeriod ¹ | V / V | V / V | PM / Z | V / V | DO / V | DO / V |
| Výchozí pro nové traity | — | V / V | V / V | PV / V | V / V | PA / V | PA / V |
¹ Oprava názvu traitu proti původní tabulce (FG314):
- Lokalizace — původně EdeeShopEntityWithLocalization (tento trait neexistuje; jde o REST adapter). Skutečný trait je WithLocalization (produkt jej dědí přes ProductWithLocalization).
- Url — původně EdeeShopEntityWithUrl (neexistuje). Skutečný trait je WithUrl (resp. CatalogEntityWithUrl).
- Obsahové bloky — původně ProductWithStaticInclude (zastaralá terminologie „StaticInclude"). Dnes modul lib_eshop_content_include: WithContentBlocks / EdeeShopEntityWithContentBlocks (alias/varianta: ProductAliasWithContentBlocks, ProductVariantWithContentBlocks).
- Záruční doba — původně ProductWithWarrantyPeriod. Skutečný název je WithWarrantyPeriod.
² Obsahové bloky napříč katalogy (v10): od verze 10 (issue #2683) dědí obsahové bloky i napříč katalogy — chování je DO, nikoli PA jako ve verzích v9 a starších. Cross-catalog re-publikaci zajišťuje AliasContentBlocksBuilder#publishStaticIncludeDataForAliases(), které při změně obsahu na originu re-publikuje aliasy (i v jiných katalozích), jež obsah nepřetěžují.
³ Omezení prodeje — getter getSaleRestriction() je deklarován přímo na Product (s override v ProductAlias / ProductVariant), nikoli v traitu ProductWithOrderData, jak uváděla původní tabulka. Dědičnost je zde řešena těmito override, ne anotací.
Poznámka ke sloupci ALIAS vs. ALIAS (jiný kat.): rozdíl se týká vlastností s dědičností PA/DO. U aliasu ve stejném katalogu (ALIAS) a napříč katalogy (ALIAS (jiný kat.)) se liší např. Kategorie (DO → PA napříč katalogy), protože zařazení do kategorií je vždy specifické pro cílový katalog.
Zkopírovat odkaz na sekciSouvisející dokumentace
- Editor produktu — jak se dědičnost projevuje v administraci (přepínače overrideToggle, hodnoty EI / EI (E) / V v matici komponent).
- Alias produktů — AliasOverrides, wrappery, rozšíření o vlastní traity.
- Traity a jejich inicializace.