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) { ?>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.
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.
Podobné články
Komentáře k článku
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
Je to děláno modulem Similar By Terms.
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
Fatal error...