Tengo un tipo de contenido existente con varios nodos. Acabo de agregar un nuevo campo booleano con un valor predeterminado de "off".
Sin embargo, hasta que vuelva a guardar cada nodo, el valor predeterminado no está establecido, por lo que una vista que debería mostrar solo aquellos nodos donde el nuevo campo está utilizando el valor predeterminado está actualmente vacía.
¿Cómo puedo actualizar los nodos existentes, creados antes de que se haya agregado el campo, para establecer ese campo en su valor predeterminado?
Respuestas:
Lamentablemente, no hay una manera muy simple de hacer esto (además de VBO / reglas), pero aquí está el código que uso en las funciones de actualización en los archivos de instalación de mi módulo personalizado cuando necesito rellenar previamente los valores de campo para un determinado tipo de nodo después de agregar un nuevo campo ( en este caso, nodos de 'página'):
Otro método manual mencionado en esta respuesta utiliza EntityFieldQuery y carga / guarda cada nodo. Más Drupal-y, pero mucho menos rendimiento ... (¡requiere una operación de carga y guardado de nodo completo para cada nodo!).
fuente
entity_get_controller('node')->resetCache($nids);
contrario, un posteriornode_load()
puede cargar datos obsoletos de la memoria caché, y cualquieranode_save()
de esos objetos volvería a escribir esos datos obsoletos en la base de datos.La mejor apuesta es directamente en MySQl. Las tablas se verían así:
Si los mira, es bastante sencillo: ¿necesita que le ayude a comenzar a ver cómo se vería la consulta o está bien desde aquí?
fuente
Solo prueba la lógica de abajo. es mucho más rápido y también pasa por alto todas las implementaciones de gancho. Más detalles . puede escribir una consulta simple db_select directa para obtener todos los nid y hacer un bucle con este código de muestra.
fuente
usando sql, teniendo en cuenta que los nodos con el valor de campo no establecido son
field_data_field_pr_choix_du_document es la tabla correspondiente a mi campo y contiene un valor par de entrada establecido con un ID de entidad que hace referencia al nodo
hice usando inserción SQL ... seleccione la sintaxis
https://dev.mysql.com/doc/refman/5.5/en/insert-select.html
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.
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
Encontré una manera fácil de actualizar los campos en el tipo de contenido con este módulo: Valores predeterminados de campo
Ver captura de pantalla. Puede actualizar el contenido existente con los valores predeterminados o mantener los valores existentes.
Lo probé en D7 y funciona.
fuente