web-dev-qa-db-fra.com

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

Je veux 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?

9
Lester Peabody

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é
9

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!
5
Nigel Waters

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.

3
LVA

Si vous êtes à l'aise de manipuler directement la base de données, 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
1
Les Lim

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'argument, appelons-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).

1
Chapabu