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_MASTERPM (bere se vždy z masteru),
    • REFLECT_VARIANTPV (bere se vždy z varianty),
    • VARIANT_IF_MISSING_MASTERVM (z varianty; pokud chybí, z masteru),
    • FORBIDDENZ (na variantě nelze zadat).
  • alias() typu OriginBehaviour:
    • REFLECT_ORIGINPO (bere se vždy z originu),
    • REFLECT_ALIASPA (bere se vždy z aliasu),
    • ALIAS_IF_OVERRIDDEN_ORIGIN_OTHERWISEDO (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.
VlastnostTraitBASICMASTERVARIANTSETALIASALIAS (jiný kat.)
StavProductP / PP / PPV / PP / PPA / PPA / P
Časová validitaProductV / VV / VVM / VV / VDO / VDO / V
ViditelnostProductP / PP / PPV / PP / PPA / PPA / P
LokalizaceWithLocalization ¹V / VV / VVM / VV / VDO / VDO / V
Název pro webProductP / PP / PVM / VP / PDO / VDO / V
UrlWithUrl ¹P / ZP / ZP / ZP / ZPA / ZPA / Z
KódProductP / PP / PPV / PP / PPA / PPA / P
Katalogové čísloProductV / VV / VVM / VV / VDO / VDO / V
Krátký popisProductV / VV / VVM / VV / VDO / VDO / V
PopisProductV / VV / VVM / VV / VDO / VDO / V
Média (soubory)EdeeShopEntityWithGalleriesV / VV / VVM / VV / VDO / VDO / V
CenyProductWithPriceP / PV / VVM / VV / VDO / VDO / V
ZnačkaProductWithBrandV / VV / VPM / ZV / VDO / VDO / V
KategorieProductWithCategoryV / VV / VPM / ZV / VDO / VPA / V
Skupiny produktůProductWithGroupV / VV / VPM / ZV / VPA / VPA / V
DostupnostProductP / PV / VVM / VP / PDO / VDO / V
EANProductV / VV / VVM / VV / VDO / VDO / V
Skladové množstvíProductWithQuantityP / PZ / ZPV / PP / PPO / ZPO / Z
Omezení prodejeProduct ³P / PP / PPM / ZZ / ZDO / VDO / V
JednotkaProductV / VV / VPM / ZZ / ZDO / VDO / V
Min., Max., BaleníProductWithOrderDataV / VV / VVM / VV / VDO / VDO / V
MetadataGenericEntityWithLocalizationV / VV / VVM / VV / VDO / VDO / V
Vazby na produktyProductWithRelatedProductsV / VV / VPM / ZV / VDO / VDO / V
ŠtítkyEdeeShopEntityWithTagsV / VV / VPM / ZV / VDO / VDO / V
Parametry produktuProductWithParametersV / VV / VVM / VV / VDO / VDO / V
Obsahové blokyWithContentBlocks ¹V / VV / VVM / VV / VDO / VDO / V ²
Záruční dobaWithWarrantyPeriod ¹V / VV / VPM / ZV / VDO / VDO / V
Výchozí pro nové traityV / VV / VPV / VV / VPA / VPA / 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 (DOPA napříč katalogy), protože zařazení do kategorií je vždy specifické pro cílový katalog.

Zkopírovat odkaz na sekciSouvisející dokumentace