Composant J2.5 comment travailler sur les données avant enregistrement DB

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • [RÉGLÉ] Composant J2.5 comment travailler sur les données avant enregistrement DB

    Bonjour,

    Je suis en train de développer un petit composant et avec un formulaire (en Backend) contenant des champs input text classiques. Mon soucis est que je voudrais faire des travaux sur les données de ces champs avant de les enregistrer dans la base. Je suis un peu confus car en regardant Com_content, Com_k2 et d'autres composant ils utilisent aussi bien une fonction dans JTable Store ou Save dans le modèle... quelle est la bonne solution ? Sachant que je dois aussi pouvoir retraiter mes infos pour les afficher lors d'une modification de mon item. En fait c'est parce que j'ai plusieurs champs et je veux en faire un JSon avant de les enregistrer dans le base et les décoder pour les afficher lors de la modification de l'item.

    Autre petite question, j'ai regardé les différents composants natifs et certains utilisent State et d'autres Published pour l'état de l'élément dans la base, j'ai cru comprendre que avec Published on a pas à créer la fonction Publish dans le JTable du type de l'élément si on veut utiliser JGrid.Publised. Pourtant Com_content utilise bien State et n'a pas de fonction Publish.... j'aurais mal compris un point ?

    Merci de votre aide
    www.weblogin.fr - Création, Référencement et Design de sites Internet.

  • #2
    Re : Composant J2.5 comment travailler sur les données avant enregistrement DB

    Bonjour,

    Les "travaux" sur les sonnées ne dépendent que du composant et de ce qu'on veut y modifier.

    Pour les modèles JTable::store, ou JTable::Save sont équivalents. Les 2 sont valides actuellement.

    Pour le JSON, ce n'est pas l'encodage/décodage qui doit être stocké, les données ne se souciant que peu de ce fait là.

    Pour traiter du JSON, c'est le rôle d'une méthode du controller pour l'encodage et d'une autre pour le décodage.

    State et published, suivant les composants peuvent être synonymes ou complémentaires (on peut avoir published et state dans certains cas).

    Sans savoir avec précision ce que ce composant mystère st sensé réaliser, aucun moyen de savoir la stratégie optimale.
    Pas de demande de support par MP.
    S'il n'y a pas de solution, c'est qu'il n'y a pas de problème (Devise Shadok)

    Commentaire


    • #3
      Re : Composant J2.5 comment travailler sur les données avant enregistrement DB

      Merci de ta réponse.

      Ce composant est une sorte d'annuaire de personnel. Mais en fait toutes ces questions me servent pour mieux comprendre la philosophie du développement dans le système Joomla surtout.

      Donc tu me confirme que pour tout ce qui est du travail sur les données à enregistrer je dois le faire dans mon élément héritant de JTable et pas dans mon Modèle ? En gros si tu as un formulaire pour ton Item et que dedans tu as 2 champs que tu veux fusionner en 1, par exemple Code postal et ville, comment procèderai tu ?

      Pour le Published et State, là ou je ne comprend pas dans les composants natifs, c'est pourquoi certains instancient la fonction publish dans leur JTable::Publish pour qu'il reconnaisse le champs State et d'autres non et pourtant ça fonctionne dans les deux cas. Plus précisément Com_weblinks le fait et Com_content non alors que les deux utilisent State.

      Encore merci de ton temps.
      www.weblogin.fr - Création, Référencement et Design de sites Internet.

      Commentaire


      • #4
        Re : Composant J2.5 comment travailler sur les données avant enregistrement DB

        J'avoue avoir encore du mal. Je ne comprend pas OU je dois placer mon code pour faire des traitements sur mes éléments du formulaire avant de les enregistrer dans la base. Si je comprend bien le Controller appelle Save du modèle et lui lance Bind/Check/Store de JTable...

        Mais dans tout !a je ne vous pas ou placer mon code qui va regarder si le champs input file n'est pas vider traiter l'image et passer au formulaire un champs IMG_URL en plus ?
        www.weblogin.fr - Création, Référencement et Design de sites Internet.

        Commentaire


        • #5
          Re : Composant J2.5 comment travailler sur les données avant enregistrement DB

          Personnellement, je fais le traitement dans le model, si le traitement doit concerner tous les enregistrements concernés par le model.

          Si seuls certains enregistrements doivent être traités, j'utilise le controller et des conditions.

          Pour gérer le champ FILE, tu peux le faire d'un côté ou de l'autre.
          Pas de demande de support par MP.
          S'il n'y a pas de solution, c'est qu'il n'y a pas de problème (Devise Shadok)

          Commentaire


          • #6
            Re : Composant J2.5 comment travailler sur les données avant enregistrement DB

            Merci de tes conseils. Voici ma démarche si cela peu aider d'autres personnes :
            - J'ai réécris le code de la fonction Save dans mon modèle (prise de modeladmin.php)
            - Dans la fonction Save j'ai placé mes tests pour l'upload du fichier et faisant à une fonction de traitement, elle aussi dans le modèle.

            J'ai donc opté pour le modèle plutôt que le controller dans ce cas de figure car l'élément déclencheur est le clic sur le bouton "sauvegarder" dans l'admin et le controller renvoie déjà vers la fonction Save du modèle.
            www.weblogin.fr - Création, Référencement et Design de sites Internet.

            Commentaire


            • #7
              Re : Composant J2.5 comment travailler sur les données avant enregistrement DB

              Je remonte ce vieux post pour continuer sur la même route et poser la question inverse. Je m'explique :
              J'utilise dans un composant en backend un Jform m'affichant une checkboxes (choix multiples). Dans ma fonction bind() j'ai donc ajouté ceci pour que le tout soit bien enregistré dans la base sous le format "1,2,etc" :
              Code PHP:
              // Prepare the checkbox pickup venues
                      
              if (isset($array['pickup_venues']) && is_array($array['pickup_venues'])) {
                          
              $array['pickup_venues'] = implode(','$array['pickup_venues']);
                      } 
              Mais pour afficher ceci dans mon élément je dois logiquement faire le démarche inverse, un explode. Ce que j'ai fais en ajoutant la fonction load à ma JTable :
              Code PHP:
              function load($pk null$reset true) {
                      if (
              parent::load($pk$reset)) {
                          
              // Convert the params field to a registry.
                          
              $params = new JRegistry;
                          
              $params->loadJSON($this->params);
                          
              $this->pickup_venues explode(','$this->pickup_venues);
                          
              $this->params $params;
                          return 
              true;
                      } else {
                          return 
              false;
                      }
                  } 
              J'ai fais ceci car je l'avais trouvé sur un post dans le google group joomla. Cela fonctionne, mais je ne comprend pas trop si c'est la bonne solution car tout appel en load aura toujours les éléments de la checkboxes explodé (désolé pour la francisation). Certains parle de le faire dans le modèle directement.

              Ma question est donc, où faut il traiter les données avant leur affichage dans le formulaire en backend ?

              Merci
              www.weblogin.fr - Création, Référencement et Design de sites Internet.

              Commentaire


              • #8
                Re : Composant J2.5 comment travailler sur les données avant enregistrement DB

                Bonjour,

                Il y a presque autant de méthodes que de développeurs

                Personnellement au lieu des couples implode/explode, j'ai tendance à utiliser serialize/unserialize, qui fait partie des recommandations de Zend pour ce type de traitement.

                Pour où les traiter, je n'ai pas d epréférences, soit traitement dans le model, soit dans le contrôleur, en MVC, ces 2 méthodes sont valides et équivalentes.
                Pas de demande de support par MP.
                S'il n'y a pas de solution, c'est qu'il n'y a pas de problème (Devise Shadok)

                Commentaire


                • #9
                  Re : Composant J2.5 comment travailler sur les données avant enregistrement DB

                  C'est bien toute la difficulté à trouver comment "bien" faire

                  Si je pars sur l'idée de le faire dans le modèle plutôt que dans le fichier JTable je suppose que cela se passerais dans la fonction "loadFormData()" ?

                  Merci pour tes recommandations.
                  www.weblogin.fr - Création, Référencement et Design de sites Internet.

                  Commentaire

                  Annonce

                  Réduire
                  Aucune annonce pour le moment.

                  Partenaire de l'association

                  Réduire

                  Hébergeur Web PlanetHoster
                  Travaille ...
                  X