我將Pathauto配置爲基於節點的標題生成別名,以獲取特定的內容類型。問題是我想在Pathauto使用它來生成別名之前對這個標題做一些小的修改。在Drupal中,如何更改傳遞給Pathauto的值?
this post中的第一條評論建議使用hook_token_values,但即使在閱讀docs後,我也無法真正理解如何使用它。在我的測試中,當我實現這個鉤子時,生成的別名總是「數組」,這意味着我錯過了一些東西。
任何幫助?謝謝。
我將Pathauto配置爲基於節點的標題生成別名,以獲取特定的內容類型。問題是我想在Pathauto使用它來生成別名之前對這個標題做一些小的修改。在Drupal中,如何更改傳遞給Pathauto的值?
this post中的第一條評論建議使用hook_token_values,但即使在閱讀docs後,我也無法真正理解如何使用它。在我的測試中,當我實現這個鉤子時,生成的別名總是「數組」,這意味着我錯過了一些東西。
任何幫助?謝謝。
這可能是您錯過了實施hook_token_list
以及。提供新令牌有兩個步驟:
hook_token_list
來聲明您要提供的令牌。這只是標記的名稱,以及簡短的解釋,以及標記將應用於什麼類型對象的信息(例如節點,用戶,分類,...)hook_token_value
實際生成內容的令牌。當令牌被他們應該代表的內容替換時,這將被調用。由於您只是想提供標記模塊已提供的標題標記的替代版本,因此最好從token_node.inc中複製相關部分,將其剝離到相關情況並調整爲在另一個模塊中使用:
/**
* Implementation of hook_token_list().
*/
function yourModule_token_list($type = 'all') {
if ($type == 'node' || $type == 'all') {
$tokens['node']['yourModule-title'] = t('Node title (customized version by yourModule)');
return $tokens;
}
}
這簡單地說,yourModule
提供一個令牌節點對象,名爲yourModule-title
,用短描述。主要工作獲取其他鉤來完成:
/**
* Implementation of hook_token_values().
*/
function yourModule_token_values($type, $object = NULL, $options = array()) {
$values = array();
switch ($type) {
case 'node':
$node = $object;
// TODO: Replace the check_plain() call with your own token value creation logic!
$values['yourModule-title'] = check_plain($node->title);
break;
}
return $values;
}
任何需要的時候爲節點對象的令牌這將被調用,有問題的節點作爲$object
參數傳遞(對於用戶令牌,該$type
會是'用戶',並且$object
將是用戶對象,以此類推)。它所做的是創建一個值的數組,並用該令牌名稱作爲鍵值,並將該令牌替換爲該值。來自token_node.inc的原始代碼只是通過check_plain()
運行標題,所以這將是插入自己的邏輯的地方。
在Drupal 7中,令牌功能已被移至核心。標記由hook_tokens和hook_token_info方法執行。有關使用示例,請遵循提供的鏈接,並查找實現hook_tokens和hook_token_info&hellip的函數的鏈接;我發現statistics_tokens和statistics_token_info函數有助於理解這個鉤子是如何工作的。
也許值得注意的是,這個鉤子需要通過模塊來實現......我第一次嘗試將我的測試函數放到主題的template.php中,只是爲了什麼都沒有發生:-p
你能更具體地說明你不明白的東西嗎(也許將你的測試代碼發佈爲樣本)? – 2010-05-10 17:25:30