web-dev-qa-db-fra.com

Pourquoi entity_metadata_wrapper-> save () ne met pas à jour la révision du nœud?

Je développe un module pour mettre à jour les nœuds (activer la révision). Cela ressemble à ceci.

 $nodes = node_load_multiple(array(), array('type' => $bundleType));
 foreach ($ndoes as $node){
    $w = entity_metadata_wrapper('node',$node);
    $w->MyFields->set($someValue);
    $w->save();
 }

Il définissait correctement les champs mais l'identifiant de révision du nœud ne changeait pas après $w->save().

Comment puis-je mettre à jour l'ID de révision?

8
zhuchun

L'indicateur de création de révision est-il défini sur le nœud pour le type de contenu? Avez-vous essayé comme $ w-> revision-> set (1); avant de sauvegarder? ....

MODIFIER:

L'auteur dit que la configuration de $w->revision->set(1) résout son problème.

6
tenken

Lorsque vous modifiez un nœud via l'interface utilisateur, cela se fait via node_form() . Cela a un appel vers le haut pour node_object_prepare() , qui définit les valeurs par défaut pour ce nœud. Cela inclut la définition de la valeur par défaut de $node->revision, Qui est utilisée par node_save() pour déterminer si une nouvelle révision est nécessaire ou non.

L'API Entity est compatible avec les révisions, mais node_object_prepare() est une chose spécifique au nœud. Cela signifie que vous devez gérer les valeurs vous-même, notamment en définissant la propriété de révision pour imiter ce que fera le formulaire de modification de nœud.

10
mpdonadio

Aucune de ces réponses n'est en fait correcte, faire ->set(1) donne l'impression que vous changez réellement le numéro de révision et doit donc l'incrémenter.

Ceci est en fait juste un drapeau booléen, donc la bonne réponse est $node->revision->set(true);

Comme le dit zhuchun: il ne comprend pas pourquoi cela est nécessaire, lorsqu'il est expliqué comme un drapeau booléen, il est parfaitement logique plutôt que le nombre.

7
Gav_

Si le type de nœud n'a pas de révisions activées par défaut, la façon la plus succincte de demander une nouvelle révision est:

$w->revision = TRUE;

ce qui revient exactement à utiliser:

$w->revision->set(TRUE);

mais avec moins de frappe nécessaire.

0
Fonant