Secara independen dari versi Drupal yang Anda tulis modulnya, ada dua kesalahan dalam kode Anda:
- Anda mendefinisikan "Bluemarine" sebagai fungsi tema, tetapi kemudian Anda memanggil
theme('custom')
, yang akan memanggil fungsi tema "custom"
- Jika Anda mendefinisikan "custom" sebagai fungsi tema yang menggunakan file template, maka
theme_custom()
tidak pernah dipanggil
Jika Anda menulis kode untuk Drupal 6, maka kode tersebut harus sama dengan yang berikut. Saya mengambil asumsi nama untuk fungsi tema tersebut custom
.
function custom_menu(){
$items = array();
$items['custom'] = array(
'title' => t('custom!'),
'page callback' => 'custom_page',
'access arguments' => array('access content'),
'type' => MENU_CALLBACK,
);
return $items;
}
function custom_theme() {
return array(
'custom' => array(
'arguments' => array('output' => NULL),
'template' => 'custom',
),
);
}
function custom_page() {
$output = 'This is a custom module';
return theme('custom', $output);
}
function theme_custom($output) {
}
File template akan memiliki akses ke $output
, dan ke variabel apa pun yang ditetapkan template_preprocess_custom()
, jika modul Anda mengimplementasikannya.
Misalnya, Anda bisa menerapkan kode yang mirip dengan yang berikut:
function template_preprocess_custom(&$variables) {
if ($variables['output'] == 'This is a custom module') {
$variables['append'] = ' and I wrote it myself.";
}
}
Dengan kode ini, file templat memiliki akses ke $output
dan $append
.
Sebagai contoh fungsi tema yang menggunakan file template, Anda dapat melihat theme_node () , yang didefinisikan dalam node_theme () , dan yang menggunakan node.tpl.php sebagai file template; fungsi preprocess yang diterapkan oleh modul Node untuk fungsi tema tersebut adalah template_preprocess_node () .