0

みんな私はこのノードタイプを持っています->映画。この映画にはキャストがいます。だから今、私は映画のキャスト数を表示するように指示されました. nodeapiを使用してこれを達成するにはどうすればよいですか? 誰かがこれを案内してください。ここでの drupal コーディングは初めてです。これまでに作成したものは次のとおりです。

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);
        }
    }
}

しかし、このコードをどこに置くべきかわかりません。保存する場所。これのモジュールを作るのですか?このコードは正しいですか?

また、このコードのみをコピーしました。そのため、「インデックスの更新」が何を意味するのかわかりません。そして、誰またはどの関数がそのパラメーター $op を設定しますか

4

1 に答える 1

1

解決策に従うことをお勧めします:

  1. キャスト数を格納するコンテンツ タイプ「movie」の新しい整数 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;
        }
    }
}
于 2013-03-16T05:39:16.237 に答える