Documentation Level:
Intermediate
Normally template files (*.tpl.php) reside in a theme. But sometimes modules may need to override template files provided by Backdrop or another contrib project. Here's how a module can override a template file...
First, copy the template file you wish to override into your module directory. Putting it into a dedicated 'templates' sub-folder is recommended. For example:
my_module/
my_module.info
my_module.module
templates/
template_file_to_override.tpl.php
The next step is to tell the theme system to look there. Copy the following function into your *.module
file, editing as necessary:
/**
* Implements hook_theme_registry_alter().
*/
function my_module_theme_registry_alter(&$theme_registry) {
// Defined path to the current module's 'templates' directory.
$module_path = backdrop_get_path('module', 'my_module') . '/templates';
// Find all *.tpl.php files in this module's 'templates' folder recursively.
$template_file_objects = backdrop_find_theme_templates($theme_registry, '.tpl.php', $module_path);
// Iterate through all found template file objects.
foreach ($template_file_objects as $key => $template_file_object) {
// If the template has not already been overridden by a theme...
if (!isset($theme_registry[$key]['theme path']) || !preg_match('#/themes/#', $theme_registry[$key]['theme path'])) {
// Alter the theme path and template elements.
$theme_registry[$key]['theme path'] = $module_path;
$theme_registry[$key] = array_merge($theme_registry[$key], $template_file_object);
$theme_registry[$key]['type'] = 'module';
}
}
}
Original Source: