1

したがって、このフィールドは名前が付けfield_movie_cast_countられたコンテンツのフィールドであるmovieため、映画が更新されるたびに (別のキャストメンバーを追加するなど)、field_movie_cast_countフィールドも更新されるようにする必要があります。このコードを使用して成功しました:

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 を設定することはできませんか? このコードを試してみましたが、うまくいきません。笑

または、質問を言い換える必要がありますか?カウントキャストを表示する他の方法はありますか? 私のやり方は別として?多分私は上司を正しく理解していなかったからです。

4

1 に答える 1

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);
  }
}
于 2013-03-18T15:32:26.250 に答える