2013-03-18 15 views
1

所以我有這個字段名爲field_movie_cast_count這是一個名爲movie的內容的字段,所以我想要的是每當電影更新時(如我添加另一個演員)field_movie_cast_count字段也會更新。我已經成功地使用這個代碼:是否有可能通過使用nodeapi將某個字段設置爲某個值nodeapi

function count_cast_nodeapi(&$node, $op) { 
    $id = $node->nid; 
    if($op == 'update' && $node->type == 'movie') { 
     $count=count($node->field_movie_cast); 
     $q = db_query("update content_type_movie set field_movie_cast_count_value = '$count' WHERE nid = '$id'"); 
    } 
} 

現在,我的老闆告訴我,我不應該使用查詢。那麼,如何通過不使用數據庫查詢來實現這一點?

是不是可以設置field_movie_cast_count [] ['value'] = $ count?我試過這個代碼它不工作。大聲笑

或應該重述問題是否有任何其他方式顯示計數鑄造?除了我的方式嗎?因爲也許我不理解我的老闆吧。

+2

_「現在,我的老闆告訴我,我應該不使用查詢「_聽起來像你的老闆確切地知道他想要什麼,你問他如何去做? – Clive 2013-03-18 15:03:58

+0

nope。他是嚴格的老闆。所以每次他想要做點什麼時,我都會點頭。但是有可能嗎?他也是一名Web開發人員,所以我知道他知道他想要什麼。 – 2013-03-18 15:06:51

+0

對不起,認爲db_update會做的伎倆,但我無法在D6中找到它。我確定它在那裏...也許在一些貢獻模塊:(這裏是一個鏈接到D6抽象層api:http://api.drupal.org/api/drupal/includes!database.inc/group/database/6 – span 2013-03-18 15:13:08

回答

2

hook_nodeapi()有一個presave操作,在節點(和字段數據)提交到數據庫之前調用該操作。操作的定義是:

節點通過了驗證並即將被保存。在將節點保存到數據庫之前,模塊可以使用它來更改節點。

你可以用它來更新字段值,而不是訴諸手動進入數據庫(將反正覆蓋),像這樣:

function MYMODULE_nodeapi(&$node, $op) { 
    if ($op == 'presave' && $node->type == 'movie') { 
    $node->field_movie_cast_count[0]['value'] = count($node->field_movie_cast); 
    } 
} 
+1

你是先生,是個天才!我知道我的問題是關鍵,但我無法弄清楚什麼時候意味着什麼,或者它做了什麼,你給我澄清了。非常感謝!我希望你贏得彩票或其他什麼 – 2013-03-18 15:51:05

相關問題