如何在drupal中使用nodeapi?

时间:2013-03-15 20:55:17

标签: drupal

伙计们我有这个节点类型 - >电影。这部电影有投影。所以现在我被要求显示电影中的演员数量。我如何通过使用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

1 个答案:

答案 0 :(得分: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。
  5. 更新演员数量的代码可以按照以下方式进行:

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