Skip to content

Migrační rozsah — kompletní přehled

Stav k 2026-06-21. Tato stránka shrnuje zjištění z celé dokumentace a slouží jako vstupní bod pro realizaci migrace.


Celkový obraz

Sylius je správná volba — katalog, checkout, objednávky, zákazníci a správa práv jsou hotové věci, které stačí nakonfigurovat. Složitost projektu neplyne ze Syliusu, ale z toho, co e-shop dělá specificky: Pohoda integrace, cenová pipeline, 14 importérů a checkout speciality (RP, watchdog, odhad doručení...).

Pro zkušeného Sylius / Symfony vývojáře je velká část projektu dokumentovaná standardní práce. Custom věcí je překvapivě méně, než by se zdálo — ale ty, co jsou custom, jsou skutečně custom a nelze je odbýt.


Rozhodnutí, která musí padnout PŘED zahájením

Bez odpovědí nelze závazně fázovat ani nacenit. Každé z nich ovlivňuje architekturu nebo objem.

1. Editace produktů — Varianta A nebo B?

Varianta A — Sylius admin jako editor: Importy respektují flag neprepsat (custom atribut), editor pracuje přímo v Sylius adminu.

Varianta B — importy jsou zdroj pravdy: Produktová data žijí v importní vrstvě nebo PIM. Editor má vlastní UI mimo Sylius admin.

Toto rozhodnutí ovlivní vše ostatní

Varianta A = importní vrstva musí přesně vědět, co přepisuje. Varianta B = čistší Sylius, ale potřeba externího editačního rozhraní. Zpětná změna je nákladná — rozhodnutí musí padnout v Fázi 0.

2. CMS obsah — Bitbag, headless, nebo custom?

Sylius nemá nativní CMS. Obsah webu (bannery, statické stránky, slider, novinky) aktuálně obstarává 12 admin controllerů.

  • Bitbag SyliusCMS plugin — rychlejší start, open source, omezená flexibilita
  • Headless CMS (Contentful, Storyblok) — lepší redakce, více práce na frontendu
  • Custom Sylius admin sekce — plná kontrola, nejvíce práce

3. URL strategie — zachovat nebo přesměrovat?

Sylius nativně neodpovídá stávajícím URL vzorům (plochá produktová URL, dvojí vzor kategorií).

  • Zachovat stávající URL — custom slug strategie, žádná ztráta SEO
  • Nové URL — jednodušší implementace, nutná hromadná přesměrování (150K produktů × 6 lokálů)

4. rc-baterie.cz — Sylius Channel nebo přesměrování?

  • Channel = vlastní katalog, cenotvorba, admin — nezanedbatelná práce navíc
  • Přesměrování domény = ztráta SEO hodnoty domény, ale nulové náklady na provoz

5. Historické objednávky zákazníků

  • Import do Sylius — komplexní mapování (marže, PHE položky, kupóny); +60–100h
  • Read-only archiv — zákazník vidí objednávky od data migrace, starší jen v archivu

6. Hesla zákazníků — MD5

Hesla jsou MD5 a nelze je konvertovat.

  • Rehash při přihlášení — transparentní pro zákazníka, přechodová logika v auth
  • Hromadný reset — email všem zákazníkům před migrací

7. Import strategie — přes Sylius nebo přímý SQL?

  • Přes Sylius service vrstvu — konzistentní (cache, eventy, stock), upgrade-safe, pomalejší na bulk
  • Přímý SQL — rychlé na 150K produktů, ale worker řeší cache + reindex Meilisearch sám

Rozhodnutí musí platit pro všech 14 importérů — zpětná změna je nákladná.

8. Meilisearch — v 1. fázi nebo later?

Bez Meilisearch bude vyhledávání pomalé (SQL) nebo nebude. Ale přidá ~20–40h do 1. fáze.


Co Sylius pokryje bez práce

