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.

Reacties
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?
Normaal gezien zou het ook
Normaal gezien zou het ook moeten werken als je die kopieert naar de template die jij gebruikt?
Welke module bedoel je juist?
Bij sommige staat er bovenaan in het bestand extra uitleg bij, bv voor Simplenews dien je de "Nieuwsbrief ID" mee op te geven.
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 ...
Eigen template bestand voor module
node.tpl.php behoord eigenlijk toe aan het systeem zelf.
Indien je voor jouw module een eigen template bestand wilt aanmaken zal je dit moeten toevoegen aan jouw module code met de theme() functie.
Hiervoor kan je altijd een bestaande module bekijken die een template bestand levert en hiervoor de code bekijken.
Voorbeeldje
function jouwmodule_theme() {
return array(
'jouwmodule_theme_form' => array(
'arguments' => array('form' => NULL),
'template' => 'naam_template_bestand',
),
);
}
Ik heb dit zonet geprobeerd,
Ik heb dit zonet geprobeerd, maar dat lijkt niet te lukken hoor ... Hij pikt mijn template bestand niet op
Drupal API
Jochen, dit was maar een voorbeeld tekst.
Hoe je dit juist implementeert kan je beter nakijken op de Drupal API
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
http://drupal.org/node/17565
http://drupal.org/node/17565
<<
To theme individual content types in different ways, you need to create a file node-[type].tpl.php in your theme's folder, where [type] is the machine readable name of the content type
>>
Module of template
node-[type].tpl is een template bestand bedoeld voor inhoudstypes die je binnen Drupal hebt aangemaakt.
Indien je met jouw module een nieuw inhoudstype hebt aangemaakt kan je dit inderdaad zo aanspreken in je template.
Maar met je eigen geschreven module kan je ook een template bestand voorzien dat je plaatst in je module map, dit dien je dan op te geven in de je module code.
Dit template bestand kan je dan weer overschrijven door het te plaatsen in jouw template map.
Voor gebruik van template bestanden binnen een module kan je bestaande modules zoals search of custom modules zoals webform bekijken, daar zal je zien dat men dit eerst opgeeft in de module code.
Leuk staaltje troubleshooting
Leuk staaltje troubleshooting. Fijn dat Drupal zo flexibel is.