Question

J'ai un type de noeud personnalisé pour lequel je veux avoir un champ qui utilise un combobox spécial basé sur list_text. Quand on choisit le type list_text il est normalement possible d'entrer dans une liste statique des textes sélectionnables, cependant, je veux que cette liste soit dynamique, à savoir sur la base des résultats d'une db_query. Quelle est la meilleure façon de le faire en utilisant Drupal 7?

Un exemple simple de clarification. Un nœud de ce type personnalisé X contient un champ qui pointe vers un autre noeud, donc chaque fois qu'un noeud de type X est créé je veux un combobox qui contient tous les autres nœuds

(La meilleure solution serait d'afficher uniquement le combobox lors de la création de nœuds, et non plus pendant le montage. Mais je pourrais aussi vivre avec elle si le combobox a été montré lors de l'édition aussi bien.)

J'ai essayé de personnaliser options_select en définissant mon propre type de données et la mise en œuvre hook_options_list en conséquence. Le combobox a été affiché lors de la création avec les valeurs correctes, cependant, je ne pouvais pas l'enregistrer .. Je ne sais pas ce qui se passait mal là-bas, mais le premier le soumettre changerais un thème différent, et quand j'ai essayé à nouveau je suis arrivé un Erreur Interne du Serveur. Suis-je sur la bonne voie tout en définissant un tout nouveau type de données pour le champ? il doit sûrement être un moyen plus simple?

Était-ce utile?

La solution 2

Le tutoriel lié par allegroconmolto m'a envoyé sur la bonne voie. Merci pour cela.

Voici la façon plus simple de le faire: tutoriel

En fait, il est, comme je suppose, un problème commun et donc une solution simple pour elle a été incluse dans le module webform maintenant. Il fournit un hook_webform_select_options_info qui peut être utilisé pour enregistrer une méthode de rappel. La méthode de rappel est alors appelé à chaque fois une option correspondante, sélectionnez d'un formulaire en ligne est affiché, de sorte que vous pouvez facilement le remplir avec les résultats d'un dbquery ou quoi que ce soit d'autre. Fonctionne comme un charme et prend rien de temps à mettre en œuvre.

Autres conseils

Vous avez raison dans ce que vous n'avez pas besoin d'un nouveau type de données. Voici un bon tutoriel sur la façon de le faire . Ce n'est pas spécifiquement pour D7, mais je ne voyais pas grand-chose qui n'a pas été encore applicable. Il peut y avoir une meilleure façon de le faire dans D7 en particulier, mais j'aimerais savoir aussi si oui:)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top