Problème API Joomla envoie résultat d'une multiple select list

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

  • Problème API Joomla envoie résultat d'une multiple select list

    Bonjour,

    Habituellement je me débrouille par moi-même, mais après une période de recherche importante, je n'ai plus d'autre choix que de vous embêter un peu.

    Mon problème est simple :
    Je travail sur un composant
    Dans l'admin, j'utilise une select liste multiple
    Je veux transmettre ces données dans ma base

    Bien évidemment :
    Je sais que l'on ne peut pas intégrer un array dans un champ de mysql
    Qu'il faut le serializer pour l'intégrer et le déserializer et le lire
    Qu'il faut intégrer [] dans le nom du select pour définir que c'est un tableau

    La solution trouvée mais qui ne marche pas :
    http://forum.joomla.org/viewtopic.ph...3800&p=1343690

    Bien évidemment j'ai essayé un update manuel qui ne marche pas non plus (bizarre)

    Mon code actuel après bien des essais est le suivant :


    Génération de la liste par l'API de joomla :
    Code:
    echo JHTML::_('select.genericlist',$data,'RSSFformid[]','multiple="multiple" size="5"','FormId','FormTitle',$transmit,'RSSFformid' );
    Ma fonction save() :
    Code:
    	function save()
    	{	
    		$option = JRequest::getCmd('option');
    		$this->setRedirect('index.php?option=' . $option);
    				
    		$post = JRequest::get('post', JREQUEST_ALLOWHTML);
    		
    		$row =& JTable::getInstance('rsshowform', 'Table');
    		
    		if (!$row->bind($post)) {
    			return JError::raiseWarning(500, $row->getError());
    		}
    		
    		if (!$row->store()) {
    			return JError::raiseWarning(500, $row->getError());
    		}
    
    		$this->setMessage('Data submited');
    	}
    Mon résultat actuel

    Soit une valeur qui passe, mais une seule sur la liste
    Soit un gros message d'erreur comme quoi la fonction update .... a échouée


    Voilà, s'il y en a qui ont une idée, je suis preneur parce qu'après un après midi sur ça (en faisant plusieurs choses en même temps) c'est prise de tête.

    Amicalement
    Dernière édition par Dragonjc à 20/07/2008, 12h48
    Quickform - Formulaires pour Joomla
    Notice QuickForm
    Aidez QuickForm, votez ici : http://joomlashack.uservoice.com/pag...4403-quickform

  • #2
    UP
    Quickform - Formulaires pour Joomla
    Notice QuickForm
    Aidez QuickForm, votez ici : http://joomlashack.uservoice.com/pag...4403-quickform

    Commentaire


    • #3
      Merci de ne pas "bumper" après seulement quelques heures.

      Sujet déplacé vers le forum "Développement"
      Jean-Marie Simonet / infograf768
      Joomla co-fondateur. Joomla Production Working Group.
      Sauf demande explicite de ma part, merci de ne pas utiliser de Message Privé pour poser des questions. Le forum est là pour ça.

      Commentaire


      • #4
        Excusez moi, une nuit courte et difficile. Mais la ça va mieux et je suis ouvert à toute proposition.

        Merci d'avance.
        Quickform - Formulaires pour Joomla
        Notice QuickForm
        Aidez QuickForm, votez ici : http://joomlashack.uservoice.com/pag...4403-quickform

        Commentaire


        • #5
          Salut Dragonjc,

          Déjà, je vais devoir jeter un oeil à cette génération de liste par l'API de Joomla!1.5, car là, arriver à le faire en une ligne

          Après, si j'ai bien compris, tu as une liste d'éléments, et tu souhaiterais les modifier (tous d'un coup?) et tout enregistrer?

          Les méthodes bind / store / save de l'objet mosDBTable (sous J!1.0) ne permettent de manipuler qu'un seul enregistrement à la fois. Je ne pense pas que ces possibilités aient été étendues à un jeu d'enregistrement pour l'objet JTable (J!1.5).

          Il doit donc, à mon avis, y avoir une erreur de conception ou de compréhension au départ... Soit tu édites un élément à la fois et tu le sauvegardes. Soit tu permets l'édition et la sauvegarde multiple, mais par un autre biais (AJAX ou dériver les méthodes de JTable ou boucle sur les enregistrements).

          Mais je peux toujours me tromper
          Christophe
          Joomla newb but Joomla fan

          Commentaire


          • #6
            Si si je t'assure ça fonctionne trè très bien l'API et il est d'origine 1.5:

            http://dev.joomla.org/component/opti...t-genericlist/

            Bon pour le bind et le store, j'ai repris cela d'un composant de base 1.5 qui fonctionnait comme ça. Pourtant j'ai essayé de le faire en manuel, mais ça n'a pas marché quand même. La est le soucis.

            En manuel j'ai essayé cela :
            - j'ai commencé par récupérer mavaleur[], la serializer ensuite pour qu'elle soit transmise normalement => Bad
            - j'ai ensuite intégrer mes valeurs une par une dans la base en occultant complétement mon code de départ et en le remplaçant carrément par un code php classique => Bad

            Je vais jeter de nouveau un coup d'oeil donc. Merci de ton aide, tiens moi informé si tu trouves quelques choses.
            Bon cela viens bien des fonctions bind et store.

            Car quand je fais un print_r($post); en enlevant le redirect pour voir le tableau, j'ai bien ma valeur RSSFformid => Array ([0]=>1 [1]=>11 [2]=>12 [3]=>13

            J'ai essayé avec la fonctin save() qui fais bind, checked, store,... mais rien, je continue donc de creuser la dedans, vu comme c'est partit, je poense que cela viens d'un problème de joomla, ils ont du oublier la fonction la pour les tableau.

            Le bind et le store sont justifié aussi en 1.5 :
            http://dev.joomla.org/component/opti...:table:jtable/
            Dernière édition par Dragonjc à 15/07/2008, 15h13
            Quickform - Formulaires pour Joomla
            Notice QuickForm
            Aidez QuickForm, votez ici : http://joomlashack.uservoice.com/pag...4403-quickform

            Commentaire


            • #7
              Je ne disais pas que la liste ne fonctionnait pas, mais juste qu'il fallait que je regarde comment ça marchait
              Pas encore assez expérimenté en J!1.5...

              Sinon, ce que je disais reste complètement valable. Il doit y avoir une erreur de conception ou de compréhension.
              Je vois bien que tu récupères une liste d'enregistrement, mais tu ne peux utiliser bind et save (ou store) que sur UN SEUL enregistrement...
              inserts a new row ... or updates an existing row
              Donc soit tu traite ton tableau d'enregistrements et tu fais une boucle pour ne binder et sauver que celui en cours, soit tu dérive les méthodes de l'objet JTable...
              Christophe
              Joomla newb but Joomla fan

              Commentaire


              • #8
                C'est un tableau 1 ligne et plein de colonnes 15 pour être exact.

                Mon tableau contenant les colonnes depuis ma base de données et de la classe table :
                Code:
                $row =& JTable::getInstance('rsshowform', 'Table');
                => 15 colonnes

                Mon tableau contenant mes valeurs a insérer :
                Code:
                $post = JRequest::get('post', JREQUEST_ALLOWHTML);
                => 15 colonnes

                En dehors du problème multiselect, tout marche, mise à jour, ou insertion. Tu ne fais que superposer deux tableaux de colonnes identiques les uns sur les autres et les mettre à jour.

                La ou je suis d'accord avec toi c'est que je n'insère, à proprement parler, qu'une valeur avec le bine save ou store : la valeur $post dans la valeur $row, peu importe ce qu'est cette valeur, mais je n'insère qu'une variable.

                Mais en effet il se trouve que cette valeur est un tableau, mais cela ne change en rien, l'interprétation que tu en fait. En effet on ne transmet qu'une seule variable dans une autre.

                En tout cas la méthode est valide, je viens de vérifier, et cela me conforte dans ce que j'ai fais : la méthode est dans les composants de base, content et autre.

                Dans ce cas cela signifie alors que le problème viens bien de Bind ou Save. Donc je n'aurai pas de solution à mon problème. Flute de flute. Galère ...
                Et trifouiller l'api je veux pas.

                Dans ce cas je vais réesayer en manuel.
                Quickform - Formulaires pour Joomla
                Notice QuickForm
                Aidez QuickForm, votez ici : http://joomlashack.uservoice.com/pag...4403-quickform

                Commentaire


                • #9
                  Mouarf je viens de trouver une solution alternative après avoir eu une révélation grace à ta remarque de transmission individuelle :

                  Il suffit de modifier la valeur dans le tableau post avant qu'elle ne soit transmise.

                  Donc dans ma fonction save :
                  Code:
                  	function save()
                  	{	
                  		$option = JRequest::getCmd('option');
                  		$this->setRedirect('index.php?option=' . $option);
                  				
                  		$post = JRequest::get('post', JREQUEST_ALLOWHTML);
                  		$row =& JTable::getInstance('rsshowform', 'Table');
                  		
                  		$post['RSSFformid'] = implode(',',$post['RSSFformid']);
                  
                  		if (!$row->bind($post)) {
                  			return JError::raiseWarning(500, $row->getError());
                  		}
                  		
                  		if (!$row->store()) {
                  			return JError::raiseWarning(500, $row->getError());
                  		}
                  
                  		$this->setMessage('Data submited');
                  	}
                  Dans ma fonction de génération de la select list pour générer les options sélectionnée en cas de rappel :
                  Code:
                  echo JHTML::_('select.genericlist',$data,'RSSFformid[]','multiple="multiple" size="5"','FormId','FormTitle',explode(',',$transmit),'RSSFformid' );
                  En fait il manque bien la dites fonction dans le bind je pense, mais je pense que c'est volontaire a cause du rappel de la valeur,car il faut la remettre en valeur tableau pour l'exploiter après...

                  Je laisse le post ouvert encore 1 jour ou 2 au cas ou quelqu'un ai une nouvelle idée. Après je le ferme.

                  Merci.
                  Dernière édition par Dragonjc à 15/07/2008, 16h39
                  Quickform - Formulaires pour Joomla
                  Notice QuickForm
                  Aidez QuickForm, votez ici : http://joomlashack.uservoice.com/pag...4403-quickform

                  Commentaire


                  • #10
                    Salut,

                    D'accord, ce n'était pas tout a fait la même chose dont on parlait... En fait tu as bien plusieurs valeurs à enregistrée (15 donc) mais sur un seul enregistrement (15 champs donc).

                    La méthode bind ne permet normalement de binder (lier / coller) que les valeurs nommées d'un tableau (ou objet) sur l'objet représentant l'enregistrement de ta table. Je ne suis pas sur d'avoir été très clair là

                    Donc à ce que je comprends maintenant, ton souci vient du fait qu'une des infos que tu souhaites enregistré dans un champ est elle aussi multivaleur... Et du coup tu n'arrives pas à toutes les enregistrées...
                    Alors dans ce cas, la solution de modifier l'élément avant de faire le bind est le bon. C'est aussi comme ça par exemple que les composants du core gère le rendu de l'éditeur...

                    En fait, je n'avais vraiment pas compris le souci, je pensais que tu souhaitais pouvoir éditer plusieurs lignes (enregistrements) d'un coup
                    J'ai déjà rencontré le même besoin en J1.0, et j'avais fait l'inverse, c'est à dire binder puis mettre à jour les champs multivaleurs
                    Mais les deux doivent fonctionnés.
                    Christophe
                    Joomla newb but Joomla fan

                    Commentaire


                    • #11
                      pas de soucis, en tout cas merci pour ton aide, parce que c'est quand même en en parlant et en reprenant la démarche vu que j'avais le doute, que j'ai eu l'idée.

                      A charge de revanche
                      Quickform - Formulaires pour Joomla
                      Notice QuickForm
                      Aidez QuickForm, votez ici : http://joomlashack.uservoice.com/pag...4403-quickform

                      Commentaire

                      Annonce

                      Réduire
                      1 sur 2 < >

                      C'est [Réglé] et on n'en parle plus ?

                      A quoi ça sert ?
                      La mention [Réglé] permet aux visiteurs d'identifier rapidement les messages qui ont trouvé une solution.

                      Merci donc d'utiliser cette fonctionnalité afin de faciliter la navigation et la recherche d'informations de tous sur le forum.

                      Si vous deviez oublier de porter cette mention, nous nous permettrons de le faire à votre place... mais seulement une fois
                      Comment ajouter la mention [Réglé] à votre discussion ?
                      1 - Aller sur votre discussion et éditer votre premier message :


                      2 - Cliquer sur la liste déroulante Préfixe.

                      3 - Choisir le préfixe [Réglé].


                      4 - Et voilà… votre discussion est désormais identifiée comme réglée.

                      2 sur 2 < >

                      Assistance au forum - Outil de publication d'infos de votre site

                      Compatibilité: PHP 4.1,PHP4, 5, 6DEV MySQL 3.2 - 5.5 MySQLi from 4.1 ( @ >=PHP 4.4.9)

                      Support Version de Joomla! : | J!3.0 | J!2.5.xx | J!1.7.xx | J!1.6.xx | J1.5.xx | J!1.0.xx |

                      Version française (FR) D'autres versions sont disponibles depuis la version originale de FPA

                      UTILISER À VOS PROPRES RISQUES :
                      L'exactitude et l'exhaustivité de ce script ainsi que la documentation ne sont pas garanties et aucune responsabilité ne sera acceptée pour tout dommage, questions ou confusion provoquée par l'utilisation de ce script.

                      Problèmes connus :
                      FPA n'est actuellement pas compatible avec des sites Joomla qui ont eu leur fichier configuration.php déplacé en dehors du répertoire public_html.

                      Installation :

                      1. Téléchargez l'archive souhaitée : http://afuj.github.io/FPA/

                      Archive zip : https://github.com/AFUJ/FPA/zipball/master

                      2. Décompressez le fichier de package téléchargé sur votre propre ordinateur (à l'aide de WinZip ou d'un outil de décompression natif).

                      3. Lisez le fichier LISEZMOI inclus pour toutes les notes de versions spécifiques.

                      4. LIRE le fichier de documentation inclus pour obtenir des instructions d'utilisation détaillées.

                      5. Téléchargez le script fpa-fr.php à la racine de votre site Joomla!. C'est l'endroit que vous avez installé Joomla et ce n'est pas la racine principale de votre serveur. Voir les exemples ci-dessous.

                      6. Exécutez le script via votre navigateur en tapant: http:// www. votresite .com/ fpa-fr.php
                      et remplacer www. votresite .com par votre nom de domaine


                      Exemples:
                      Joomla! est installé dans votre répertoire web et vous avez installé la version française du fichier FPA:
                      Télécharger le script fpa-fr.php dans: /public_html/
                      Pour executer le script: http://www..com/fpa-fr.php

                      Joomla! est installé dans un sous-répertoire nommé "cms" et vous avez installé la version française du fichier FPA:
                      Télécharger le script fpa-fr.php dans: /public_html/cms/
                      Pour executer le script: http://www..com/cms/fpa-fr.php

                      En raison de la nature très sensible de l'information affichée par le script FPA, il doit être retiré immédiatement du serveur après son utilisation.

                      Pour supprimer le script de votre site, utilisez le lien de script de suppression fourni en haut de la page du script. Si le lien de suppression échoue pour supprimer le script, utilisez votre programme FTP pour le supprimer manuellement ou changer le nom une fois que le script a généré les données du site et le message publié sur le forum. Si le script est toujours présent sur le site, il peut être utilisé pour recueillir suffisamment d'informations pour pirater votre site. Le retrait du script empêche des étrangers de l'utiliser pour jeter un oeil à la façon dont votre site est structuré et de détecter les défauts qui peuvent être utilisé à vos dépends.
                      Voir plus
                      Voir moins
                      Travaille ...
                      X