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?

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

Buďme ve spojení, přihlaste se k newsletteru

Odesláním formuláře souhlasíte s podmínkami zpracováním osobních údajů. 
Více informací v Ochrana osobních údajů.

Autor článku: Jan Polzer

Tvůrce webů z Brna se specializací na Drupal, WordPress a Symfony. Acquia Certified Developer & Site Builder. Autor několika knih o Drupalu.
Web Development Director v Lesensky.cz. Ve volných chvílích podnikám výlety na souši i po vodě. Více se dozvíte na polzer.cz a mém LinkedIn profilu.

Komentáře k článku

Přidat komentář

Odesláním komentáře souhlasíte s podmínkami Ochrany osobních údajů

reklama
Moje kniha o CMS Drupal

 

Kniha 333 tipů a triků pro Drupal 9


Více na KnihyPolzer.cz

Sledujte Maxiorla na Facebooku

Maxiorel na Facebooku

Hosting pro Drupal a WordPress

Hledáte český webhosting vhodný nejenom pro redakční systém Drupal? Tak vyzkoušejte Webhosting C4 za 1200 Kč na rok s doménou v ceně, 20 GB prostoru a automatické navyšováním o 2 GB každý rok. Podrobnosti zde.

@maxiorel na Twitteru

Maxiorel na Twitteru