Toto jsou věci, které stačí nastavit — žádný kód:

  • Košík, checkout flow, potvrzovací e-maily
  • Stavy objednávky (state machine)
  • Zákazníci, přihlášení, zákaznický účet
  • Skupiny zákazníků → Channel Pricing
  • Platební metody a dopravy jako konfigurovatelný model
  • Základní slevové kupóny (fixní, procentuální, min. nákup)
  • Multi-měna přes Channel (CZK / EUR)
  • Multi-warehouse zásoby
  • SK Channel s vlastní DPH sazbou (tax zones)
  • B2B bez DPH (CustomerGroup + TaxExempt)
  • Doprava zdarma jen CZ (HasChannel promotion rule)
  • Max. množství v objednávce (maximumQuantity na Variant)
  • RBAC pro admin uživatele (Symfony role)
  • E-mailové šablony per stav objednávky

Co potřebuje standardní Sylius práci

Pro zkušeného Sylius vývojáře jde o dokumentované vzory — ResourceBundle, FormExtension, DataGrid. Ne magie, ale rutina.

Produktový formulář — rozšíření ProductType o custom pole, TranslationType pro 6 jazyků, přidání tabů. Zdokumentovaný Sylius pattern; ~30–60h.

Varianty, příslušenství, související — ProductOption/Variant, ProductAssociation plugin. Drobná customizace stačí.

Výrobci — SyliusLabs Brand plugin jako základ, dodat SEO pole, přeložené URL, manufacturersWithoutSales config.

Vouchery — SyliusGiftCard plugin pokryje základ; vazba na jméno a předtištěné kódy jsou custom navíc.

CMS obsah — s Bitbag SyliusCMS jde o konfiguraci + drobnou customizaci.

Meilisearchmonsieurbiz/sylius-search-plugin nebo podobný bundle; základ je konfigurace, ne stavba od nuly.

Přesměrování URL — SyliusRedirect plugin.

Zákazníci — split uzivatele na ShopUser / AdminUser je jasné mapování.


Co je skutečně custom

Toto jsou věci, kde plugin nestačí nebo neexistuje. Zde je reálná custom práce.

Importní vrstva — jádro projektu

Současný kód nelze migrovat — musí se přepsat. Ale s dobrým frameworkem je každý importér variace na stejný vzor.

Import framework: abstrakce pro parsování → staging → Sylius, transakce, logging, flag neprepsat. Jednorázová investice, amortizuje se přes 14 importérů.

Cenová pipeline (5 vrstev): Pohoda cena → dodavatelský ceník → InStock logika → koeficienty → nizka_marze. Musí být explicitní a konfigurovatelná — aktuálně je logika rozházená přes 4 PHP soubory.

InStock logika: pokud je produkt na skladě SZLAT+KOM, cena z dodavatele se NEaplikuje (Corfix, Modelimex). Explicitní podmínka v pipeline.

Pohoda import (full + diff): obousměrná integrace, vlastní formát, inkrementální synchronizace každých 10 minut. Skutečně složité.

Checkout speciality

Viz checkout-speciality.md pro detaily. Konkrétní custom implementace:

Specialita Co je potřeba
RP/PHE jako košíková položka Custom CartSubscriber nebo OrderProcessor; musí být konzistentní s Pohoda exportem
"Dotaz na dostupnost" místo Koupit Custom ProductAvailabilityChecker + šablona; podmínka kontroluje od/od_puvodni
Watchdog — hlídání dostupnosti Subscriber na stock change event → notifikace z fronty
Odhad data doručení Custom shipping estimator; per-dodavatel výjimky musí být konfigurovatelné, ne hardcoded
Narozeninová sleva Custom PromotionRuleChecker (kontrola data narození zákazníka)
Cena na dotaz Custom atribut + skrytí ceny v šabloně

Pohoda export

Viz pohoda-export.md. V Syliusu bude čistší než dnes:

  • Mapování dopravce/platby přes ShippingMethod::code → config array (ne text-matching)
  • Výdejní místa jako custom field na Shipment (přežije re-export, na rozdíl od dnešního $_SESSION)
  • SK OSS DPH (historyHigh/historyLow) — testovat důkladně

Akce a slevy (nad rámec Sylius Promotions)

  • Globální akce s výjimkami výrobců (manufacturersWithoutSales, kod LIKE 'FOX%') → custom PromotionEligibilityChecker
  • Akce jen pro "skladem" produkty → custom rule
  • Automatické spouštění/vypínání → scheduler nebo Promotion validity
  • Nový importovaný produkt při aktivní globální akci → event handler (ne čekat na noční cron)

