Hook_nodeapi в Drupal соответствует операции «update» перед операцией «insert» при добавлении нового узла - PullRequest
1 голос
/ 12 января 2012

Я работаю над модулем, который вносит изменения в узлы при добавлении нового узла или при редактировании существующих узлов,

но я обнаружил, что при добавлении нового узла операция hook_nodeapi соответствует case "update" и case "insert" , когда предполагается, что соответствует только кейс "вставка"

Есть ли способ сделать это правильно или провести различие между кейсом "update" и кейсом "insert"?

Я использую Drupal 6

Ответы [ 2 ]

1 голос
/ 13 января 2012

Я выяснил проблему, вот hook_nodeapi от drupal.org

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

, поэтому для вставки и обновления дела вызываются вместе

0 голосов
/ 30 января 2012

Вам нужно использовать $ node-> type, чтобы различать, когда вы хотите действовать. Теперь вы действуете на каждом узле своего сайта.

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