2013-03-15 2 views
0

남자들은이 노드 유형 -> 영화 있습니다. 이 영화는 그것에 캐스트가 있습니다. 그래서 지금 나는 영화에 출연 횟수를 표시하도록 지시 받았다. 어떻게 nodeapi를 사용하여 이것을 달성합니까? 제발 누군가 이걸 통해 안내 해줘. 여기 drupal 코딩에 아주 새로운. 여기에 ive가 지금까지 만든 내용은 다음과 같습니다.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

사람, 당신은 내가 충분히 감사하는 방법을 잘 모릅니다 너무 화려한 것. 하지만 다른 질문 남자 .. 나는 db 쿼리를 사용하지 않도록 다시 지시했다. field_movie_cast_number를 수정하고 db 쿼리없이 일부 값으로 설정할 수 있습니까? –

+0

네, 실제로 다음과 같은 방법으로 할 수 있습니다 : $ node-> field_movie_cast_number [0] [ 'value'] = count ($ node-> field_movie_cast) db_query 라인 제거 –

관련 문제