Estou desenvolvendo um módulo para atualizar nós (ativar a revisão). Se parece com isso.
$nodes = node_load_multiple(array(), array('type' => $bundleType));
foreach ($ndoes as $node){
$w = entity_metadata_wrapper('node',$node);
$w->MyFields->set($someValue);
$w->save();
}
Ele definiu os campos corretamente, mas o ID de revisão do nó não mudou depois $w->save()
.
Como posso atualizar o ID da revisão?
create new revision
sinalizador está definido no nó para o tipo de conteúdo? Você já tentou como$w->revision->set(1);
antes de salvar? ....$w->revision->set(1)
, é uma maneira manual de informar o drupal que o nó foi atualizado? Eu vou tentar isso.$w->revision->set()
funciona. Parece que eu entendi errado$w->save()
. Eu pensei que deveria aumentar o ID da revisão automaticamente enquanto salvava. Existe alguma maneira de obter o próximo aumento da ID de revisão? Obrigadorevision->set(1)
diz ao nó para registrar uma nova revisão na edição futura / atual do nó. Não sei por que o wrapper de metadados não está vendo a configuração global de criar nova revisão ..... mas definir o sinalizador de revisão é uma solução muito simples, como você já viu. Recebi meu comentário como resposta abaixo, se você desejar fazer um voto positivo para ajudar outros usuários no futuro a encontrar uma resposta correta.Respostas:
O sinalizador de criação de nova revisão está definido no nó para o tipo de conteúdo? Você já tentou como $ w-> revision-> set (1); antes de salvar? ....
EDITAR:
O autor diz que a configuração
$w->revision->set(1)
resolve seu problema.fonte
Quando você edita um nó via interface do usuário, isso é feito via
node_form()
. Isso tem uma chamada próxima ao toponode_object_prepare()
, que configura os valores padrão para esse nó. Isso inclui definir o valor padrão de$node->revision
, que é usadonode_save()
para determinar se uma nova revisão é necessária ou não.A API da entidade reconhece a revisão, mas
node_object_prepare()
é uma coisa específica do nó. Isso significa que você precisa gerenciar os valores por conta própria, incluindo a configuração da propriedade revision para imitar o que o formulário de edição do nó fará.fonte
Nenhuma dessas respostas está correta, o que
->set(1)
faz parecer que você está realmente alterando o número da revisão e, portanto, deve incrementá-lo.Na verdade, isso é apenas um sinalizador booleano, então a resposta correta é
$node->revision->set(true);
Como zhuchun diz: ele não entende por que é necessário, quando explicado como uma bandeira booleana, faz todo o sentido do que o número.
fonte
drupal_submit_form
por exemplo. Se você inspecionar os valores POST para um formulário de envio de nó, verá coisas comorevision = 1
nos campos POST porque acreate new revision
caixa de itens do formulário foi marcada. Como1 == TRUE
o código funciona de qualquer maneira. Mas seu argumento é válido.Se o tipo de nó não tiver revisões ativadas por padrão, a maneira mais sucinta de solicitar uma nova revisão é:
$w->revision = TRUE;
que é exatamente o mesmo que usar:
$w->revision->set(TRUE);
mas com menos digitação necessária.
fonte