Drupal: jak vložit blok mezi článek a komentáře

Častým dotazem tvůrců webů na Drupalu je možnost vložení nějakého regionu pro bloky do části mezi konec článku a komentáře. Jinými slovy pod obsah. Takový požadavek nelze realizovat jednoduše přidáním nového regionu do šablony, chce to několik dalších úprav navíc.

Omlouvám se všem méně zkušeným Drupalistům, že v krátké době publikuji dva možná trochu odbornější články o Drupalu, ale podle reakcí má spousta z vás o tato témata zájem. Vytváření nových regionů pro bloky je dostatečně popsáno v online dokumentaci na drupal.org i v mých dvou knihách o Drupalu. Viz upoutávky na boku webu.

Vložení nového regionu pro bloky je v podstatě velmi jednoduché. Stačí dopsat jeho název do soubor *.info v tématu vzhledu a pak stejný název doplněný znakem $ na začátku použít pro vypsání regionu na příslušném místě v souboru page.tpl.php.

Problém nastává v momentě, kdy chcete vložit nějaký region do obsahové části specifikované v souboru node.tpl.php, tedy v šabloně definující zobrazení uzlu. Drupal standardně reaguje pouze na regiony v hlavní šabloně page.tpl.php. Jak z problému ven?

Nový region v node.tpl.php

Nejprve si tedy upravte soubor *.info a přidejte do něj nový záznam pro region. Pokud v něm definici regionů nemáte, znamená to, že Drupal používá výchozí regiony, viz jejich specifikace. V momentě, kdy chcete přidat další region do tématu, které doposud používalo jen výchozí regiony, musíte je již specifikovat a dále k nim přidat záznam nového regionu, například:

regions[ubercomments] = Nad komentáři

Pozor, soubor *.info musí být uložen stejně jako jiné soubory v UTF-8, jinak vám téma vzhledu přestane kvůli diakritice fungovat.

Otevřete si soubor node.tpl.php a vložte do něj tento kód:

{syntaxhighlighter brush:php} <?php if ($ubercomments) { ?>
<?php print $ubercomments; ?>
<?php }; ?> {/syntaxhighlighter}

Kód umístěte na požadované místo, třeba nad výpis $links a $terms. Podmínka určuje, že se nejprve zjistí, zda je nějaký blok určen pro zobrazení v regionu na aktuální adrese. Pokud ano, pak se vypíše DIV, samotný region a uzavření DIVu. Celé to můžete spáchat i bez podmínky a DIVů, tedy jen s print $ubercomments, ale kvůli jednoduššímu stylování doporučuji právě kombinaci s DIVem.

Další nezbytné úpravy pro blok v obsahu

Kdybyste tímto způsobem vložili nový region do kostry stránky v page.tpl.php, pak už stačí jen resetovat téma vzhledu a jste hotovi. V případě, že nový region vkládáme do node.tpl.php, jsou potřeba ještě další úpravy. Otevřete si soubor template.php (pokud nemáte, vytvořte) ve složce s tématem vzhledu a doplňte do něj tuto funkci:

{syntaxhighlighter brush:php} function NAZEVTEMATU_preprocess_node(&$variables, $hook) { $variables['ubercomments'] = theme('blocks', 'ubercomments'); } {/syntaxhighlighter}

NAZEVTEMATU přejmenujte podle použitého tématu vzhledu a soubor uložte. Téma vzhledu nyní resetujte (zapnout a vypnout, nebo pomocí funkce modulu Administration Menu Flush all caches > Theme registry) a do regionu ve správě bloků umístěte nějaký blok.

V praxi můžete tuto úpravu vidět třeba zde na Maxiorlovi, kdy je do takto vytvořeného regionu vložen blok s odkazy na související články.

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

návštěvník

Určitě se bude hodit.

Zajímalo by mně jakým modulem jsou zobrazované ty souvísející články. Díky za odpověd

návštěvník

A pokud si to pořádně nepřečtete jako já. A vaše téma používá výchozí regiony.

A nadefinujete si pouze ten nový a né ty staré tak vám ty staré zmizí :-) A celé se to rozhodí. :-)

návštěvník

Dobry den, skusal som si vytvorit novy region, avsak zakazdym mi vyhodi chybu:

Notice: Undefined variable: priklad v include() (riadok 16 z /home/.../page.tpl.php).

Nech ten kod ulozim kdekolvek, najlepsie na zaciatok, php neovladam, ale zak tagy hej. Tak vem ze kod nevlkadam niekde kde nemam. dakujem

 

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

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