Skip to content

Produktový model

Stav k 2026-06-21.


Přehled tabulek

Tabulka Typ Popis
eshop_produkty tabulka hlavní tabulka, 80+ sloupců
eshop_produkty_varianty tabulka varianty produktu (vlastní kód, cena, HTML popis)
eshop_produkty_barvy tabulka barevné varianty s příplatkem
eshop_produkty_kategorie tabulka normalizovaná M:N vazba produkt↔kategorie
eshop_produkty_souvisejici tabulka M:N: související produkty
eshop_produkty_souvisejici_kategorie tabulka M:N: kategorie zobrazované u produktu jako "související"
eshop_produkty_prislusenstvi tabulka M:N: příslušenství k produktu
eshop_produkty_dostupnost tabulka číselník dostupností (id, dni, titulek)
eshop_produkty_sklady_mnozstvi tabulka množství per sklad per produkt
eshop_produkty_google_param tabulka Google structured data parametry (název/hodnota)
eshop_produkty_old tabulka záložní/historická kopie (starší schéma, méně jazyků)
eshop_produkty_aktualni_dostupnost VIEW aktuální dostupnost (množství + dostupnostní kódy)
eshop_produkty_sklad_centrala VIEW množství na centrálním skladu
eshop_produkty_prodeje_30_dni VIEW prodeje za posledních 30 dní
eshop_vyrobci tabulka výrobci — název, alias, logo, lokalni flag

Podrobnosti v podstránkách:


Vícejazyčnost

Produkty mají textová pole v 6 lokálech: cs, en, de, sk, pl, hu.

Přeložená pole: nazev, nazev_pro_heureku, popis, kratky_popis, technicke_info, text_neni_skladem.

Suffix _ga (např. kategorie_ga) se používá pro rc-baterie.cz (gensace) — cron gensace-kategorie.php plní kategorie_ga kategoriemi druhého webu.

Varianty a barvy mají překlady v totéž 6 lokálů.


Kategorie — dvojí způsob

Způsob Pole / tabulka Popis
Denormalizovaný eshop_produkty.kategorie (mediumtext) pipe-separated seznam — historický, pro rychlé čtení
Normalizovaný eshop_produkty_kategorie (M:N tabulka) pro joins a filtry

Migrace: Sylius používá taxony — mapovat z normalizované tabulky.


Denormalizované countery a triggery

Pole Popis
variant počet variant
barev počet barev
souvisejicich počet souvisejících produktů
prodano celkem prodaných kusů
sleva_procent aktuální % slevy (max z akce a výprodeje)
marze marže — počítáno triggerem
cena_eshop finální zobrazovaná cena — počítáno triggerem

Triggery eshop_produkty_bi / eshop_produkty_bu (BEFORE INSERT/UPDATE):

cena_eshop    = cena_eshop(cena_a, cena_b, akce_id, akce_procent, vyprodej, vyprodej_procent)
sleva_procent = MAX(vyprodej_procent, akce_procent)
marze         = vypocet_marze(cena_eshop, cena_nakup)

Varianty a barvy — stav: málo používané

Původně navrženy pro produkty s více barvami nebo provedeními. V současnosti se nové produkty přidávají jako samostatné produkty — barvy a varianty se reálně téměř nepoužívají.

eshop_produkty_barvy — barva má název (6 lokálů), obrázek, příplatek, zobrazovat.

eshop_produkty_varianty — varianta má vlastní kod, cena (příplatek), zobrazovat, textový název (6 lokálů) + HTML obsah (6 lokálů).

Migrace: Ověřit reálný počet produktů s vyplněnými barvami/variantami před rozhodnutím o mapování na Sylius Product Variant.


Recyklační poplatek (RP/PHE)

  • skupina_phe — skupina RP (tinyint)
  • phe_kod — kód jiného produktu, který je poplatkem (FK přes kod do eshop_produkty)

Při zobrazení produktu se načte RP produkt a přidá se do košíku jako samostatná položka.


Štítky (stitek)

Integer odkazující na štítek konfigurovaný v admin nastavení (SETTING['stitky_cs'] atd.). Formát: Název:barva per řádek, index = hodnota stitek. Per jazyk.


Google parametry (eshop_produkty_google_param)

Volné páry nazev/hodnota per produkt — slouží pro Google Merchant structured data. Používají XML feedy.


Architektura importu — bypass Sylius vs. přes Sylius service vrstvu

Největší otevřená otázka pro kolegu při psaní importních workerů.

Přímý zápis do DB

  • rychlé na bulk (tisíce produktů), plná kontrola
  • cache, eventy, reindex vyhledávání musí worker zajistit sám
  • při upgradu Syliusu nutno ověřit kompatibilitu schématu

Přes Sylius service vrstvu

  • Sylius interně konzistentní (cache, eventy, stock)
  • pomalejší na bulk, ale upgrade-safe

Doporučení

Rozhodnout hned na začátku — zpětná změna strategie je nákladná.