LydiaCMS tvorí 13 produkčných Composer balíčkov vrátane jadra a tri vývojárske nástroje. Okrem jadra pridáva každý balíček jednu schopnosť a inštaluje sa samostatne.
Balíčky
- core — spustenie aplikácie, DI, smerovanie, oprávnenia, preklady a základ administrácie
- menu, blog, forms, attributes, currencies, location, socials, units — obsahové moduly, každý s vlastnými entitami, routami a migráciami
- integration, data, api, backup — import z webových služieb, konfigurovateľný dátový model s históriou verzií, REST/MCP rozhranie, zálohy a obnova
- phpstan, rector, ecs — vývojárske nástroje, o ktorých je reč v časti o kvalite
Ako sa balíček zapojí
- Registruje sa jedným rozšírením Nette (DI): entity, routy, služby a migrácie majú svoj vlastný balíček.
- Každý balíček má verziu a idempotentné migrácie. Aktualizácia databázy je jeden príkaz,
lydiacms:upgrade.
Generovanie administrácie z metadát (metadata-driven CRUD scaffolding)
Gridy a formuláre vznikajú z metadát Doctrine entít (cez 100 entít). Vlastná šablóna sa píše len tam, kde dáta nie sú ploché: strom menu, builder formulárov alebo varianty sociálnych sietí. Drobnosť typu nápoveda alebo placeholder sa rieši atribútom pri poli.
Viacjazyčnosť a SEO v dátovom modeli
Každý záznam existuje v jazykových variantoch (dnes CS, EN, DE, FR, ES a SK) a každý variant je samostatný záznam v databáze. Pridanie ďalšieho jazyka preto nevyžaduje žiadnu zmenu kódu. SEO údaje (titulok, popis, obrázok a slug) sa nastavujú zvlášť pre každý záznam a jazyk.
Adresy stránok sa ukladajú v databáze vrátane celej cesty cez predkov. Táto stránka napríklad žije na /projekty/lydiacms/architektura. Skrátená adresa bez predkov sa trvalo presmeruje (301) na úplnú cestu. Keď zmením slug stránky, stará adresa sa presmeruje na novú.
Oprávnenia dedia po strome kontextov
Kontexty tvoria strom (systém → frontend, admin, API → balíček → submodul → záznam) a každý je zdrojom ACL. Predvolené pravidlo sa nastavuje len raz pre celý menný priestor (administrácia a API sú zatvorené, frontend otvorený) a všetko pod ním dedí. Nový submodul ani záznam preto nepotrebuje vlastné pravidlá. Pravidlo pri balíčku platí pre všetky jeho submoduly a pravidlo pri submoduli, povoľujúce aj zakazujúce, ho prebije.
- Vstup do administrácie sa odvodzuje z pravidiel. Kto smie v administrácii čokoľvek zobraziť, dostane sa do nej. Žiadny ďalší prepínač neexistuje.
- Strop oprávnení. Nikto nemôže povoliť ani prideliť viac, než má sám, takže si nikto nezvýši vlastné práva.
- Predvoľba pre obsahovú prácu jedným kliknutím doplní pravidlá pre stránky, blog, menu a médiá a nikdy nedáva mazanie, export, nastavenia ani správu používateľov a rolí. Výsledkom sú obyčajné pravidlá, ktoré sa dajú v matici ďalej upravovať.
Oprávnenie (zobraziť, vytvoriť, upraviť, zmazať, zmeniť stav, exportovať) má rozsah admin, frontend alebo API a môže byť obmedzené na kontexty vzorom s wildcardmi, napríklad api.core.**. Rovnaké ACL platí pre administráciu aj pre rozhranie pre AI.
Médiá a cron úlohy v administrácii
Mediálna knižnica pri každom súbore ukazuje, kde sa používa, takže je vidieť, čo jeho zmazanie rozbije. Cron úlohy majú vlastný záznam každého behu s výsledkom a časom ďalšieho spustenia.