Je souhaite intégrer un formulaire de widget de champ en dehors du contexte de l'ensemble du formulaire de modification de nœud.
J'ai affiché des formulaires complets dans le passé en utilisant drupal_get_form, mais cela ne semble pas s'appliquer aux formulaires de champ solitaires.
Est-il possible d'afficher un formulaire de widget de champ fonctionnel? Quelle serait la meilleure façon de procéder?
Les widgets de champ et les formulaires "normaux" semblent très semblables, donc si cela n'est pas possible, que faudrait-il pour "changer" un formulaire widget en un formulaire normal?
Cette question semble demander quelque chose de similaire, mais je ne comprends pas la réponse. Cette réponse spécifie l'utilisation de hook_field_widget_form_alter ; ce que je ne comprends pas, c'est comment afficher le formulaire de champ et non comment le raccorder une fois qu'il est créé.
#access = FALSE
ce qui semblait hacky dans ce contexte.J'utilisais intensivement la fonction suggérée par ttk, mais je pense qu'une récente mise à jour a gâché les choses ...
Voici une nouvelle version de la solution précédente qui fonctionne bien avec Drupal 7.22 et ctools 7.x-1.3.
Donc, comme dans le post précédent, vous appelez votre fonction personnalisée comme ceci:
Notez que l'entité bundle est maintenant un paramètre. Je l'ai fait parce que j'utilisais également cette fonction pour modifier les utilisateurs. De cette façon, il peut également être utilisé pour le terme de taxonomie, ou toute autre entité.
Et le
my_field_attach_form
est défini comme:Cette fonction m'a fait gagner beaucoup de temps, j'espère qu'elle le sera aussi pour vous!
la source
Voici la solution utilisant la
ctools_field_invoke_field()
méthode. Dans votre fonction de formulaire personnalisé, ajoutez:où la
my_field_attach_form
fonction est définie commeNotez que votre site doit avoir activé les outils ctools. Il est dommage que Drupal n'inclue pas de fonction d'assistance comme celle-ci par défaut.
la source
Je n'ai pas réussi à faire fonctionner la méthode ctools et j'ai décidé de le faire de cette façon à la place.
Ce code serait à l'intérieur d'une fonction de formulaire, donc $ form et $ form_state seraient déjà passés.
Créez d'abord un nœud vide d'un type contenant le champ que vous souhaitez rendre.
J'ai dupliqué les variables du formulaire pour ne pas encombrer l'original.
Retirez le champ que vous recherchez et ajoutez-le au formulaire.
J'ai utilisé cette méthode pour rendre le widget de sélection de taxonomie, le widget de cases à cocher de taxonomie et le widget de sélection hiérarchique sur un formulaire personnalisé. (Le widget de saisie automatique de taxonomie s'affiche mais génère une erreur lors de la soumission)
Enfin rendre et imprimer
la source
ctools_field_invoke_field()
méthode décrite ci-dessus fonctionne également.J'ai créé des formulaires à partir de champs individuels en utilisant
cela devrait renvoyer le formulaire de widget requis qui peut être utilisé sous n'importe quelle forme comme
Pour obtenir les valeurs du paramètre 2 ci-dessus, utilisez:
Pour d'autres paramètres, vous pouvez vérifier le lien api ici
Cela renvoie le formulaire de widget par défaut défini dans le champ des types de contenu.
J'espère que cela aide quelqu'un :)
la source