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. 为内容类型“电影”创建新的整数 CCK 字段,该字段将存储演员表的数量。将其命名为movie_cast_number。
  2. 该字段将在 hook_nodeapi 中更新(类似于您的示例)。为此,您需要创建自定义模块“count_cast”。将其放置到站点/所有/模块目录。
  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 回答