Estoy desarrollando un módulo para actualizar nodos (habilitar revisión). Se parece a esto.
$nodes = node_load_multiple(array(), array('type' => $bundleType));
foreach ($ndoes as $node){
$w = entity_metadata_wrapper('node',$node);
$w->MyFields->set($someValue);
$w->save();
}
Estableció los campos correctamente, pero la revisión-id del nodo no cambió después $w->save()
.
¿Cómo puedo actualizar la ID de revisión?
create new revision
bandera establecida en el nodo para el tipo de contenido? ¿Has probado como$w->revision->set(1);
antes de guardar? ....$w->revision->set(1)
, ¿es esa una forma manual de informar al drupal que el nodo se ha actualizado? Voy a probarlo.$w->revision->set()
funciona. Parece que no lo entiendo$w->save()
. Pensé que debería aumentar la revisión-id automáticamente al guardar. ¿Hay alguna forma de obtener el próximo ID de revisión de aumento? Graciasrevision->set(1)
le dice al nodo que registre una nueva revisión en la edición próxima / actual del nodo. No estoy seguro de por qué el contenedor de metadatos no está viendo la configuración global de crear una nueva revisión ... pero configurar la marca de revisión es una solución muy simple como ya has visto. A continuación, recibo mi comentario como respuesta si desea votar a favor para ayudar a otros usuarios en el futuro a encontrar una respuesta correcta.Respuestas:
¿Está el indicador de crear nueva revisión establecido en el nodo para el tipo de contenido? ¿Has probado como $ w-> revision-> set (1); antes de guardar? ....
EDITAR:
El autor dice que la configuración
$w->revision->set(1)
resuelve su problema.fuente
Cuando edita un nodo a través de la interfaz de usuario, se realiza a través de
node_form()
. Esto tiene una llamada cerca de la parte superiornode_object_prepare()
, que configura los valores predeterminados para ese nodo. Esto incluye establecer el valor predeterminado de$node->revision
, que se utilizanode_save()
para determinar si se necesita una nueva revisión o no.La API de entidad es consciente de la revisión, pero
node_object_prepare()
es una cosa específica de nodo. Esto significa que debe administrar los valores usted mismo, incluida la configuración de la propiedad de revisión para imitar lo que hará el formulario de edición de nodos.fuente
Ninguna de estas respuestas es realmente correcta, hacerlo
->set(1)
suena como si realmente estuviera cambiando el número de revisión y, por lo tanto, debería aumentarlo.En realidad, esto es solo una bandera booleana, por lo que la respuesta correcta es
$node->revision->set(true);
Como dice zhuchun: no entiende por qué es necesario, cuando se explica como una bandera booleana tiene mucho sentido en lugar del número.
fuente
drupal_submit_form
por ejemplo. Si inspecciona los valores POST para un formulario de envío de nodo, verá cosas comorevision = 1
en los campos POST porquecreate new revision
se marcó el cuadro de elementos del formulario . Dado que1 == TRUE
el código funciona en ambos sentidos. Pero, tu punto es válido.Si el tipo de nodo no tiene las revisiones habilitadas por defecto, la forma más sucinta de solicitar una nueva revisión es:
$w->revision = TRUE;
que es exactamente lo mismo que usar:
$w->revision->set(TRUE);
pero con menos tipeo requerido.
fuente