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.
reklama

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
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

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ář

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
Nové diskuze
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

Co píší na Interval.cz
@maxiorel na Twitteru

Maxiorel na Twitteru