Aanpassen Templates

De standaard Drupal-sjablonen (templates) kunnen eenvoudig worden aangepast zonder de originele Drupal-code te wijzigen. In de map includes staat bestand theme.inc. In de templates worden de diverse functies die in dit bestand staan (impliciet) aangeroepen. Impliciet betekent dat de aanroep niet als zodanig in de code te zien hoeft te zijn of alleen aanwezig is in de vorm: theme(‘xxx’, yyyy(), zzzz()).

Het gaat hier te ver om uit te leggen hoe Drupal dit realiseert, maar één voorbeeld waar dit wordt gebruikt is het bepalen van de opmaak van de links op een pagina. Links kunnen in dit verband een regel met de categorie-termen zijn en/of een (andere) regel met bijvoorbeeld het aantal keer dat de node is gelezen.
In Drupal versie 5 bevatten alle standaard templates, op het chameleon-template na, het bestand: node.tpl.php. Hierin staan de volgende drie regels:

<?php if ($links): ?>
<div class="links"><?php print $links; ?></div>
<?php endif; ?>


Binnen de diverse bestanden in het template wordt nergens $links gevuld. Dit wordt gedaan in de map includes\theme.inc in de functie:

function theme_links($links, $attributes = array('class' => 'links'))

 

Chameleon template

In het chameleon.template wordt de hierboven genoemde functie wel expliciet aangeroepen in de volgende regels:

if (count($links)) {
$output .= '<div class="links">'. theme('links', $links, array('class' => 'links inline')) ."</div>\n";
}


In de functie theme() wordt „theme(‘links’, …)” omgezet in een aanroep van de functie „theme_links(…)” met onderstaande parameters:

($links, array('class' => 'links inline'))

”.

De universele opzet van Drupal zorgt ervoor dat wij binnen een template de aanroep van alle „function theme_xxx()” functies in theme.inc kunnen ontvangen en afhandelen, in plaats van dat de functie in theme.inc wordt gebruikt. Hoe ? Heel simpel door de functienaam „theme_xxx” te wijzigen in „templatenaam_xxx” en dezelfde parameters te gebruiken.

Voorbeeld:

We gebruiken weer de hiervoor genoemde functie: „theme.links()”. Voor het chameleon-template voegen we onderaan in „chameleon.theme” de functie „chameleon_links()” toe als volgt:

function chameleon_links($links, $attributes = array('class' => 'links')) {
}

 

PHP templates

PHP templates werken anders dan het Garland template en zijn ook de toekomst binnen Drupal. Voor deze templates zetten we aan het einde van „node.tpl.php” de volgende regels:

<?php
function garland_links($links, $attributes = array('class' => 'links')) {
}
?>


Vervang bij de overige templates „garland” in „function garland_links” door de naam van het template.

 

Wat er vervolgens binnen de functie-haken: „{}” moet staan, kunt u zelf bepalen, maar de uitkomst die het resultaat dat de functie oplevert, moet voldoen aan de specificatie van Drupal voor die functie.

Voor andere aanpassingen in het thema kan het een pagina functie zijn. Dan wordt de code aan het eind van „node.tpl.php” gezet.

Alternatief voor PHP templates

Maak een bestand template.php aan en zet dit in uw sjabloon. Verzamel hierin alle coderegels die het uiterlijk van de site wijzigen door gebruik te maken van de op deze en onderliggende pagina’s getoonde code.

randomness