2013-03-15 22 views
0

傢伙我有這個節點類型 - >電影。這部電影已經投入其中。所以現在我被指示顯示電影中演員的人數。我如何通過使用nodeapi實現這一點?請有人通過這個指導莫。即時通訊編程在這裏很新。這裏是迄今爲止我做的:如何在drupal中使用nodeapi?

function count_cast_nodeapi(&$node, $op) { 
    switch ($op) { 
     case 'update index': 
     if ($node->type == 'movie') { 
      $text = ''; 
      $q = db_query('SELECT count(field_movie_cast_nid) FROM content_field_movie_cast ' . 
          'WHERE nid = %d', $node->nid); 
     if ($r = db_fetch_object($q)) { 
      $text = $r->count; 
     } 
     drupal_set_message($text); 
     } 
    } 
} 

但我不知道該把代碼放在哪裏。在哪裏保存它。我做這個模塊嗎?這個代碼是否正確?

我也只複製了這段代碼。所以我不知道'更新索​​引'的含義。和誰或什麼功能,將設置參數$運

回答

1

我可以建議你遵循的解決方案:

  1. 創建內容類型「電影」將存儲類型轉換的一些新的整數CCK領域。將其命名爲movie_cast_number。
  2. 該字段將在hook_nodeapi中更新(與您的示例類似)。爲此,您需要創建自定義模塊「count_cast」。將其放置到sites/all/modules目錄。
  3. 在hook_nodeapi需要使用$ op「insert」和「update」。 $ op由模塊節點生成,意味着哪個操作是由節點執行的。插入表示新節點已創建並更新 - 現有節點已更新。
  4. 如果您需要此內容類型的自定義輸出,則需要在您的主題目錄中創建node-movie.tpl.php。其中更新鑄件的數量看起來遵循的方式

代碼:

function count_cast_nodeapi(&$node, $op) { 
    switch ($op) { 
     case 'update': 
     case 'insert': 
     if ($node->type == 'movie') { 
      $result = db_result(db_query(' 
      SELECT count(field_movie_cast_nid) cnt 
      FROM {content_field_movie_cast} 
      WHERE nid = %d 
      ', $node->nid)); 
      $node->field_movie_cast_number[0]['value'] = $result->cnt; 
     } 
    } 
} 
+0

的人,你是那麼燦爛,我不知道該怎麼感謝你纔好。但另一個問題的人..我被再次指示不使用數據庫查詢。是否有可能修改field_movie_cast_number並將其設置爲一些沒有db查詢的值? – 2013-03-18 14:39:09

+0

是的,你可以這樣做:$ node-> field_movie_cast_number [0] ['value'] = count($ node-> field_movie_cast)並刪除db_query行 – 2013-03-20 06:40:17