Terdapat situasi di mana kita perlu tukar fail template (spt page.tpl.php) kepada fail template yang lain. Contohnya dalam kes saya, apabila terdapat query parameter seperti iframe=1, saya mahu page-iframe.tpl.php yang digunakan. Tujuan utama adalah untuk memaparkan laman yang lebih minimal tetapi pada masa yang sama saya tetap mahu menggunakan variables yang terdapat dalam page.tpl.php seperti $styles dan $scripts. Satu lagi keperluan ialah saya mahukan ini dicapai pada peringkat module, bukannya theme.
Drupal 6 mempunyai preprocess function yang digunakan untuk menyediakan (prepare) variables kepada fail template seperti page.tpl.php. Variable seperti $content, $title, $node yang kita lihat dalam page.tpl.php sebenarnya disediakan oleh preprocess function bermula dari template_preprocess (core) sehinggalah ke peringkat module dan theme yang menyediakan preprocessor masing-masing.
Laman theming guide ada menyediakan senarai panjang preprocess_hook yang boleh diimplemen oleh module atau theme untuk 'alter' variables yang akan dihantar kepada fail template. Untuk alter variables bagi page.tpl.php, kita boleh implemen hook_preprocess_page dan utk alter variables bagi keseluruhan fail template .tpl.php, hook_preprocess.
<?php
function mymodule_preprocess_page(&$vars) {
$is_iframe = $_GET['iframe'] == 1 ? TRUE : FALSE;
if ($is_iframe) {
$vars['template_file'] = 'page-iframe';
}
}
?>Secara teorinya, code di atas sudah mencukupi tetapi Drupal tetap tidak menggunakan page-iframe.tpl.php seperti yang disarankan. Untuk ini, kita perlu implemen hook_theme_registry_alter untuk memberi keutamaan kepada path dalam module ini berbanding path kepada template.
<?php
function mymodule_theme_registry_alter(&$theme_registry) {
$template_path = drupal_get_path('module', 'mymodule') .'/templates';
array_unshift($theme_registry[$theme_hook]['theme paths'], $template_path);
}
?>Ini adalah berdasarkan post yang saya jumpa di - http://11heavens.com/theming-Drupal-6-from-the-module-layer
