Hook_nodeapi в Drupal соответствует операции "update" перед операцией "insert" при добавлении нового узла
Я работаю над модулем, который вносит изменения в узлы при добавлении нового узла или при редактировании существующих узлов,
но я обнаружил, что при добавлении нового узла операция hook_nodeapi соответствует регистру "update" и регистру "insert", когда предполагается, что он соответствует только регистру "insert"
Есть ли способ сделать это правильно или провести различие между "обновлением" и "вставкой"?
Я использую Drupal 6
2 ответа
Я разобрался с проблемой, вот 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;
}
}
?>
поэтому для случая вставки и обновления дела вызываются вместе
Вам нужно использовать $node->type, чтобы различать, когда вы хотите действовать. Теперь вы действуете на каждом узле своего сайта.
if ($node->type == 'the_content_type_I_want') {
switch ($op) {
case 'presave':
break;
case 'insert':
break;
case 'update':
break;
case 'view':
break;
}
}