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 (
maximumQuantityna 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.
Meilisearch — monsieurbiz/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%') → customPromotionEligibilityChecker - 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 |