Proč vytvářet vlastní šablony a moduly v CMS
Vlastní šablony a moduly umožňují přizpůsobit CMS (WordPress, Drupal, Joomla) konkrétním potřebám bez kompromisů v použitelnosti, výkonu a bezpečnosti. Správný přístup spočívá v dodržování architektonických principů platformy (hooky, události, hierarchie šablon), zachování možnosti aktualizovat jádro a rozšíření a současném vytváření opakovaně použitelných komponent.
Architektonické rozdíly mezi WordPress, Drupalem a Joomlou
| Oblast | WordPress | Drupal | Joomla |
|---|---|---|---|
| Model šablon | Hierarchie šablon, soubory php s get_template_part() |
Šablony Twig, theme hooky, .html.twig |
Override layoutů v templates/, JLayout |
| Rozšíření | Pluginy (hooky, akce, filtry) | Moduly (vlastní modul), pluginy (v Drupalu „module“), služby a routy | Rozšíření: komponenty, moduly, pluginy |
| Konfigurace | functions.php, Customizer, theme.json |
Správa konfigurace, YAML (info.yml, routing.yml) |
Manifest templateDetails.xml a manifest.xml u rozšíření |
| Datový model | Typy příspěvků, taxonomie, metadata | Entity/pole/balíčky, Views | Články, K2 (rozšíření), kategorie, vlastní tabulky |
Zásady tvorby šablon napříč platformami
- Oddělení logiky od prezentace: v šablonách používejte minimum PHP; ve WordPressu využívejte krátké helpery, v Drupalu předávejte data přes preprocess, v Joomle pracujte s override layouty.
- Komponentový přístup: vytvářejte opakovaně použitelné dílčí šablony (např.
content-card,media,pagination). - Bezpečnost: důsledně escapujte výstupy (
esc_html(),{{ variable|escape }},JHtml::_()) a používejte nonce/CSRF tokeny ve formulářích. - Přístupnost (a11y): sémantické HTML, atributy role, dostatečný kontrast, stavy focus a přehledné pořadí prvků v DOM.
- Výkon: kritické CSS v hlavičce, líné načítání médií, správná práce s cache a assety.
WordPress: tvorba šablony a child theme
- Struktura: minimálně
style.css(hlavička s metadaty),index.php, případněfunctions.phpatheme.jsonpro nastavení editoru bloků. - Hierarchie šablon: specifické soubory pro typy obsahu (
single-{post_type}.php), taxonomie (taxonomy-{taxonomy}.php), stránkování (archive.php), stránku 404 atd. - Child theme: použijte pro úpravy šablony třetí strany. V
style.cssnastavteTemplate:na nadřazenou šablonu; vfunctions.phpsprávně zařaďte do fronty styl nadřazené šablony. - Blokový editor (Gutenberg): definujte barevné palety, rozestupy a typografii v
theme.json; vlastní bloky publikujte jako plugin (odděleně od šablony). - Hooky: používejte filtry a akce (např.
pre_get_posts,the_content) k úpravě chování bez zásahů do jádra.
WordPress: tvorba pluginu (modulu)
- Bootstrap: soubor s hlavičkou pluginu, registrace autoloaderu (PSR-4),
register_activation_hook(),register_deactivation_hook(). - CPT a taxonomie: registrujte pomocí
register_post_type()aregister_taxonomy(); dbejte na schéma REST API. - Bezpečnost: nonce ve formulářích (
wp_verify_nonce), oprávnění (current_user_can), escapování výstupů. - Internacionalizace:
__(),_e(), text domain a soubory.pot. - Nastavení:
Settings API, vlastní stránky v administraci, sanitizace vstupů.
Drupal: tvorba tématu (theme)
- Manifest: soubor
THEME_NAME.info.ymls knihovnami, regiony a závislostmi; assety deklarujte v.libraries.yml. - Šablony: soubory
.html.twig(např.node.html.twig,page.html.twig) s filtry Twig a bezpečným escapováním. - Preprocess: v souboru
.themepřidejte preprocess hooky (hook_preprocess_node()) pro přípravu proměnných do šablon. - Regiony a bloky: definujte regiony v tématu; bloky umisťujte pomocí uživatelského rozhraní nebo synchronizace konfigurace.
- Podtéma: dědění od základního tématu (např. Stable, Classy) pro rychlý začátek.
Drupal: tvorba modulu
- Struktura:
MODULE_NAME.info.yml,MODULE_NAME.routing.yml,MODULE_NAME.permissions.yml, kontrolery vsrc/Controller, služby vMODULE_NAME.services.yml. - Hooky a události: implementace
hook_form_alter(),hook_entity_view(), odběratel událostí pro události Symfony. - Entity a pole: definujte vlastní entity nebo rozšiřte existující; respektujte metadata cache (
#cache– kontexty, tagy, maximální stáří). - Bezpečnost: Access Control Handlers, kontrola oprávnění v routách (
_permission), CSRF tokeny ve formulářích. - Konfigurace: Configuration API, config schema pro validaci a export/import.
Joomla: tvorba šablony a override
- Struktura: adresář
templates/THEME/se souboryindex.php,templateDetails.xml, adresářicss/jsa jazykovými soubory. - Override layoutu: kopírujte soubory view rozšíření do
templates/THEME/html/com_component/view/a upravujte je bez zásahu do rozšíření. - Pozice modulů: definujte je v
templateDetails.xmla používejte v layoutu; mapujte je na modulární obsah. - JLayout: vytvářejte opakovaně použitelné layouty v
layouts/a vkládejte je pomocíJLayoutHelper::render(). - Joomla 4/5: využijte moderní Web Asset Manager pro registraci a správu závislostí JS/CSS.
Joomla: vlastní modul/komponenta
- Modul: jednoduchý výstup tvořený souborem
mod_modulename.php, třídou helper a layoutem; konfigurace vmod_modulename.xml. - Komponenta (MVC): modely, view a controllery; směrování přes
router.php, ACL přesaccess.xml. - Plugin: reakce na systémové události (např.
onContentPrepare), konfigurace v XML, priorita zásahů.
Styly, designový systém a práce s assety
- Designové tokeny: barvy, typografii, rozestupy a stavy komponent definujte centrálně (JSON/YAML) a generujte je do proměnných CSS.
- Build pipeline: Vite/webpack pro bundling, Autoprefixer, moderní moduly; ve WordPressu respektujte
wp_enqueue_*(), v Drupalulibraries.yml, v Joomle Web Asset Manager. - Critical CSS a defer pro nepotřebné skripty; líné načítání obrázků a iframe prvků.
Vícejazyčná podpora (i18n) a lokalizace
- WordPress: funkce
__(),_x(), text domain, generujte.pota distribuujte soubory.po/.mo. - Drupal:
t()a překlady konfiguračních entit; Translation UI / Locale. - Joomla: jazykové soubory INI v
language/,Text::_()v kódu.
Bezpečnostní zásady pro šablony a moduly
- Escapování: ve WordPressu
esc_html(),esc_attr(), v Drupalu Twig escapuje ve výchozím nastavení, v Joomlehtmlspecialcharsa helpery. - Nonce/CSRF:
wp_nonce_field(), v Drupalu tokeny formulářového API, v JoomleJSession::checkToken(). - Validace vstupů: sanitizace, typové kontroly, filtry; žádné přímé SQL (používejte ORM/DB API).
- Oprávnění: capabilities ve WordPressu, oprávnění/role v Drupalu, Joomla ACL – kontrolujte před provedením akce.
Výkon a cache
- Fragmentová cache: ukládejte části šablon do cache (WordPress transients, metadata Drupal
#cache, pluginy cache v Joomle). - Stránková cache: reverzní proxy (Varnish/Nginx), CDN; zohledňujte varianty podle jazyka, role a cookies.
- Efektivita databáze: omezte počet dotazů, načítejte data po dávkách, přidávejte indexy pro vlastní tabulky.
API a integrace
- WordPress REST: registrujte vlastní endpointy (
register_rest_route), kontrolujte permission callback. - Drupal JSON:API: standardní poskytování entit; případně vlastní controllery s access policies.
- Joomla: od verze 4 REST API jádra; rozšiřte jej vlastními routami a ověřováním.
Testování, kvalita a CI/CD
- Statická analýza: PHPStan/Psalm, ESLint/Stylelint, PHPCS se standardy WordPress/Drupal/Joomla.
- Jednotkové a integrační testy: PHPUnit, v Drupalu Kernel/Functional tests, ve WordPressu testovací sada WP-CLI.
- Vizuální regrese: nástroje typu BackstopJS pro porovnání vykreslení komponent.
- CI/CD: sestavení, lintery, testy, zabalení do ZIP a nasazení; verzování šablon a modulů.
Distribuce a balení
- WordPress: šablony jako ZIP archivy theme (bez zbytečně objemných závislostí vendor), pluginy se soubory
readme.txtaassetspro repozitáře. - Drupal: moduly/témata se správnými soubory
.info.yml,.libraries.yml,composer.json; respektujte schémata konfigurace. - Joomla: instalační balíčky se souborem
manifest.xml; zachovávejte zpětnou kompatibilitu layoutů.
UX a přístupnost ve vlastních šablonách
- Sémantika: používejte hierarchii nadpisů, atributy
aria-*, popisky a texty sr-only pro čtečky obrazovky. - Ovládání klávesnicí: focus trap v modálních oknech, viditelný focus, odkazy pro přeskočení obsahu.
- Barvy a kontrast: dodržujte WCAG 2.1 AA; definujte systémové odstíny pro různé stavy (hover/active/error).
Migrace a kompatibilita
- WordPress: kompatibilita s blokovým editorem a klasickým editorem; připravte záložní styly a deklarace
theme-support. - Drupal: mapování hooků mezi verzemi, cesta upgradu konfigurací, náhrady za zastaralé API.
- Joomla: přechod z verze 3 na 4/5 (Web Asset Manager, jmenné prostory), kontrola starých událostí pluginů.
Licencování a právní aspekty
- Licence open source: respektujte licenci GPL (WordPress/Joomla) a kompatibilitu závislostí.
- Třetí strany: ověřte práva k fontům, ikonám a obrázkům; přiložte licence k balíčku.
- GDPR: minimalizujte osobní údaje v šablonách a modulech, cookie banner používejte jen tehdy, když je skutečně potřeba.
Kontrolní seznam před uvedením do provozu
- Žádné přímé úpravy jádra ani cizích rozšíření; vše řešte přes child theme/override/hooky.
- Escapování všech proměnných, ochrana formulářů pomocí nonce/CSRF.
- Optimalizované assety (minifikace, kombinování, lazy load), správná registrace v systému.
- Cache a varianty podle jazyka/role; otestujte chování při vypnuté cache.
- Pokrytí i18n, jazykové soubory a záložní varianty.
- Automatizované testy a CI pipeline; verzování a changelog.
Závěr
Tvorba vlastních šablon a modulů v CMS vyžaduje pochopení architektury konkrétní platformy, důsledné zabezpečení a disciplínu při oddělování odpovědností. Dodržováním principů komponentového návrhu, správné práce s assety, přístupnosti a testování dosáhnete řešení, která jsou výkonná, udržitelná a snadno rozšiřitelná – a zároveň plně kompatibilní s aktualizacemi jádra i ekosystému rozšíření.
