在添加新节点时,Drupal的hook_nodeapi在操作'insert'之前匹配操作'update'

时间:2012-01-12 13:04:10

标签: drupal drupal-6 drupal-modules nodeapi

我正在处理一个模块,它在添加新节点时或在编辑现有节点时对节点进行更改,

但我发现当添加新节点时,hook_nodeapi的操作与 case" update"匹配和案例"插入" ,当假定它匹配案例"插入"

有没有办法以正确的方式做到这一点,或区分"更新"案例和"插入"案件?

我正在使用Drupal 6

2 个答案:

答案 0 :(得分:1)

我已经找到了问题,这是来自drupal.org的hook_nodeapi

<?php
function hook_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
  switch ($op) {
    case 'presave':
      if ($node->nid && $node->moderate) {
        // Reset votes when node is updated:
        $node->score = 0;
        $node->users = '';
        $node->votes = 0;
      }
      break;
    case 'insert':
    case 'update':
      if ($node->moderate && user_access('access submission queue')) {
        drupal_set_message(t('The post is queued for approval'));
      }
      elseif ($node->moderate) {
        drupal_set_message(t('The post is queued for approval. The editors will decide whether it should be published.'));
      }
      break;
    case 'view':
      $node->content['my_additional_field'] = array(
        '#value' => theme('mymodule_my_additional_field', $additional_field), 
        '#weight' => 10,
      );
      break;
  }
}
?>

因此,一起调用case insert和case update

答案 1 :(得分:0)

您需要使用$ node-&gt;类型来区分您何时要采取行动。 现在,您正在对您网站的每个节点采取行动。

if ($node->type == 'the_content_type_I_want') {
  switch ($op) {
    case 'presave':
      break;
    case 'insert':
      break;
    case 'update':
      break;
    case 'view':
      break;
  }
}