Hoe werkt themen in drupal 6
On:
zondag, November 30, 2008 - 14:47
Stel je wil iets themen in je module.
Je gebruikt het drupal theme systeem omdat je logic van presentatie wil scheiden.
De mogelijkheden:
Een ordinaire theme functie zoals in drupal 5
Begin niet te flippen als het niet direct gaat en onthou elke keer je een functie bijschrijft moet drupal dit te weten komen. Dus clear de cache telkens je een nieuwe functie of file bijschrijft (admin/settings/performance onderaan staat de clear cache knop)
- Registreer je theme functie met hook_theme() http://api.drupal.org/api/function/hook_theme/6
- Nu kan schrijf je je theme functie theme_naam_die_je_registreerde
- Deze theme functie kan je overriden zoals in drupal 5 door in je template.php file van je theme het volgende te zetten
- Wat we nu gedaan hebben is niet de manier van werken in drupal zes. We hebben nu de template preprocess functies. Deze functies worden gebruikt om eventueel nog logic uit te voeren voor het presenteren. Wat echter niet mogelijk is ze te gebruiken met een theme functie. Ze kunnen enkel gebruikt worden met een tpl.php file
<?php
function tandem_misc_theme() {
return array(
'sponser_link' => array(
'arguments' => array('link' => NULL),
),
);
}
?>
<?php
function theme_sponser_link($link) {
return check_url($link);
}
?>
<?php
function phptemplate_sponsor_link($link) {
$link = '<a href="http://ietsanders';
">http://ietsanders';
</a> return $link;
}
?>
Hoe doen we dat dan?
- Registreer je functie met hook_theme() en je zorgt dat in je array de key template met als value je file name gebruikt.
- Je maakt een file aan sponser_link.tpl.php en in de file gebruik je alleen html, je doet hier geen logic. Je kan de file in je module folder zetten of in je theme folder staan ze in beide dan primeerd de file in de theme folder
- Wil je nu de link veranderen dan gebruik je in je template.php file in je theme folder de template_preprocess functie
- Ziezo nu is presentatie mooi van logic gescheiden en kunnen er geen problemen opduiken van ongecheckte, onveilige content.
- Roep je theme functie bijvoorbeeld op vanuit een hook node api
<?php
function tandem_misc_theme() {
return array(
'sponser_link' => array(
'template' => 'sponser_link',
'arguments' => array('link' => NULL),
),
);
}
?>
<?php
//tpl file
print check_url($link);
?>
<?php
function phptemplate_preprocess_sponser_link(&$variables) {
$variables['link'] = '<a href="http://ietsanders.com';
">http://ietsanders.com';
</a>}
?>
<?php
function tandem_misc_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
//print_r($node);
if ($node->type == 'tandem') {
switch ($op) {
case 'view':
//build the sponsor link for payment system here:
$link = '<a href="http://google.com';
">http://google.com';
</a>
$node->content['sponser_link'] = array(
'#value' => theme('sponser_link', $link),
'#weight' => 10,
);
break;
}
}
}
?>
Voor meer lees zeker de drupal documentatie http://drupal.org/node/165706 en de api voor hook_theme http://api.drupal.org/api/function/hook_theme/6
Reactie toevoegen