J'ai pu créer dynamiquement les champs de formulaire en les récupérant de la base de données en utilisant ceci comme guide:
Comment puis-je générer dynamiquement du code XML d'un formulaire à partir de PHP?
Je veux juste savoir comment obtenir et définir des valeurs pour les champs personnalisés?
de plus, je veux les convertir au format JSON pour les stocker dans un champ de base de données.
Voici ma situation actuelle:
Mon exigence est de rendre un formulaire aussi dynamique que possible à l'aide de:
Ajout de champs personnalisés au formulaire d'édition en fonction de la configuration du back-end: - Au back-end, j'ai une table de rapports, puis une table de champs contenant une clé étrangère associée à Reports. Chaque fois que j'ajoute un élément dans la table Fields, une colonne à bascule indique si le champ que j'ai ajouté sera ajouté en tant que champ personnalisé lors du choix d'un rapport.
Si, par exemple, le champ Régions est un élément de campagne associé à un rapport, il me faudra ajouter le champ Régions personnalisé à la sélection du rapport.
Je pouvais maintenant accéder à mes champs personnalisés créés après les avoir créés dans ma fonction loadForm en utilisant ce code:
JFactory :: getApplication () -> input-> get ('jform', array (), 'array');
comment puis-je accéder à ces champs dans ma fonction loadFormData ()?
En fait, loadFormData()
est utilisé pour obtenir les données du formulaire, mais pas le formulaire en lui-même. Pourquoi avez-vous besoin d'accéder à vos champs personnalisés avec cette méthode?
comment puis-je modifier les valeurs des champs personnalisés avant de sauvegarder? Je veux les convertir au format JSON pour les stocker dans un champ de base de données.
En haut du fichier, incluez Registry
class:
use Joomla\Registry\Registry;
Puis dans votre save()
fonction:
if (isset($data['custom_field']))
{
$registry = new Registry;
$registry->loadArray($array['custom_field']);
$data['custom_field'] = (string) $registry;
}
Où $data
Est votre donnée d'entrée. Voir ma réponse à la même question ici .