2011-08-07 73 views
0

標題解釋了我的問題。無論何時編輯節點並更改特定字段的值,我都希望向具有特定角色的用戶發送電子郵件。有任何模塊可以幫助我嗎?如何編輯特定cck字段時發送電子郵件到某個角色(更改值)

因爲我是drupal模塊開發的新手,我嘗試編寫自己的模塊,但是如何在編輯之前獲取舊的字段值,以便我可以比較並查看字段是否已更改?

我也想提供一個簡單的方法來改變那個字段的值而不用去編輯頁面。因爲我改變了這個領域的價值很多,還有很多其他沒有經驗的用戶。我打算用flag模塊來實現這個功能,但是這個字段有三個狀態不是兩個。所以我不能使用標誌模塊。

在此先感謝

+0

是否適用於Drupal 6或7? – berkes

+1

@藍色,如果其中任何一個答案適合您,請考慮將其標記爲已接受。這將獎勵回答者,並幫助未來可能會發現此問題的搜索者。如果兩個答案都沒有幫助,則可能需要添加更多詳細信息,以便找到合適的答案。 –

回答

1

什麼版本的Drupal?

在Drupal 6中,您可以使用hook_nodeapi附加到節點上的更改,並使用可選參數node_load比較舊節點和新節點中的字段。

<?php 
/** 
* Implementation of hook_nodeapi(). 
*/ 
// fires mymodule_send_email() when the field 'specialfield' on nodes 
// of type 'specialnodetype' is updated 
function mymodule_nodeapi($node, $op, $a3, $a4) { 
    if ($node->type == 'specialnodetype' && $op == 'update') { 

    // $node stores the "old node" and $new_node stores the "new node" 
    // we're about to save 
    $new_node = node_load($node->nid,null,true); 

    // if a particular field doesn't match, fire a particular action 
    if ($node->field_specialfield[0]['value'] != 
     $new_node->field_specialfield[0]['value']) { 
     mymodule_send_email(); 
    } 

    } 
} 
?> 

可以使用一個類似的實現hook_nodeapi的自動且無需手動重新調用node_save更新該字段。

請注意,存儲在CCK字段中的內容並不總是作爲'value'檢索,因爲CCK字段有許多風格,可以有多個部分。可以隨時看的部件使用的print_r,這總是被檢索/分配是這樣的:

<?php 
// Displays an associative array with keys and values of the first instance 
// of the CCK field 'fieldname' 
print_r($node->field_fieldname[0]); 

// Displays an associative array with keys and values of the third instance 
// of the CCK field 'fieldname' 
print_r($node->field_fieldname[2]); 
?> 

(第二個例子是對於需要在節點中的多個值中的字段)

如有需要,請隨時回覆更多細節。

0

非定製模塊方式是使用Rules module,它允許您在發生CCK值更改時向特定角色的用戶發送電子郵件。它的寫作是爲了完成你描述的任務(以及基於事件觸發器的任何其他類型的任務)。

如果您正在尋找針對特定問題的解決方案,規則應該按照您的需要進行。如果這是一個個人項目,並且您想深入研究代碼,那麼通過編寫自定義模塊可以幫助您瞭解Drupal的工作原理。

相關問題