6.x 到 7.x : hook_theme Drupal 7.x

等了一年多的時間, 終於有機會和時間可以正式使用 Drupal 7.x 作開發
所以都會集中一些 Drupal 7.x 和之前的不同之處
希望幫到大家, 也幫到自己

專用 tags: transition-7.x

hook_theme() 是一個很常用的 hook 之一
theme('image') 會調用 hook_theme()
以下的例子是自定義一個 theme 函數
輸出的是一整頁的 google map, 所以便使用一個新的函數
D7 的 函數參數只有兩個, hook 和 variables:

<?php
theme
(
 
'links',
  array(
'link' => $links, 'attributes' => array('class' => 'links'))
);
?>

D6:

<?php
theme
(
 
'links',
 
$links,
  array(
'class' => 'links')
);
?>

這樣便以後都不需要記住參數的順序了,
「究竟是 $tags 還是 $elements 是第一個參數」的問題不會再出現
又可以參考 theme_pager(): http://api.drupal.org/api/drupal/includes%21pager.inc/function/theme_pag...

完整的 code 例子:

<?php
/**
 * Drupal 6.x theme('HOOK', $var1, $var2, $var3)
 **/
function MY_MODULE_example_function() {
  return
theme('map_search', $results->response);
}
//hook_theme()
function MY_MODULE_theme($existing, $type, $theme, $path) {
  return array(
   
'map_search' => array(
     
'arguments' => array('response' => NULL),
    ),
  );
}
//define the theme function
function theme_map_search($variables = '') {
  return
kprint_r($variables['response'], true);
}
?>

<?php
/**
 * Drupal 7.x theme('HOOK', array('key'=>$var1, 'key2'=>$var2, 'key3'=>$var3)
 **/
function MY_MODULE_example_function() {
  return
theme('map_search', array('response' => $results->response));
}

//hook_theme()
function MY_MODULE_theme($existing, $type, $theme, $path) {
  return array(
   
'map_search' => array(
//D7 use variables as key instead of arguments
     
'variables' => array('response' => NULL),
    ),
  );
}
//define the theme function
function theme_map_search($variables = '') {
  return
kprint_r($variables['response'], true);
}
?>
Google