Agregué un nuevo campo (texto) a un tipo de contenido de Drupal 7 que ya tiene muchos nodos.
¿Cómo puedo llenar el campo con un valor predeterminado para todos estos nodos?
Puede utilizar EntityFieldQuery
para recuperar una lista de nodos, luego actualizar los campos del nodo con node_save()
:
$lang = LANGUAGE_NONE; // Replace with ISO639-2 code if localizing
$node_type = 'page'; // Machine name of the content type
$query = new EntityFieldQuery;
$result = $query
->entityCondition('entity_type', 'node')
->propertyCondition('type', $node_type)
->execute();
if (!empty($result['node'])) {
$nodes = entity_load('node', array_keys($result['node']));
foreach($nodes as $node) {
// Replace field_foo with the machine name of the field to update.
// - 0 refers to specific value within the field array, for when the field contains
// multiple values. If the field only has one value, it should be 0.
$node->field_foo[$lang][0]['value'] = 'New Value';
node_save($node);
}
}
Si se trata de una operación única, puede usar la función Ejecutar PHP del módulo Devel para ejecutar lo anterior: de lo contrario, puede crear un módulo personalizado simple.
Me gustaría utilizar Vistas a granel de Operaciones y utilizar el "Ejecutar Script PHP arbitrario" que ver esencialmente los elementos anteriores, pero usted no tiene que hacer todo el código extra, sólo el pequeño fragmento que hace lo que quiere (como
$object->field_foo['und'][0]['value'] = 'some_value'
)fuente
Si solo desea actualizar el campo con algún valor, la alternativa más eficaz a la respuesta aceptada es esta:
La diferencia está en usar directamente
field_attach_presave
yfield_attach_update
funciones, que actualizan correctamente solo el campo de nodo y omiten el resto del proceso de guardado de nodo. Esto tiene el impacto de que no se llamarán ganchos de guardado / guardado de nodos, la fecha "cambiada" no se actualizará a la fecha actual, etc. Según su caso de uso, puede ser mejor que usar todo el proceso node_save ().fuente
De hecho, VBO (Views Bulk Operations) es una buena solución. Además, con las últimas versiones, encontrará una opción "Modificar valores de entidad" que proporciona una manera muy fácil de actualizar el lenguaje de los nodos en una sola operación.
fuente
Instale y habilite el módulo de Operaciones masivas de vistas y cree una vista con una visualización de página.
Agregar => Operaciones masivas: campo Contenido (Contenido) a la vista.
Referir
Seleccione los campos que desea establecer el valor predeterminado.
En tu caso su título. En la imagen son etiquetas.
Guarde la vista y vaya a la página que creó. Si tiene más de una página de resultados, puede elegir seleccionar todos los elementos en la página actual, todos los elementos en todas las páginas, o puede marcar manualmente las casillas correspondientes a los nodos individuales. Se debe marcar al menos una casilla de verificación para continuar.
Ahora establece el valor predeterminado y guárdelo.
fuente