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}


{/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: 

Reklama

Komentáře

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

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í. :-)

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