We often define custom blocks in a site-specific module. Sometimes the markup in these blocks can start building up and we realize that it's time to create a template for the block. This is a good way to keep markup out of the module code. It's also a good way to practise writing cleaner and more themer-friendly modules.
To add a template file to your module, you'll need to implement the hook_theme() function.
/*
* Implementation of hook_theme().
*/
function mymodule_theme() {
return array(
'mymodule_custom_block' => array('arguments' => array(), 'template' => 'mymodule-custom-block')
);
}
The name of the template will be mymodule-custom-block.tpl.php. You should create this template in the mymodule directory. In order to make the contents of the template appear on the site, you'll need to add it to a custom block. Below, I've implemented the hook_block function and assigned theme('mymodule_custom_block') to the content of my custom block.
/*
* Implementation of hook_block().
*/
function mymodule_block($op = 'list', $delta = 0, $edit = array()) {
switch ($op) {
case 'list':
return array(
0 => array(
'info' => t('Custom Block'),
),
);
case 'view':
$subject = '';
$content = '';
switch ($delta) {
case 0:
$content = theme('mymodule_custom_block');
$subject = t('My Custom Block');
break;
}
if ($subject || $content) {
return array(
'subject' => $subject,
'content' => $content,
);
}
break;
}
}
In this case, the template file itself will contain static HTML. You can also add arguments to the mymodule_custom_block function if your block is dynamic.