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) {
<br>  if (drupal_match_path(drupal_get_path_alias(), 'firma/*') || drupal_match_path(drupal_get_path_alias(), 'firma')) {
    $vars['theme_hook_suggestions'][] = 'page__firma';
  }
<br>}

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
Autor článku: Jan Polzer

Tvůrce webů z Brna se specializací na Drupal a Symfony. Obojí také školím spolu se základy SEO. Jsem Acquia Certified Developer a Site Builder a napsal jsem několik knih o Drupalu. Ve volných chvílích cestuji a podnikám výlety. Více se dozvíte na mém firemním webu.

reklama

Komentáře k článku

Přidat komentář

Filtered HTML

  • Povolené HTML značky: <a href hreflang> <em> <strong> <cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <p> <br>
  • Řádky a odstavce se zalomí automaticky.
  • Web page addresses and email addresses turn into links automatically.

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

reklama
Sledujte Maxiorla na Facebooku

Maxiorel na Facebooku

Poslední komentáře
reklama
reklama
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.

Knihy o Drupalu

Kniha Drupal 8 Kniha Drupal 7 333 tipů a triků pro Drupal
Více na KnihyPolzer.cz

@maxiorel na Twitteru

Maxiorel na Twitteru