J'ai ajouté un nouveau champ (texte) à un type de contenu Drupal 7 comportant déjà de nombreux nœuds.
Comment puis-je remplir le champ avec une valeur par défaut pour tous ces nœuds?
Vous pouvez utiliser EntityFieldQuery
pour récupérer une liste de nœuds, puis mettre à jour les champs du nœud avec 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);
}
}
S'il s'agit d'une opération unique, vous pouvez utiliser la fonction Exécuter PHP du module Devel pour exécuter ce qui précède: sinon, vous pouvez créer un module personnalisé simple.
Je voudrais utiliser Views Bulk Operations et utiliser le "script PHP arbitraire d'exécution" pour faire essentiellement les éléments ci-dessus, mais vous n'avez pas à faire tout le code supplémentaire, juste le petit extrait qui fait ce que vous voulez (comme
$object->field_foo['und'][0]['value'] = 'some_value'
)la source
Si vous souhaitez uniquement mettre à jour un champ avec une valeur, l'alternative la plus performante à la réponse acceptée est la suivante:
La différence réside dans l'utilisation directe
field_attach_presave
et lesfield_attach_update
fonctions, qui mettent à jour correctement uniquement le champ du nœud et ignorent le reste du processus de sauvegarde du nœud. Cela a pour conséquence qu'aucun noeud de préenregistrement / enregistrement de noeuds ne sera appelé, la date "modifiée" ne sera pas mise à jour à la date du jour, etc. Selon votre cas d'utilisation, il peut être préférable d'utiliser un processus node_save () complet.la source
En effet, VBO (Views Bulk Operations) est une bonne solution. De plus, avec les dernières versions, vous trouverez une option "Modifier les valeurs d'entité" qui offre un moyen très simple de mettre à jour la langue des nœuds en une seule opération.
la source
Installez et activez le module Views Bulk Operations et créez une vue avec un affichage de page.
Ajouter => Opérations en bloc: champ Contenu (Contenu) en vue.
Référer
Sélectionnez les champs pour lesquels vous souhaitez définir la valeur par défaut.
Dans votre cas, son titre. Dans l'image, ce sont des tags.
Enregistrez la vue et accédez à la page créée. Si vous avez plusieurs pages de résultats, vous pouvez choisir de sélectionner tous les éléments de la page en cours, de tous les éléments de toutes les pages ou vous pouvez cocher manuellement les cases correspondant à des nœuds individuels. Au moins une case à cocher doit être cochée pour continuer.
Maintenant, vous définissez la valeur par défaut et enregistrez-la.
la source