Por que entity_metadata_wrapper-> save () não atualiza a revisão do nó?

8

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?

zhuchun
fonte
O create new revisionsinalizador está definido no nó para o tipo de conteúdo? Você já tentou como $w->revision->set(1);antes de salvar? ....
Tenken
Sim, a opção "criar nova revisão" está ativada. Não sei muito sobre isso $w->revision->set(1), é uma maneira manual de informar o drupal que o nó foi atualizado? Eu vou tentar isso.
Zhuchun
hmm, $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? Obrigado
zhuchun
não, revision->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.
Tenken

Respostas:

6

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.

tenken
fonte
É uma solução fácil! Só não entendo porque é necessário lol. Obrigado!
Zhuchun
10

Quando você edita um nó via interface do usuário, isso é feito via node_form(). Isso tem uma chamada próxima ao topo node_object_prepare(), que configura os valores padrão para esse nó. Isso inclui definir o valor padrão de $node->revision, que é usado node_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á.

mpdonadio
fonte
7

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.

Gav_
fonte
Houve um tempo em que a criação de novo conteúdo drupal envolveu a chamada mais fácil, drupal_submit_formpor exemplo. Se você inspecionar os valores POST para um formulário de envio de nó, verá coisas como revision = 1nos campos POST porque a create new revisioncaixa de itens do formulário foi marcada. Como 1 == TRUEo código funciona de qualquer maneira. Mas seu argumento é válido.
Tenken
isso deve ser aceito resposta
Alex Skrypnyk
0

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.

Fonante
fonte