Tukar fail template berdasarkan kondisi tertentu

Events happening in the community are now at Drupal community events on www.drupal.org.
Posted by k4ml on February 22, 2010 at 7:39pm

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

Categories:

Drupal Developer Groups in Malaysia

Group organizers

Group notifications

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

AltStyle によって変換されたページ (->オリジナル) /