J'écris un module personnalisé, ce que j'ai fait auparavant, mais c'est la première fois que j'essaie de créer un type de contenu avec des champs. J'ai implémenté hook_node_info et le type de contenu apparaît dans la liste des types de contenu dans la liste déroulante de admin_menu, cependant, lorsque je le navigue, admin/structure/types
il n'est pas répertorié.
J'ai implémenté hook_install et récupéré du code que j'ai trouvé sur une autre question SO. J'ai le code imprimer des informations de débogage dans mon journal d'erreurs et il semble que tout fonctionne, mais lorsque je navigue vers le type de contenu de la structure, il n'affiche pas le champ que j'ai ajouté.
Voici des crochets:
function mymod_node_info() {
return array(
'mymod_content' => array(
'name' => t('My Mod'),
'base' => 'mymod_content',
'description' => t('A Description'),
)
);
}
function mymod_install() {
error_log('mymod_install');
$types = node_type_get_types();
if ( ! field_info_field('field_mymod_myfile') ) {
$field = array(
'field_name' => 'field_mymod_myfile',
'type' => 'file',
);
$created_field = field_create_field($field);
error_log('---- field_create_field -----');
error_log(var_export($created_field, true));
}
$instance = array(
'field_name' => 'field_mymod_myfile',
'entity_type' => 'mymod_content',
'bundle' => 'mymod_content',
'required' => TRUE,
);
$created_instance = field_create_instance($instance);
error_log('---- field_create_instance -----');
error_log(var_export($created_instance, true));
}
Je peux voir un tableau appelé field_data_field_mymod_myfile
dans la base de données, donc je sais que la première partie a fonctionné. Cependant, la table est vide.
Le journal des erreurs montre la field_create_instance()
méthode retournée ceci:
array (
'field_name' => 'field_mymod_myfile',
'entity_type' => 'mymod_content',
'bundle' => 'mymod_content',
'required' => true,
'field_id' => '5',
)
Pourquoi mon champ n'apparaît-il pas sur ce type de contenu?
la source
Réponses:
Ce n'est pas tant une réponse que c'est une extension de la réponse précédente.
J'ai trouvé ces deux liens très utiles pour déterminer ce dont le système a besoin pour que les champs personnalisés soient ajoutés à votre type de nœud de module personnalisé.
Meilleur: http://www.sitepoint.com/creating-a-new-drupal-node-type/
Bonne information supplémentaire: http://public-action.org/content/drupal-7-field-api-drupal-7-adding-custom-content-type-custom-fields-field-api
Le problème que j'ai eu, c'est que ceux-ci (et tous les autres exemples que je peux trouver en ligne) sont des exemples très spécifiques sans documentation suffisante pour m'aider à trouver une solution à mon propre cas d'utilisation.
Ce qui a aidé, c'est le commentaire de tenken au PO sur l'utilisation du module Fonctionnalités pour obtenir les tableaux pour les champs personnalisés.
J'ai donc téléchargé le module Fonctionnalités et l'ai activé: https://drupal.org/project/features
Ensuite, j'ai créé les champs de mon type de contenu, en utilisant l'interface d'administration de Drupal comme vous le feriez normalement, que je voulais que le module crée. Ensuite, j'ai navigué jusqu'à Structure> Fonctionnalités> Créer une fonctionnalité et mis un faux nom (j'ai utilisé "test") pour la fonctionnalité, puis dans la zone des composants, cliquez sur "Instances de champ" et cochez les cases pour les champs personnalisés. Les champs sont tous nommés quelque chose comme node- [votre nom de machine de type de noeud] - [nom de champ], donc dans mon cas, puisque je voulais un champ d'image, c'était node-novel_section-field_image.
Après avoir sélectionné les champs personnalisés pour mon type de nœud, je viens de cliquer sur "Télécharger" et j'ai enregistré le fichier .tar sur mon bureau, l'ai ouvert, ouvert le dossier "test", puis j'ai consulté le test.features.field_base.inc et le test. features.field_instance.inc pour obtenir les tableaux dont j'avais besoin pour mes champs.
Ensuite, j'ai simplement utilisé la structure décrite par ce premier lien que j'ai publié et après cela, cela a fonctionné parfaitement. Pour moi.
Je n'ai pas pu trouver de documentation sur les structures de tableaux nécessaires pour des choses comme les champs d'image et les champs de référence de taxonomie et il semble que tous les autres didacticiels et demandes d'aide en ligne se concentrent sur des choses spécifiques comme les champs de texte.
J'espère que toute personne ayant le même problème que moi verra cela et pourra faire fonctionner sa configuration en utilisant ces exemples et le module Fonctionnalités comme je l'ai fait.
Merci à tenken d'avoir souligné cette fonctionnalité du module Fonctionnalités, je ne l'avais jamais utilisé et je ne savais pas que cela ferait cela.
la source
Ce code qui sera créé nouveau type de contenu qui devrait ajouter dans le fichier .install.
Ajout de hook_install ():
Vous devriez faire un message drupal et écrire cet événement dans le journal:
Fournissez hook_uninstall () pour supprimer votre type de contenu :
la source
admin/structure/types
Ce message est un peu dépassé, mais si cela peut aider, j'ai trouvé cet article très clair. Il vous montre comment créer un nouveau type de contenu étape par étape.
Lien vers le tutoriel
la source