有關 hook_menu 的 title arguments

hook_menu 中有一個選項是 title arguments
page arguments 大家可能用得比較多
而使用 title arguments 的機會比較少
而 API reference 也沒有有關的例子可以參考
我便約略介紹一下

首先,有關 title 的參數有三個:
title,字符,是未經翻譯的標題,會用於 <title> 內,一般的 theme 也會在 content 用 h1 輸出
title callback,可選參數,預設是 t(),這讓上面的 title 會預設經過翻譯然後輸出,所以上面的 title 不需要使用 t() 包起來
title argument,可選參數,必需是陣列,例如array(1)

假設 hook_menu 定義:

<?php
items
['admin/settings/joe/abc'] = array(
 
'title' => 'Testing page',
);
?>

最後 title 的處理: <?php t('Testing page') ?>

或者:

<?php
items
['admin/settings/joe/abc'] = array(
 
'title' => 'Testing page',
 
'title callback' => 'strtoupper'
);
?>

最後 title 的處理: <?php strtoupper('Testing page') ?>

以上的例子會令 title 避開 t()
所以應該自定義一個 callback:

<?php
items
['admin/settings/joe/abc'] = array(
 
'title' => 'Testing page',
 
'title callback' => 'strtoupper_t'
);

function
strtoupper_t($str) {
  return
t(strtoupper($str));
}
?>

最後 title 的處理: <?php strtoupper_t('Testing page') ?>

最後一個 title arguments 的例子:

<?php
items['admin/settings/joe/%'] = array(
  'title' => 'Testing @string page',
  'title arguments' => array('@string' => 3)
);

最後 title 的處理: <?php t('Testing @string page', array('@string' => arg(3))) ?>
以上的例子中的 title arguments 的 key 是 @string, 因為 title 有一個 t() 接受的 placeholder
所以 title arguments 便可以作為一個變數傳到 t(),替換變數了
Google