Message d'avertissement

The subscription service is currently unavailable. Please try again later.

Compléter le formulaire d'un type de contenu

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour,

J'aimerais pouvoir ajouter quelques champs de formulaire à un de mes types de contenus sans passer par CCK. Quelles sont les bonnes pratiques pour effectuer une telle action?

Je précise l'objectif : à partir de la liste de mes nodes pour un type de contenu, je désire générer un fichier XML associé avec les informations contenus dans ce node. Ce fichier XML sera ensuite exploité dans l'affichage du node. La difficulté pour moi étant de générer ce fichier XML à la création du node.

J'espère être clair.

Auriez-vous une idée ?

Forum : 

/!\ Si tu développes ton propre type de contenu via un module, il faut bien être conscient que par la suite les modules CCK et Views ne sont pas utilisables ensuite (en tout cas avec ce type de contenu)

Disons que c'est pour faire un raccourci et que c'est ce que j'ai constaté personnellement lorsque j'ai essayé de le faire (mais peut-être que je m'y suis mal pris)
Pour être précis:
- dans views tu pourras voir les champs standard attribués à un node (titre, body)..., mais pas les champs "custo" : par exemple si tu ajoutes un champ "date", il ne sera pas exploitable
- dans l'interface d'admin, tu ne verras pas non plus tes champs custo dans la définition de ton content type

Ma compréhension du problème, c'est que lorsque tu crées un nouveau type de contenu via un module (en suivant les tutos "standards"), grosso modo tu crées un formulaire pour la saisie de ton contenu et tu crées une fonction qui permet d'enregistrer les champs supplémentaires dans la table que tu as choisis. Mais à aucun moment tu ne définis (comme CCK le fait) une liste de champs disponibles pour ton contenu (tables content_node_field et content_node_field_instance) et donc exploitable par views par exemple.
A priori, si tu singes le comportement de CCK, tu dois pouvoir faire en sorte que ton type de contenu se comporte de la même façon qu'avec CCK...

Un type de contenu custom est parfaitement extensible par CCK, il est mêmes possible de gérer l'ordre des champs du type de contenu custom par l'interface de CCK. Un exemple qui peut servir de preuve est le module Storm qui produit un certain nombre de type de contenus custom (ticket, tache, projet, organisation, etc) qui sont tous extensibles via CCK, Typiquement on peut grâce à cela ajouter des fichiers attachés via cck/filefield à un stormticket.

Pour ce qui est de views, il ne faut pas inverser la problématique. Views disposent d'une API permettant aux modules d'exposer leurs données de manière générale. CCK implémente bien évidement cette API et c'est pour cela que les champs CCK sont visible par views. Pour un type de contenu custom l'idée n'est pas de passer par un tiers pour arriver à ce résultat (même si c'est faisable), mais d'implémenter cette même API pour que views puisse voit les champs de ce type de contenu custom.

En somme, un "bon" type de contenu fonctionnera avec views et cck sans problèmes.

Je recherche justement le moyen de créer un "bon" type de contenu avec mes champs visibles par Views.

Pour arriver à cela, est-ce bien le fichier mon_module.install qui doit être correctement construit ? Je pense à la fonction mon_module_schema() (il me semble) qui définit l'ensemble des champs de ma table.

Bonjour,
j'ai crée un module en drupal 6 dans lequel j'ai ajouté un type de contenu via le fichier mon_module.install et j'ai ajouté des champ via le hook mon_module_form et ça fonctionne bien.
J'ai voulu convertir ce module en drupal 7 mais il n'est pas fonctionnel. il n'accède pas au mon_module_form ni au mon_module_form_alter dans lequel j'ai défini les champs supplémentaires.
Merci de m'informer comment je peux ajouter des champs pour un nouveau type de contenu avec la programmation en drupal 7.

Finalement, j'ai crée un nouveau type de contenu via l'interface de drupal, puis j'ai utilisé hook_form_alter() pour ajouter le champ de formulaire qui me manquait (de type checkboxes).
Ça marche nickel !

Maintenant, je voudrais générer un fichier XML à partir des cases qui ont été cochées. Je me demande qu'elle est la meilleure façon de procéder :

Faire une requête ajax (ahah ?) pour créer dynamiquement mon fichier, ou créer ce fichier à la sauvegarde du formulaire ?

Si tu entames la création d'un noeud, mais que tu ne le finalise pas alors la génération automatique est problématique. Il vaut mieux le générer de manière sûr et certaine lorsque que le formulaire est validé (pas de traitements superflu)

Effectivement, merci pour ta réponse.

Je considère le sujet comme résolu :)

J'ai maintenant un point bloquant pour changer les attributs de ce nouveau champ. Ne trouvant pas la réponse ni dans la doc' ni sur le web j'ai réouvert un sujet pour ce problème :

http://drupalfr.org/forum/support/developpement/23894-surcharger-un-attr...

PS : Comment édite-t-on son message d'origine pour placer le libellé résolu ?