Drupal template bestanden per node-type of region afhankelijk

Bij de meeste Drupal templates heb je standaard een page.tpl.php,  block.tpl.php en node.tpl.php.

  • De page.tpl.php bevat de volledige pagina opmaak, inclusief al je regions en andere structuur voor je website. 
  • Node.tpl.php bevat bv de code hoe je inhoud moet getoond worden. (<?php print $content; ?>)
  • En block.tpl.php bevat de opmaak voor blokken.

Deze bestanden worden voor alle node-types gebruikt die geen eigen template (tpl) bestand hebben gekregen.
Dit is natuurlijk heel handig aangezien je iets wilt wijzigen dat dit dadelijk overal van toepassing is, maar af en toe wens je voor een bepaald node  type wel een andere opmaak te hebben, dit kan je dan doen door je eigen template bestanden toe te voegen.

Je kan eigen template bestanden gebruiken afhankelijk van het node type, de node ID of voor blokken ook de region waar ze in voorkomen. Bij heel wat modules word er een template bestand bijgeleverd, indien je dit wenst aan te passen, doe dit dan nooit in de module map zelf. Bij een volgende update zouden anders al je aanpassingen verwijderd worden, kopieer dit template bestand naar je eigen template en pas het daar aan. Op deze manier kan je je eigen template volledig naar je eigen wensen afstellen, Drupal levert standaard ook heel wat van deze template (tpl) bestanden mee. Neem maar eens een kijkje in de modules map die in de root van je Drupal installatie staat. Je zal tpl bestanden terug vinden voor node, block, comment, search,  book, ...

Hieronder volgen enkele mogelijke situaties waar je een template bestand voor kan en wilt aanpassen:
Let wel van zodra je extra template bestanden toevoegt zullen deze nog niet opgepikt worden door Drupal, je dient dit eerst te laten toevoegen, dit kan je doen door naar de templates pagina te gaan en onderaan deze pagina nog eens op "Instellingen opslaan" te drukken. Je hoeft hier niets te wijzigen maar van zodra je dit doet zal Drupal zijn theme registry terug opbouwen.

  • Block.tpl.php
    Indien je de opmaak voor blokken in een bepaalde region wenst te wijzigen kan je dit als volgt doen:
    Kopieer block.tpl.php uit je template map (of indien het daar nog niet tussen staat uit de Drupal modules map) en hernoem het als volgt
    block-[region].tpl.php
    bv: block-left.tpl.php

    Wens je de opmaak van het blok enkel maar te wijzigen voor 1 enkel blok kan je dit doen door gebruik te maken van de module naam of als het om een blok gaat dan je zelf hebt aangemaakt  het blok ID te gebruiken:
    Blok voor module: block-user.tpl.php

    Bestand voor eigen aangemaakt blok: block-block-2.tpl.php (De ID van het blok kan je terug vinden in de URL wanneer je het gewenste blok bewerkt op het blokken-overzicht)
  • Page.tpl.php
    Indien je de volledige structuur van je website wenst te wijzigen afhankelijk van het node type kan je dit als volgt doen:
    Kopieer page.tpl.php uit je template map en hernoem het als volgt:
    page-[node-type].tpl.php
    bv: page-webform.tpl.php

    Wens je de structuur enkel te wijzigen voor 1 bepaalde node ID kan je dit template bestand zo noemen:
    page-node-[Node ID].tpl.php
    bv: page-node-3.tpl.php

    Indien je een aparte startpagina (frontpage) wilt maken voor je website kan je het bestand als volgt noemen:
    page-front.tpl.php
  • Node.tpl.php
    Kopieer node.tpl.php uit je template map en hernoem het als volgt:
    Indien je de node.tpl wenst te wijzigen voor types:
    node-[Node type].tpl.php
    bv: node-story.tpl.php

Zoals je kan zien kan is er heel wat mogelijk om je template naar je eigen wensen te configureren.

Labels: 

Reacties

#156

Mooi artikel. Enig idee hoe

Mooi artikel. Enig idee hoe je je "node-[Node type].tpl.php" file gebruikt die niet in de "theme" folder zit, maar bv in een contrib module. Tot zo ver ik weet lukt dat niet?

#166

Ik was eigenlijk mis in mijn

Ik was eigenlijk mis in mijn verwoording: ik wou de node-.tpl.php plaatsen in een custom module. Dus als ik mijn node-.tpl.php in de eigen module plaats, pikt mijn theme ze niet op ...

#172

Daar heb ik al gekeken, voor

Daar heb ik al gekeken, voor ik mijn eerste reactie plaatste :-). Volgens mij is het echt niet mogelijk hoor :-).

Je moet volgens mij je node-##content_type##.tpl.php bestand in je theme zetten, volgens mij kan je dat niet in je custom module plaatsen