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 a correctement défini les champs mais l'ID de révision du nœud n'a pas changé après $w->save()
.
Comment puis-je mettre à jour l'ID de révision?
create new revision
indicateur est-il défini sur le nœud pour le type de contenu? Avez-vous essayé comme$w->revision->set(1);
avant de sauvegarder? ....$w->revision->set(1)
, est-ce une façon manuelle de laisser le drupal savoir que le nœud a été mis à jour? Je vais essayer.$w->revision->set()
marche. Il semble que je me méprenne$w->save()
. Je pensais que cela devrait augmenter automatiquement le numéro de révision lors de l'enregistrement. Existe-t-il de toute façon une nouvelle augmentation de l'ID de révision? Mercirevision->set(1)
indique au nœud d'enregistrer une nouvelle révision lors de la modification à venir / en cours du nœud. Je ne sais pas pourquoi l'encapsuleur de métadonnées ne voit pas le paramètre global de créer une nouvelle révision ..... mais définir l'indicateur de révision est une solution de contournement très simple comme vous l'avez maintenant vu. Je reçois mon commentaire comme réponse ci-dessous si vous souhaitez voter pour aider d'autres utilisateurs à l'avenir à trouver une réponse correcte.Réponses:
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? ....
ÉDITER:
L'auteur dit que le réglage
$w->revision->set(1)
résout son problème.la source
Lorsque vous modifiez un nœud via l'interface utilisateur, cela se fait via
node_form()
. Cela a un appel vers le haut denode_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 parnode_save()
pour déterminer si une nouvelle révision est nécessaire ou non.L'API d'entité est compatible avec les révisions, mais elle
node_object_prepare()
est 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.la source
Aucune de ces réponses n'est en fait correcte, cela
->set(1)
donne l'impression que vous changez réellement le numéro de révision et devrait 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.
la source
drupal_submit_form
par exemple. Si vous inspectez les valeurs POST pour un formulaire de soumission de noeud, vous verrez des choses commerevision = 1
dans les champs POST car lacreate new revision
case des éléments du formulaire a été cochée. Puisque1 == TRUE
le code fonctionne de toute façon. Mais, votre point est valable.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.
la source