Přetěžování šablon

Systém přetěžování šablon umožňuje rozšířit stávající šablonu o nový obsah nebo upravit její existující části. Tzv. „extend theme“ může přetěžovat a rozšiřovat šablony nadřazeného (parent) tématu, což umožňuje modulární přizpůsobení a jednodušší správu celého systému.

ℹ️

Pro zapnutí funkce přetěžování šablon nás prosím kontaktujte na developers@rocketoomax.cz.

Jak to funguje

Základní koncepty

  • Parent Theme - aktivní theme, který používá extend_theme (např. uran)
  • Extend Theme - theme s extend_theme: true v theme.yaml, který přetěžuje parent theme (např. uran_ext)
  • Template Override - automatické přetěžování šablon z parent theme šablonami z extend theme

Architektura systému

Parent Theme (uran) - aktivní theme
├── partials/product.htm ✓ (základní verze)
└── customize.yaml (extend_theme: ardea)
        ↓
Extend Theme (uran_ext) - rozšiřující theme  
├── partials/product.htm ✓ (PŘETĚŽUJE verzi z uran)
└── theme.yaml (extend_theme: true)

Výsledek: Načte se product.htm z uran_ext theme

Konfigurace

1. Nastavení Extend Theme

V souboru themes/uran_ext/theme.yaml:
name: 'Uran - rošíření'
description: 'Rozšiřující theme pro Uran'
extend_theme: true

2. Nastavení Parent Theme

V souboru themes/uran/theme.yaml:
name: 'Uran'
...
is_extendable: true

V administraci theme uran → záložka "Rozšíření šablony":

Rozšiřující šablona: Uran - rošíření

3. Aktivace Template Cache (volitelné)

V config/app.php:
'template_cache_minutes' => 60, // Cache na 60 minut (pro produkci)
'template_cache_minutes' => 0,  // Vypnutá cache (pro vývoj)

Typy podporovaných šablon

1. Theme partials

{# Extend theme přetěžuje partials parent theme #}
{% partial 'product-detail' %}
{% partial 'category-sidebar' %}

2. Component partials

{# Regular komponenty #}
{% partial 'productList::default' %}
{% partial 'categoryFilter::sidebar' %}

3. PageItem komponenty

{# PageItem komponenty (začínají __) #}
{% partial '__pageItem__myComponent::template' %}

Příklady použití

Přetěžování produktové stránky

  1. V parent theme uran/partials/ existuje product-detail.htm:
<div class="product-basic">
    <h2>Základní produktový detail</h2>
    <div class="product-info">{{ product.title }}</div>
</div>

  1. V extend theme uran_ext/partials/ vytvořte product-detail.htm:
<div class="product-enhanced">
    <h2>Rozšířený produktový detail</h2>
    <div class="product-info">{{ product.title }}</div>
    <div class="product-gallery">{% partial 'product-gallery' %}</div>
    <div class="product-specs">{% partial 'product-specifications' %}</div>
</div>

  1. V parent theme uran při volání:
{% partial 'product-detail' %}
{# Načte se ROZŠÍŘENÁ verze z uran_ext theme #}

Přidání nových partials

Extend theme může přidat nové partials, které parent theme neobsahuje:
  1. V themes/uran_ext/partials/ vytvořte product-reviews.htm
  2. V parent theme uran můžete nový partial použít:
{% partial 'product-reviews' %}
{# Načte se z uran_ext theme #}

Bezpečnost

Validace

  • Kontrola existence extend theme
  • Ochrana proti nastavení extend theme jako aktivní theme
  • Validace cyklických závislostí

Nejčastější problémy

1. Partial se nenačítá z extend theme

Řešení:
  • Zkontrolujte nastavení extend_theme v customize.yaml
  • Ověřte extend_theme: true v theme.yaml extend theme
  • Zkontrolujte cestu k partial souboru

2. Cache problémy

Řešení: Vymažte cache pomoci widgetu Mazaní cache na nástěnce v administraci e-shopu.