Comment puis-je aborder la mise en œuvre des éléments suivants dans Drupal 7?
Ce que je dois faire, c'est créer un module qui définit une nouvelle entité pouvant être saisie, appelée "Société". J'ai une liste de, par exemple, 20 champs qui doivent être remplis par chaque instance de la société. Ces questions sont prédéfinies et certaines peuvent contenir une validation personnalisée.
En ce moment, je suis sur le point de pouvoir ajouter de nouveaux champs à la société. Cela fonctionne bien pour le moment. Mon problème est que j'ai besoin de tous ces champs dès que le module est installé, donc leur ajout via l'interface n'est pas une option.
Je me demandais comment puis-je aborder cela? Je suppose que cela revient à pouvoir faire ce qui peut être fait en utilisant l'interface utilisateur «Gérer les champs» par programmation.
node_type_set_defaults()
etnode_type_save()
, ainsi que, bien sûr,hook_install()
.Réponses:
Utilisez field_create_field () pour créer le champ lui-même et field_create_instance () pour avoir une instance pour le groupe d'entités donné.
Lorsque vous créez des champs dans le cadre d'un module personnalisé, vous pouvez ou non souhaiter supprimer le champ lors de la désinstallation du module. Pour ce faire, vous pouvez utiliser field_delete_field () si vous souhaitez supprimer le champ et toutes les instances de champ, ou si vous souhaitez supprimer des instances spécifiques, vous pouvez utiliser field_delete_instance () .
la source
Exemple sur la manière d’ajouter par programmation des champs au profil d’utilisateur et de les utiliser ou non dans le formulaire d’enregistrement d’utilisateur.
la source
Si vous devez créer / supprimer rapidement des champs d'un type de contenu, d'une entité ou d'une entité existants, sans utiliser l'interface utilisateur ni la programmation, vous pouvez utiliser ces commandes Drush peu connues:
Ex: Créez deux nouveaux champs pour Article:
Autres commandes:
la source
Comme d'autres l'ont indiqué, vous pouvez utiliser les fonctions Field API de l' implémentation hook_install () de votre module pour créer des champs et leurs instances pour votre type de contenu. Voir node_example_install () pour un exemple d'utilisation de la fonction.
Une autre solution consiste à utiliser le module Fonctionnalités . Les fonctionnalités peuvent exporter divers composants de site pour coder dans un module. Les types de contenu et les champs sont parmi ceux exportables. Vous pouvez générer un module de fonctionnalités et remplacer votre code existant. Les fonctionnalités feront alors de leur mieux pour éviter de casser votre code. Ou vous pouvez générer un module factice et copier / coller le code associé aux champs dans votre module. Cela nécessite des connaissances de base sur le fonctionnement des fonctionnalités.
la source
Dans votre fichier d'installation, vous devrez définir à la fois le "hook_install" et le "hook_uninstall". Exemple inclus mais lisez tout sur les clés supplémentaires dans les références d'API (le code n'est pas testé, il est donc possible qu'il y ait une faute de frappe ici).
Dans le,
hook_install
vous pouvez ajouter les champs en utilisant:field_create_field , Cette fonction crée un modèle pour un champ.
field_create_instance Peut être utilisé après la création du champ pour l'ajouter à content_types (également appelé bundles).
NOTE Les noms des différents types de champs peuvent être trouvés dans les modules qui les génèrent (c'est la clé de l'élément de tableau dans leur hook_field_info). Vous pouvez trouver tous les modules d'implémentation de champs clés dans le dossier modules / champs / modules.
Les paramètres peuvent également être dérivés des modules de terrain. Les paramètres que vous définissez dans
field_create_field
sont ceux du site. Ceux que vous définissezfield_instance_create
sont ceux spécifiques à node_typedans le
hook_uninstall
field_delete_instance et field_delete_field peuvent être utilisés pour les supprimer,
field_delete_field
est appelée automatiquement si vous supprimez la dernière instance (normalement).la source
J'avais récemment le même besoin de projet. Voici comment je l'ai abordé. J'espère que cela aidera quelqu'un.
Fondamentalement, vous allez créer les champs dont vous avez besoin à l'aide de l'interface utilisateur des champs, les exporter en code, puis les inclure dans votre module personnalisé. Vous aurez besoin du module Devel activé.
J'ai aussi créé un Gist avec cette information.
Et c'est parti....
Définissez les 3 premières variables, puis cliquez sur Exécuter
Vous obtiendrez 2 tableaux, quelque chose comme ça, avec toutes les propriétés renseignées.
Ajoutez maintenant le code suivant à votre fichier .install. Remplacez toutes les instances de mymodule par le nom du module actuel. Collez le code de la sortie de développement dans les _mymodule_field_data et _mymodule_instance_data, comme indiqué dans les fonctions respectives ci-dessous. Vous pouvez le faire pour autant de champs que vous le souhaitez. Il vous suffit de placer tous les tableaux de champs $ dans la fonction _mymodule_field_data et toutes les instances $ dans la fonction _mymodule_instance_data.
la source
Vous pouvez également envisager d'utiliser le module Fonctionnalités pour créer les champs au moment de l'installation.
Comme Features génère du code pour les champs, une option consiste simplement à utiliser le module Feature pour générer le code dans un module factice, puis copier / coller dans le fichier .install de votre module.
L'avantage est que le module ne dépend pas du module Fonctionnalités de votre environnement cible.
la source
Vous pouvez utiliser le code customcompanymodule donné ci-dessous pour créer par programme un type de contenu avec ses différents champs.
Vous pouvez ajouter ce code dans un fichier .install de votre module personnalisé. Il ajoutera par programme un type de contenu appelé "société" et ses différents types de champs (texte, numérique, date (remarque: vous devrez installer le module Date car le champ Date n'est pas fourni par défaut), image, liste).
J'ai également ajouté le code de désinstallation qui supprimera le type de contenu "société", ainsi que tous ses champs et données, lors de la désinstallation de votre module "customcompanymodule".
Vous pouvez modifier / supprimer ces champs selon vos besoins:
la source