LydiaCMS tvoří 13 provozních Composer balíčků včetně jádra a tři vývojářské nástroje. Kromě jádra přidává každý balíček jednu schopnost a instaluje se samostatně.
Balíčky
- core — spuštění aplikace, DI, routování, oprávnění, překlady a základ administrace
- menu, blog, forms, attributes, currencies, location, socials, units — obsahové moduly, každý s vlastními entitami, routami a migracemi
- integration, data, api, backup — import z webových služeb, konfigurovatelný datový model s historií verzí, REST/MCP rozhraní, zálohy a obnova
- phpstan, rector, ecs — vývojářské nástroje, o kterých je řeč v části o kvalitě
Jak se balíček zapojí
- Registruje se jedním rozšířením Nette (DI): entity, routy, služby a migrace mají svůj vlastní balíček.
- Každý balíček má verzi a idempotentní migrace. Aktualizace databáze je jeden příkaz,
lydiacms:upgrade.
Generování administrace z metadat (metadata-driven CRUD scaffolding)
Gridy a formuláře vznikají z metadat Doctrine entit (přes 100 entit). Vlastní šablona se píše jen tam, kde data nejsou plochá: strom menu, builder formulářů nebo varianty sociálních sítí. Drobnost typu nápověda nebo placeholder se řeší atributem u pole.
Vícejazyčnost a SEO v datovém modelu
Každý záznam existuje v jazykových variantách (dnes CS, EN, DE, FR, ES a SK) a každá varianta je samostatný záznam v databázi. Přidání dalšího jazyka proto nevyžaduje žádnou změnu kódu. SEO údaje (titulek, popis, obrázek a slug) se nastavují zvlášť pro každý záznam a jazyk.
Adresy stránek se ukládají v databázi včetně celé cesty přes předky. Tato stránka například žije na /projekty/lydiacms/architektura. Zkrácená adresa bez předků se trvale přesměruje (301) na úplnou cestu. Když změním slug stránky, stará adresa se přesměruje na novou.
Oprávnění dědí po stromě kontextů
Kontexty tvoří strom (systém → frontend, admin, API → balíček → submodul → záznam) a každý je zdrojem ACL. Výchozí pravidlo se nastavuje jen jednou pro celý jmenný prostor (administrace a API jsou zavřené, frontend otevřený) a vše pod ním dědí. Nový submodul ani záznam proto nepotřebuje vlastní pravidla. Pravidlo u balíčku platí pro všechny jeho submoduly a pravidlo u submodulu, povolující i zakazující, ho přebije.
- Vstup do administrace se odvozuje z pravidel. Kdo smí v administraci cokoli zobrazit, dostane se do ní. Žádný další přepínač neexistuje.
- Strop oprávnění. Nikdo nemůže povolit ani přidělit víc, než sám má, takže si nikdo nezvýší vlastní práva.
- Předvolba pro obsahovou práci jedním kliknutím doplní pravidla pro stránky, blog, menu a média a nikdy nedává mazání, export, nastavení ani správu uživatelů a rolí. Výsledek jsou obyčejná pravidla, která lze v matici dál upravit.
Oprávnění (zobrazit, vytvořit, upravit, smazat, změnit stav, exportovat) má rozsah admin, frontend nebo API a může být omezena na kontexty vzorem s wildcardy, například api.core.**. Stejné ACL platí pro administraci i pro rozhraní pro AI.
Média a cron úlohy v administraci
Mediální knihovna u každého souboru ukazuje, kde se používá, takže je vidět, co smazání rozbije. Cron úlohy mají vlastní záznam každého běhu s výsledkem a časem dalšího spuštění.