Drupal a šablona stránky jen pro určité adresy

Tvoříte-li témata vzhledu pro Drupal, jistě dobře znáte tzv. theme suggestions. Drupal má propracovaný systém výběru šablon, které hledá u modulů a v tématech vzhledu, než některou z nich použije. Co ale v momentě, kdy chcete používat šablonu stránky jen na základě segmentu v URL adrese?

Reklama

Pro osvěžení: template suggestions umožňují vám, jako tvůrci témat vzhledu říci, že když máte v tématu vzhledu šablonu page.tpl.php, tedy kostru stránky, že u konkrétního uzlu použijete jinou její podobu. Stačí její soubor zduplikovat a pojmenovat například na page–node–1.tpl.php. V tom případě v momentě, kdy se načte stránka na adrese node/1, respektive její aliasová podoba, tak se Drupal podívá, zda existuje šablona page–node–1.tpl.php. Pokud ano, tak ji použije, jinak sáhne po běžné page.tpl.php v tématu vzhledu případně u modulu system.

Podobným způsobem můžete upravit šablony pro jednotlivé obsahové uzly, pro konkrétní bloky nebo bloky v určitém regionu a podobně.

Nedávno jsem řešil potřebu mít jinou šablonu stránky na základě toho, jaká je momentálně zobrazená URL adresa. Nebylo možné se řídit ani typem obsahu, ani kategoriemi ani ničím dalším, systematickým, co by umožnilo aplikaci pravidel theme suggestion zmíněných v dokumentaci.

Když není pravidlo, napište si vlastní

Z toho důvodu jsem musel napsat vlastní pravidlo, které Drupalu řekne, že pokud je zobrazena určitá adresa na webu, má použít další theme suggestion s nějakou šablonou. Není to nic složitého, stačí doplnit pár řádků do souboru template.php v tématu vzhledu.

Řekněme, že na webu máte různé stránky, ale také takové, které jsou na adresách:

  • /firma
  • /firma/kontakty
  • /firma/zamestnanci
  • /firma/hospodareni

A potřebujete pokaždé, když je v URL adrese firma nebo firma/*, zobrazit jinou kostru stránky. Vyhledejte funkci téma_preprocess_page() a buď do něj doplňte řádky z funkce ukázané níže, nebo ji vytvořte celou. Přejmenujte ji samozřejmě podle svého tématu vzhledu.

function tema_preprocess_page(&$vars) {

if (drupal_match_path(drupal_get_path_alias(), 'firma/*') || drupal_match_path(drupal_get_path_alias(), 'firma')) { $vars['theme_hook_suggestions'][] = 'page__firma'; }
}

Poté, co doplníte tuto úpravu, překopírujte page.tpl.php na page–firma.tpl.php a upravte dle potřeby. Nezapomeňte vymazat cache Drupalu, aby se změna v template.php i doplnění nové šablony projevily.

Užitečná funkce drupal_match_path() slouží pro rozpoznání segmentu v URL adrese. Pokud podmínka vyhodnotí, že se v ní nachází, co potřebujete, tak jen přidá další theme suggestion do proměnných pro vykreslování stránky. V závislosti na tom, jak jsem novou sugesci pojmenovali, je třeba vytvořit i odpovídajícím způsobem pojmenovanou šablonu.

Tagy: 

Reklama

Přidat komentář