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).
Mechanismus 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()typuVariantBehaviour: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()typuOriginBehaviour: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řesProductWithAliasData#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í.)
Matice 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 jeWithLocalization(produkt jej dědí přesProductWithLocalization).- Url — původně
EdeeShopEntityWithUrl(neexistuje). Skutečný trait jeWithUrl(resp.CatalogEntityWithUrl).- Obsahové bloky — původně
ProductWithStaticInclude(zastaralá terminologie „StaticInclude"). Dnes modullib_eshop_content_include:WithContentBlocks/EdeeShopEntityWithContentBlocks(alias/varianta:ProductAliasWithContentBlocks,ProductVariantWithContentBlocks).- Záruční doba — původně
ProductWithWarrantyPeriod. Skutečný název jeWithWarrantyPeriod.² Obsahové bloky napříč katalogy (v10): od verze 10 (issue #2683) dědí obsahové bloky i napříč katalogy — chování je DO, nikoli
PAjako ve verzích v9 a starších. Cross-catalog re-publikaci zajišťujeAliasContentBlocksBuilder#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 naProduct(s override vProductAlias/ProductVariant), nikoli v traituProductWithOrderData, 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.
Souvisejí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.
