J'ai un type de contenu existant avec un certain nombre de nœuds. Je viens d'ajouter un nouveau champ booléen avec une valeur par défaut "off".
Cependant, jusqu'à ce que je réenregistre chaque nœud, la valeur par défaut n'est pas définie, donc une vue qui ne devrait montrer que les nœuds où le nouveau champ utilise la valeur par défaut est actuellement vide.
Comment puis-je mettre à jour les nœuds existants, créés avant l'ajout du champ, pour définir ce champ à sa valeur par défaut?
Réponses:
Malheureusement, il n'y a pas de moyen très simple de le faire (à part VBO / règles), mais voici le code que j'utilise dans les fonctions de mise à jour dans mes fichiers d'installation de module personnalisé lorsque j'ai besoin de préremplir des valeurs de champ pour un certain type de nœud après avoir ajouté un nouveau champ ( dans ce cas, nœuds 'page'):
Une autre méthode manuelle mentionnée dans cette réponse utilise EntityFieldQuery et charge / enregistre chaque nœud. Plus Drupal-y, mais beaucoup moins performant ... (nécessite une charge de nœud complète et une opération de sauvegarde pour chaque nœud!).
la source
entity_get_controller('node')->resetCache($nids);
- sinon une suitenode_load()
peut charger des données périmées du cache, et toutnode_save()
de cet objet serait d' écrire que de retour de données périmées à la base de données.Le meilleur pari est directement dans le MySQl. Les tableaux ressembleraient à:
Si vous les regardez, c'est assez simple - avez-vous besoin de moi pour commencer à quoi ressemblerait la requête ou êtes-vous d'accord d'ici?
la source
Essayez simplement la logique ci-dessous. son beaucoup plus rapide et son bypass toutes les implémentations de crochet aussi. plus de détails . vous pouvez écrire une simple requête directe db_select pour obtenir tous les nid et la boucler avec cet exemple de code.
la source
en utilisant sql, sachant que les nœuds dont la valeur de champ n'est pas définie sont
field_data_field_pr_choix_du_document étant la table correspondant à mon champ et contenant une entrée par valeur définie avec l'identifiant d'entité référençant le nœud
j'ai fait en utilisant l'insertion SQL ... sélectionnez la syntaxe
https://dev.mysql.com/doc/refman/5.5/en/insert-select.html
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 dont vous souhaitez définir la valeur par défaut.
Enregistrez la vue et accédez à la page qu'elle a 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, tous les éléments de toutes les pages, ou vous pouvez cocher manuellement les cases correspondant aux nœuds individuels. Au moins une case à cocher doit être cochée pour continuer.
Maintenant, vous définissez la valeur par défaut et l'enregistrez.
la source
J'ai trouvé un moyen facile de mettre à jour les champs dans le type de contenu avec ce module: Valeurs par défaut des champs
Voir capture d'écran. Vous pouvez mettre à jour le contenu existant avec la ou les valeurs par défaut ou conserver les valeurs existantes.
Je l'ai testé sur D7 et cela fonctionne.
la source