Ajouter un champ à plusieurs types de contenu à la fois?


9

Je souhaite ajouter un champ à plusieurs types de contenu à la fois, et le configurer pour tous en même temps.

La raison en est que j'ai de nombreux types de contenu, qui doivent tous être mis à jour en ajoutant ce nouveau champ à chacun. Ce champ sera également configuré pour tous les types de contenu. Je dois répéter ce processus d'ajout, puis de configuration du champ pour chaque type de contenu auquel je veux l'ajouter, et cela devient difficile après un certain temps.

Existe-t-il un moyen d'ajouter / configurer en masse un nouveau champ à de nombreux types de contenu?


Combien de types de contenu avez-vous?
bobylapointe

Je suppose que cette question n'est plus pertinente pour OP, mais concerne Nigel Waters qui a fixé la prime. Voulez-vous Nigel commenter?
Kari Kääriäinen

Il y en a 25 (c'est un très grand site, qui nécessite que ces types de contenu soient séparés).
Nigel Waters

Btw, une autre solution est d'embaucher quelqu'un à bas prix pour ce genre de choses :)
donquixote

Ou une macro de navigateur?
donquixote du

Réponses:


9

Les grandes lignes utilisant le module Fonctionnalités peuvent être:

  1. Ajoutez le champ à deux types de contenu (pour voir le modèle) à la main
  2. Créer une entité comprenant des bases de champs et des instances de champs pour les champs nouvellement créés
  3. Modifier le module créé en multipliant les bases de champs et les instances pour tous les types de contenu nécessaires
  4. Activer le module édité

Je ne me souviens pas exactement comment les fonctionnalités traitent les champs .. est-il possible de désactiver la fonctionnalité après la création des champs?
donquixote

Le module nouveau-né dépendra des fonctionnalités, donc fondamentalement non, pour autant que je sache.
Kari Kääriäinen

Je veux dire désactiver le module nouveau-né, pas désactiver les fonctionnalités. La question est de savoir si les instances de champ seront toujours là. Peut-être que Lester Peabody ou Nigel Waters peuvent essayer et faire rapport.
donquixote

Oh pardon. Oui, en fait, les deux peuvent être désactivés, les champs vivront dans la base de données, je vois, car je le teste maintenant moi-même.
Kari Kääriäinen

C'est la bonne réponse pour les configurations drupal par défaut et la plupart des autres configurations drupal. Mais si différents modes d'affichage sont disponibles pour différents types de contenu, il est préférable de configurer manuellement les champs de chaque type de contenu, ou assurez-vous d'utiliser les types d'affichage corrects dans votre code de tableau field_instance.
Sumeet Pareek

5

Utilisez le module Field Tools :

Une collection d'outils UI utiles pour travailler avec les champs:

Overview of fields with links to edit single instances, and all instances at once
Clone any field instance to multiple entities and bundles
Clone all field instance of a bundle to multiple entities and bundles
Import and export fields
Delete multiple instances of a field
Apply a vocabulary to multiple entities and bundles at once (the same way vocabularies were applied to content types on Drupal 6)
... your idea here. Patches welcome!

Cela semble assez génial, je vais devoir regarder ça.
Lester Peabody

3

Si cela ne vous dérange pas d'écrire un module personnalisé pour cela, il est relativement facile d'ajouter un champ à un type de contenu via du code:
$instance = array(
'field_name' => 'field_firstname',
'label' => 'First name',
'entity_type' => 'node',
'bundle' => 'person',
);
field_create_instance($instance);

Le code ci-dessus ajoutera le champ "field_firstname" au type de contenu avec le nom de machine "person". Ainsi, vous pouvez créer un module qui un formulaire qui vous permet de sélectionner un champ et un certain nombre de type de contenu et lors de la soumission, le champ est ajouté à tous les types de contenu sélectionnés.


1

Les quelques fois où j'ai dû faire cela, j'ai utilisé Field Collection .

Fournit un champ de collecte de champs, auquel n'importe quel nombre de champs peut être attaché.

C'est encore assez difficile, car vous devez ajouter le champ de collecte de champs à chaque type de contenu. Cela dit, si vous ajoutez 5 ou 6 champs à plusieurs types de contenu, vous n'avez qu'à configurer les 5 ou 6 champs initiaux une fois dans la collection de champs.

Après cela, vous créez le champ de collecte de champs (pour des raisons d'appellons-le field_collection_field) sur l'un de vos types de contenu, puis réutilisez le même champ sur tous les autres.

Comme je l'ai dit, vous devez toujours configurer un champ sur x quantité de types de contenu ... mais c'est mieux que de créer 10 champs sur 10 types de contenu (par exemple).


aah..désolé. Je viens également de relire votre question et elle n'a besoin que d'un seul champ. Désolé d'avoir perdu votre temps> _ <
Chapabu

Cela dit, vous pouvez mettre ce champ dans une collection de champs et le configurer comme vous le souhaitez, puis référencer la collection de champs avec votre champ déjà configuré. Cependant, c'est un peu exagéré.
Chapabu

Pas de problème Chapabu, ce sont toujours des informations utiles pour le cas où je devrais faire quelque chose comme ça sur la route.
Lester Peabody

1

Si vous êtes à l'aise de manipuler la base de données directement, les instances de champ sont stockées dans la table {field_config_instance}. Vous pouvez ajouter / configurer votre champ pour un type de contenu, puis rechercher l'enregistrement dans la table de base de données et le dupliquer.

Vous devrez modifier deux valeurs de colonne sur la ligne dupliquée:

  • id: devrait être un nouvel entier unique à la table
  • bundle: Doit être le nom de la machine du nouveau type de contenu
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.