2014-10-30 5 views
1

Я пытаюсь исправить проблему в каком-то унаследованном коде, который генерирует узлы настраиваемого типа контента «show», но только если узел того же типа и с тем же названием уже не существует. Код выглядит следующим образом:Drupal 6 - требуется node_submit() для сохранения узла?

 $program = node_load(array('title' => $xml_node->program_title, 'type' => 'show')); 
     if (!$program) { 
      $program = new stdClass(); 
      $program->type = 'show'; 
... 
      node_submit($program); 
      node_save($program); 
     } 

Итак, сценарий первый пытается загрузить узел в «шоу» типа контента с конкретным названием, и если он не создает один.

Проблема заключается в том, что, когда она вызывается несколько раз за короткий промежуток времени (внутри цикла), она создает двойные узлы. Как 2 шоу с тем же заголовком, созданным за ту же секунду?!?

В чем проблема?

Я искал примеры того, как сохранить узел в Drupal 6. В некоторых они даже не называют node_submit(). Нужен ли этот звонок? Если да, возможно, мне нужно перейти к node_save(), что вернет node_submit()? Или, может быть, node_load() почему-то не загружает существующий узел? Может быть, какой-то кеш нужно очистить или что-то еще?

+0

См http://drupal.stackexchange.com/questions/83277/what-is-the-purpose-of-using-node-submit-before-node-save – nawfal

ответ

1

Насколько я знаю и использовал node_save для создания программ программно, нет необходимости в функции node_submit(). Причина, по которой создаются двойные узлы, заключается в том, что функция node_load() запускается до завершения обновлений кеша node_load(). Попытайтесь добавить:

node_load(FALSE, NULL, TRUE); 

после node_save ($ program). это очистит кеш node_load().

см: https://api.drupal.org/comment/12084#comment-12084

+0

HTTP: //drupal.stackexchange.com/questions/83277/what-is-the-purpose-of-using-node-submit-before-node-save – nawfal

Смежные вопросы