什麼版本的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]);
?>
(第二個例子是對於需要在節點中的多個值中的字段)
如有需要,請隨時回覆更多細節。
是否適用於Drupal 6或7? – berkes
@藍色,如果其中任何一個答案適合您,請考慮將其標記爲已接受。這將獎勵回答者,並幫助未來可能會發現此問題的搜索者。如果兩個答案都沒有幫助,則可能需要添加更多詳細信息,以便找到合適的答案。 –