Drupal6.0 theming 模版初探(二)

繼續鑽研
先弄清上一篇的一些疑問, 關於"需要重新載入theme, 令theme 可以使用新增的 *.tpl.php"
主站有一個官方的說明:(翻譯)

現在所有的theme 都需要註冊到資料庫(是之為theme registry). 在5.x 的環境, theme 是即場更新的. 但在6.x, theme 的每一個輸出都會經過hook_theme() 但不需要擔心, phptemplate 會幫你註冊新的theme 到hook_theme()

但有一個例外, forms表格不需要, 也不會註冊(往後的Drupal版本可以會改變做法)
更多的資源你可以參考theming 手冊

重要! 當你新增一個新的theme 函數或者新的 *.tpl.php, 你必須清空重制theme registry

你可以使用 devel module 中的 development block 來幫助你. Clear cache 連結會重制theme registry 或者使用 drupal_rebuild_theme_registry()函數(可以在themplate.php 中使用)

說明得很清楚...只是昨日找不到相關連結...

這次要修改的是原本沒有 .tpl.php 檔的一個theme 函數 theme_status_messages() theme.inc

用devel module 點擊一下任何的系統信息框
發現是來自theme_status_messages()
將theme.inc 內的 theme_status_messages() 抄到 /sites/all/garland2/status-messages.tpl.php
return 改為print:

<?php
 
global $user;
 
 
$output = '';
  foreach (
drupal_get_messages($display) as $type => $messages) {
   
$output .= "<div class="messages $type">\n";
    if (
count($messages) > 1) {
     
$output .= " <ul>\n";
      foreach (
$messages as $message) {
       
$output .= '  <li>'.$user->name.", ". $message ."</li>\n";
      }
     
$output .= " </ul>\n";
    }
    else {
     
$output .= $user->name.", ".$messages[0];
    }
   
$output .= "</div>\n";
  }
  print
$output;
?>

clear cache, 便可以看到訊息前面多了一個用戶名了
可以看到, 修改, 新增的工作都簡單了許多, 免卻了修改template.php 的麻煩

參考自:
6.x theming guide
http://drupal.org/node/171179
Converting 5.x themes to 6.x
http://drupal.org/node/132442

Google