Kategorie — specifika

  • SEO texty na Taxon (6 jazyků × 6 polí) → rozšíření TaxonTranslation
  • Custom slug strategie (krátký alias vs. plná cesta)
  • gpc (Google Product Category) → custom atribut na Taxon
  • Nested set import 1600 kategorií — jednorázovým přímým zápisem lft/rgt, ne průběžným přepočtem

XML feedy

Celá vrstva class.zbozi.php, class.heureka.php, class.google.php, class.facebook.php je pevně napojená na eshop_produkty — po migraci musí číst ze Sylius. Přepsat, ne portovat.


Odhad hodin

Oblast Hodiny
Fáze 0 — Architektura, rozhodnutí, PoC 60–100 h
Sylius základ (channels, locales, produktový model) 60–100 h
Kategorie (1600, nested sets, SEO pole, slug) 50–90 h
Import framework + cenová pipeline 60–120 h
14 importérů — složitější (Pohoda, Pelikán, Astra, Corfix, Modelimex) 120–200 h
14 importérů — jednodušší (Eduard, MPM, Conquest, Proxxon, Hacker, SH, Cherks, JKM) 80–140 h
Pohoda integrace celkem (import full+diff + export + CENOVE-AKCE) 120–200 h
Checkout speciality (RP/PHE, watchdog, dotaz, odhad data, narozeniny, cena na dotaz) 100–180 h
Akce + kupóny + vouchery (předtištěné, PNG, scheduler) 60–120 h
Zákazníci (migrace, hesla, GDPR pole, skupiny) 30–60 h
Admin — formulář produktu + ostatní customizace 40–80 h
CMS obsah (Bitbag + customizace) 20–50 h
Frontend šablony (Twig, per-locale) 50–100 h
URL routing + přesměrování 20–40 h
Meilisearch + indexovací pipeline 20–40 h
XML feedy (přepsat) 30–60 h
Datová migrace (produkty 150K, kategorie, zákazníci) 50–100 h
Historické objednávky (závisí na rozhodnutí) 0–100 h
Testování, performance, cutover 50–100 h
Varianta Hodiny
Optimistická — zkušený Sylius tým, vše jde hladce 900–1 200 h
Realistická — standardní odchylky, pár surprises v importech 1 200–1 600 h
Se skrytými výjimkami v importech nebo Pohodě 1 600–2 000 h

Co může přidat hodiny nečekaně

Toto jsou konkrétní místa, kde je v dokumentaci viditelná skrytá logika:

Cherks: pole ean obsahuje kód, ne skutečný EAN — importér to ví a prohodí pole. Nová implementace musí totéž.

Conquest: pole od je nastaveno na MPM (bug ve starém importu). Rozhodnout při návrhu, jak to bude v novém.

Corfix + Modelimex — InStock logika: pokud je produkt na SZLAT+KOM, cena z dodavatele se NEaplikuje. Explicitní podmínka, která se snadno přehlédne.

Pohoda KOM sklad: zpracovává se jako poslední a přičítá k SZLAT. Pořadí zpracování záleží.

GLS/DPD výdejní místa: aktuální kód má dva bugy kde $point je null — exportují se prázdné adresy. V Syliusu fix přes custom field na Shipment; zároveň příležitost to konečně udělat správně.

Globální akce — kod LIKE 'FOX%': produkty s kódem začínajícím FOX jsou vždy přeskočeny. Custom eligibility checker musí pokrýt.

Automatická akce pro nový produkt: při aktivní globální akci musí importovaný produkt okamžitě dostat slevu — event handler, ne čekat na noční cron.

Nested set import: 1600 kategorií nelze vkládat jednu po druhé (O(n²) přepočet). Vložit přes přímý SQL s předpočítanými lft/rgt hodnotami.

menu_cz2sk: naznačuje, že CZ a SK kategoriový strom mohou mít odlišnou strukturu. Ověřit před migrací.


Reference do dokumentace

Oblast Dokument
Přehled e-shopu, URL, ceny eshop-prehled
Všechny importy importy/
Cenotvorba a akce cenotvorba/
Produktový model produktovy-model/
Kategorie kategorie/
Zákazníci zakaznici/
Objednávky + Pohoda export objednavky/
Kupóny a vouchery kupony/
Sylius analýza (platforma) analyza.md
Checkout speciality checkout-speciality.md
Admin srovnání admin-srovnani.md