web-dev-qa-db-fra.com

joomla loadFormData

Je suis nouveau dans le développement de composants Joomla. J'ai utilisé ce document pour développer le composant. Dans ce document, il existe une fonction loadFormData dans le modèle Helloworld ci-dessous:

protected function loadFormData()
    {
        // Check the session for previously entered form data.
        $data = JFactory::getApplication()->getUserState(
            'com_helloworld.edit.helloworld.data',
            array()
        );

        if (empty($data))
        {
            $data = $this->getItem();
        }

        return $data;
    }

Je voulais savoir:

  1. Cette méthode loadFormData est-elle utilisée pour charger les champs de formulaire saisis lorsque la page est rechargée?
  2. Comment puis-je appeler et utiliser cette méthode dans une autre partie de mon composant?
  3. Cette méthode conserve-t-elle les données d'entrée même si le formulaire n'est pas soumis?
  4. Où est-ce que JFactory::getApplication()->setUserState est fait?

Toute aide est appréciée.

1
user3750985

J'ai aussi rencontré ce problème et ai appris ce qui suit: loadFormData peut en effet être utilisé pour charger des données précédemment sauvegardées dans le formulaire et Joomla ne semble pas définir automatiquement les données du formulaire sur l'état de l'utilisateur. Vous devez le faire quelque part .. avec -indeed- setUserState.

Le commentaire "// Vérifie que la session contient des données de formulaire précédemment entrées." me faire réfléchir et à la recherche du comment et du pourquoi.

Dans mon cas, j'ai 2 champs, from_date et to_date. Dans mon com_myform\model\forms\myform.xml, ils sont définis sur <field name="from_date" type="calendar" [..] default="NOW" /> et <field name="to_date" type="calendar" [..] default="NOW +1 week" /> ils sont donc réglés pour aujourd'hui et le même jour la semaine prochaine.

Dans mon formulaire, je voulais conserver les dates initiales au cas où l'utilisateur (frontal) aurait mal saisi une autre valeur. Il devrait donner un message d'erreur et remplir le même formulaire avec les dates (précédemment) entrées afin que l'utilisateur puisse modifier d'autres valeurs sans avoir à recommencer.

Dans ma fonction d'assistance (com_myform\helper\processmyform.php), je vérifie la disponibilité mais avant de continuer, je "sauvegarde" les données du formulaire comme suit:

  public function checkAvailability($fromDate, $toDate)
    {
   JFactory::getApplication()->setUserState( 'com_bookit.edit.bookit.data', 
array('to_date' => $toDate, 'from_date' => $fromDate) );
 ... }

Comme vous pouvez le voir, je les ai sauvegardés dans un tableau. Maintenant, dans le loadFormData (), je peux facilement y accéder! Donc, dans mon com_myform\models\myform.php, je fais:

protected function loadFormData()
{
    // Check the session for previously entered form data
        $data = JFactory::getApplication()->getUserState(
            'com_bookit.edit.bookit.data',
            array('to_date', 'from_date')
        );
        return $data;
    }

Et comme par magie, les données sont insérées dans le formulaire. De cette façon, vous pouvez renseigner les données de formulaire avec des valeurs précédemment enregistrées (et même modifiées).

Veuillez noter que vous devez vider le UserState si vous ne voulez pas utiliser les valeurs à plusieurs reprises. Une fois que les dates d'utilisateur (frontales) ont été acceptées et que le formulaire doit être défini sur les dates par défaut, je ferais un script JFactory :: getApplication () -> setUserState ('com_bookit.edit.bookit.data', null);

J'espère que ça aide quelqu'un!

2
Isolde

Je pense que cette méthode sert au chargement de données sous la forme. La méthode vérifie d’abord la session pour obtenir des données si le tableau de session est vide, il récupère les données de la base de données. Les données peuvent être en session ou en base de données. Cette méthode n'assume aucune responsabilité pour charger le formulaire, mais uniquement pour charger des données dans le formulaire et obtenir les données à injecter dans le formulaire. Et pour obtenir un formulaire, vous devez utiliser la méthode getForm, qui est une méthode abstraite permettant d’obtenir le formulaire à partir du modèle.

1
hhgh4269

1. Cette méthode loadFormData est-elle utilisée pour charger les champs de formulaire saisis lors du rechargement de la page?

loadFormData () remplit le tableau de données avec les données stockées dans la session (getUserState ()) ou si elles sont vides de la base de données ($ this-> getItem ()).

https://docs.joomla.org/How_to_use_user_state_variables

2. Comment puis-je appeler et utiliser cette méthode dans une autre partie de mon composant?

Il suffit de charger le modèle:

JLoader::import('joomla.application.component.model');
JLoader::import( 'user', JPATH_SITE . DS . 'components' . DS . 'com_helloworld' . DS . 'models' );
$your_model = JModelLegacy::getInstance('your_model','HelloWorldModel');
$formdata= $your_model->yourFunction();

Le composant dans le module. AddModelPath ne semble pas fonctionner

LoadFormData est une fonction protégée, rendez-la publique ou écrivez une fonction publique qui appelle votre loadFormData () dans le modèle.

http://php.net/manual/en/language.oop5.visibility.php

3. Cette méthode conserve-t-elle les données d'entrée même si le formulaire n'est pas soumis?

Non, cela ne fonctionnera que si vous soumettez le formulaire via Ajax à la session (setUserState ()) pendant que l'utilisateur modifie encore.

https://docs.joomla.org/Using_Joomla_Ajax_Interface

4. Où se trouve JFactory :: getApplication () -> setUserState?

Dans la fonction de sauvegarde du contrôleur de modèle, par exemple:

https://github.com/joomla/joomla-cms/search?p=1&q=setUserState+&type=&utf8=%E2%9C%9

Je ne sais pas si Joomla définit automatiquement les données du formulaire sur l'état de l'utilisateur lors du chargement/de l'enregistrement du formulaire.

0
Dennis Heiden