2010-05-10 10 views
4

我將Pathauto配置爲基於節點的標題生成別名,以獲取特定的內容類型。問題是我想在Pathauto使用它來生成別名之前對這個標題做一些小的修改。在Drupal中,如何更改傳遞給Pathauto的值?

this post中的第一條評論建議使用hook_token_values,但即使在閱讀docs後,我也無法真正理解如何使用它。在我的測試中,當我實現這個鉤子時,生成的別名總是「數組」,這意味着我錯過了一些東西。

任何幫助?謝謝。

+0

你能更具體地說明你不明白的東西嗎(也許將你的測試代碼發佈爲樣本)? – 2010-05-10 17:25:30

回答

5

這可能是您錯過了實施hook_token_list以及。提供新令牌有兩個步驟:

  1. 執行hook_token_list來聲明您要提供的令牌。這只是標記的名稱,以及簡短的解釋,以及標記將應用於什麼類型對象的信息(例如節點,用戶,分類,...)
  2. 實施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()運行標題,所以這將是插入自己的邏輯的地方。

1

在Drupal 7中,令牌功能已被移至核心。標記由hook_tokenshook_token_info方法執行。有關使用示例,請遵循提供的鏈接,並查找實現hook_tokens和hook_token_info&hellip的函數的鏈接;我發現statistics_tokensstatistics_token_info函數有助於理解這個鉤子是如何工作的。

也許值得注意的是,這個鉤子需要通過模塊來實現......我第一次嘗試將我的測試函數放到主題的template.php中,只是爲了什麼都沒有發生:-p

相關問題