Architektura

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.

Položky menu v administraci LydiaCMS
Položky menu: formulář položky s vazbou na submodul, záznam a rodiče a pod ním seznam, který se řadí přetažením.
Builder formuláře v administraci LydiaCMS
Builder formuláře: položky formuláře (název, typ, povinné, jazykové popisky) a záložka s odpověďmi.

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.

SEO záložka záznamu s jazykovými verzemi
SEO záložka záznamu: společné vlastnosti a jazykové verze (název, popis, titulek drobečkové navigace, slug) v samostatných záložkách.

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.

Matice práv role Administrátor v administraci LydiaCMS
Matice práv role Administrátor. Plná zelená znamená povoleno přímo, obrysová zděděno z nadřazeného kontextu (u blogu a menu se pravidlo na balíčku projeví i na jeho submodulu).
  • 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í.

Mediální knihovna v administraci LydiaCMS
Mediální knihovna: nahrávání, filtr podle typu a u každého souboru seznam záznamů, ve kterých je použitý.
Cron úlohy v administraci LydiaCMS
Cron úlohy: rozvrh, poslední a příští spuštění a log posledních běhů.

← LydiaCMS