2012-01-12 3 views
1

я работаю над модулем, что вносить изменения на узлах при добавлении нового узла или при редактировании существующих узлов,hook_nodeapi Drupal совпадает «обновление» операции до операции «вставить» при добавлении нового узла

но Я обнаружил, что, когда добавления нового узла операция в hook_nodeapi совпадает случая «обновление» и корпус «вставить», когда предполагается, чтобы соответствовать только случая «вставить»

есть ли способ делать это правильно или дифференцировать между в случае «обновления» и «вставки»?

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

+0

Вы случайно вызываете 'node_save()' в свой 'insert' hook? – Clive

+0

Нет, я не использую его, –

+0

Вы подтвердили, что случай «update» вызывается для того же узла, что и «insert»? Кроме того, можете ли вы показать нам код реализации 'hook_nodeapi()' и функции, вызванные оттуда? –

ответ

1

я понял, проблема, вот 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

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

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