Tukar fail template berdasarkan kondisi tertentu

Events happening in the community are now at Drupal community events on www.drupal.org.
k4ml's picture

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

Drupal Developer Groups in Malaysia

Group organizers

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: