Я разрабатываю модуль для обновления узлов (включить ревизию). Похоже на это.
$nodes = node_load_multiple(array(), array('type' => $bundleType));
foreach ($ndoes as $node){
$w = entity_metadata_wrapper('node',$node);
$w->MyFields->set($someValue);
$w->save();
}
Он установил поля правильно, но идентификатор ревизии узла не изменился после $w->save()
.
Как я могу обновить идентификатор ревизии?
create new revision
Установлен ли флаг на узле для типа контента? Вы пробовали как$w->revision->set(1);
перед сохранением? ....$w->revision->set(1)
том, это ручной способ сообщить друпалу, что узел был обновлен? Я попробую.$w->revision->set()
работает. Кажется, я неправильно понимаю$w->save()
. Я думал, что это должно увеличить идентификатор ревизии автоматически при сохранении. Есть ли способ получить следующий номер версии? Спасибоrevision->set(1)
велит узлу записать новую ревизию о предстоящем / текущем редактировании узла. Я не уверен, почему оболочка метаданных не видит глобальную настройку создания новой ревизии ... но установка флага ревизии - очень простой обходной путь, как вы теперь видели. Я предоставил свой комментарий в качестве ответа ниже, если вы хотите поднять его, чтобы помочь другим пользователям в будущем найти правильный ответ.Ответы:
Установлен ли на узле флаг создания новой редакции для типа контента? Вы пробовали как $ w-> revision-> set (1); перед сохранением? ....
РЕДАКТИРОВАТЬ:
Автор говорит, что установка
$w->revision->set(1)
решает его проблему.источник
Когда вы редактируете узел через пользовательский интерфейс, это делается через
node_form()
. Это вызов в верхней частиnode_object_prepare()
, который устанавливает значения по умолчанию для этого узла. Это включает в себя установку значения по умолчанию$node->revision
, которое используется,node_save()
чтобы определить, нужна ли новая ревизия или нет.Entity API поддерживает ревизии, но
node_object_prepare()
это специфическая для узла вещь. Это означает, что вам нужно самим управлять значениями, в том числе задавать свойство revision для имитации действий формы редактирования узла.источник
Ни один из этих ответов на самом деле не является правильным,
->set(1)
это звучит так, как будто вы фактически меняете номер ревизии и, следовательно, должны увеличивать его.На самом деле это просто логический флаг, поэтому правильный ответ
$node->revision->set(true);
Как говорит Жучун: он не понимает, зачем это нужно, когда его объясняют как логический флаг, он имеет смысл, а не число.
источник
drupal_submit_form
к примеру, самый простой вызов . Если вы проверите значения POST для формы отправки узла, вы увидите такие вещи, какrevision = 1
в полях POST, потому чтоcreate new revision
флажок элементов формы был отмечен. Поскольку1 == TRUE
код работает в любом случае. Но ваша точка зрения верна.Если тип узла не имеет ревизий, включенных по умолчанию, наиболее краткий способ запросить новую ревизию:
$w->revision = TRUE;
что точно так же, как использование:
$w->revision->set(TRUE);
но с меньшим набором текста требуется.
источник