recreer un select à partir de parametres d'option de champs spécifiques

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

  • [RÉGLÉ] recreer un select à partir de parametres d'option de champs spécifiques

    Bonjour, j'ai besoin de retraiter les options de champs spécifiques d'une fiche contact pour creer un select.
    2 questions :
    Quel est le moyen le plus simple de les récupérer?
    Comment les retraiter via php pour avoir un select du type
    <select>
    <option value="myvalue">myoption</option>
    </select>
    parce que pour le moment, je vois bien que mes options sont
    {"multiple":"","options":{"options0":{"name":"A sso ciation","value":"1"},"options1":{"name":"Commer\u 00e7ant","value":"2"},"options2":{"name":"Artisan" ,"value":"3"},"options3":{"name":"Producteur"," val ue":"4"}}}
    mais je traite ça comment???
    Merci.
    Dernière édition par fabvincent à 11/04/2019, 16h20

  • #2
    Alors, j'ai bien retrouvé mon champs par ce biais
    $db = JFactory::getDbo();
    $query = $db -> getQuery(true);
    $query = 'SELECT params FROM vl_fields WHERE id=3';
    $db -> setQuery($query);
    $results = $db -> loadObjectList();
    foreach($results as $value){
    echo 'hello';
    }
    Il me renvoie hello sans erreur,
    J'ose imaginer que mes options sont cachées dasn le $result, oui?

    Commentaire


    • #3
      salut,
      Code:
      echo 'hello';
      print_r($value);
      Code:
      $db -> loadObjectList();
      ca ce n est peut etre pas le plus judicieux...tu les recuperes sous forme de listes d objet. Donc pas forcement le plus simple à parcourir.
      Dernière édition par lefabdu51 à 09/04/2019, 18h32

      Commentaire


      • #4
        OK, mais alors ce serait quoi le plus judicieux?
        désolé, pas trop familier avec les objets php

        Commentaire


        • #5
          Pour le coup print_r value me renvoie bien
          stdClass Object ( [fieldparams] => {"multiple":"","options":{"options0":{"name":"Asso ciation","value":"1"},"options1":{"name":"Commer\u 00e7ant","value":"2"},"options2":{"name":"Artisan" ,"value":"3"},"options3":{"name":"Producteur","val ue":"4"}}} )
          Mais comment je crée mon foreach pour récupérer mes options?

          Commentaire


          • #6
            A lire:


            teste loadrow() ou loadassoc().
            Dernière édition par lefabdu51 à 10/04/2019, 09h13

            Commentaire


            • #7
              ok, j'obtiens donc un
              Array ( [fieldparams] => {"multiple":"","options":{"options0":{"name":"A sso ciation","value":"1"},"options1":{"name":"Commer\u 00e7ant","value":"2"},"options2":{"name":"Artisan" ,"value":"3"},"options3":{"name":"Producteur"," val ue":"4"}}} )
              Reste maintenant a mettre en place un foreach pour récupérer mes options...
              MAIS COMMENT???
              Dernière édition par fabvincent à 10/04/2019, 14h44

              Commentaire


              • #8
                Quelqu'un?

                Commentaire


                • #9
                  Hello.
                  Que ce soit le champs params ou filedparams, il est encodé JSon.
                  Il faut donc déjà le décoder en en array.

                  Déjà tu donnes un id précis, donc ta requête va te renvoyer au maximum une seule ligne en réponse.
                  Fait donc (comme te l'indique lefabdu51) un simple loadObject (ou loadAssoc si tu veux).

                  un truc du genre :
                  Code PHP:
                  $db JFactory::getDbo();
                  $query $db -> getQuery(true);
                  $query 'SELECT fieldparams FROM vl_fields WHERE id=3';
                  $db -> setQuery($query);
                  $result $db -> loadObject();
                  $registry = new Registry();
                  $registry->loadstring($result->fieldparams,'JSON');
                  $tabFieldParams$registry->toArray();
                  foreach(
                  $tabFieldParams as $key => $value){
                   ....

                  Au vu de ton print_r ci-dessus "options" est lui même encodé json.
                  Il faudra donc dans le foreach le décoder à son tour en testant par exemple $key == "options" en décodant $value puis en faisant un foreach imbriqué.
                  Dernière édition par roland_d_alsace à 11/04/2019, 10h16
                  A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
                  Rejoignez le Joomla Users Groupe Alsace...
                  roland_d_alsace va-t-il devenir roland_du_grand_est ?

                  Commentaire


                  • #10
                    ok Roland, merci pour ce retour,
                    1 - j'obtiens un "Class 'Registery' not found"
                    2 - J'hallucine de la complexité de la chose, je souhaite simplement refaire un select depuis le champs fieldparams de la table vl_field standard qui est
                    "{"multiple":1,"options":{"options0":{"name":"Arti san","value":"1"},"options1":{"name":"Association" ,"value":"2"},"options2":{"name":"Commer\u00e7ant" ,"value":"3"},"options3":{"name":"Producteur","val ue":"4"},"options4":{"name":"Service aux entreprises","value":"5"},"options5":{"name":"Serv ices aux particuliers","value":"6"}}}"
                    dans ma table

                    Commentaire


                    • #11
                      Envoyé par fabvincent Voir le message
                      ok Roland, merci pour ce retour,
                      1 - j'obtiens un "Class 'Registery' not found"
                      OK, mais bon c'est du dev (à savoir).

                      Rajoute en haut de ton script, après le
                      Code PHP:
                      defined('_JEXEC') or die('Restricted access'); 
                      Ceci :
                      Code PHP:
                      use Joomla\Registry\Registry
                      Attention c'est Registry et pas Registery
                      A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
                      Rejoignez le Joomla Users Groupe Alsace...
                      roland_d_alsace va-t-il devenir roland_du_grand_est ?

                      Commentaire


                      • #12
                        Envoyé par fabvincent Voir le message
                        ok Roland, merci pour ce retour,
                        2 - J'hallucine de la complexité de la chose, je souhaite simplement refaire un select depuis le champs fieldparams de la table vl_field standard qui est
                        "{"multiple":1,"options":{"options0":{"name":" Arti san","value":"1"},"options1":{"name":"Association " ,"value":"2"},"options2":{"name":"Commer\u00e7a nt" ,"value":"3"},"options3":{"name":"Producteur"," val ue":"4"},"options4":{"name":"Service aux entreprises","value":"5"},"options5":{"name":"Serv ices aux particuliers","value":"6"}}}"
                        dans ma table
                        Le problème c'est que les custom fields sont liés à un composant.

                        Je ne sais pas dans quel composant tu veux faire ce select, sinon il te suffit de le cloner dans l'autre composant et de le modifier à chaque fois que tu changeras ou rajouteras une option...

                        Sinon il existe il me semble un customfield de type sql : https://docs.joomla.org/SQL_form_field_type/fr
                        Il te suffirait alors de mettre tes options dans une table et d'utiliser cette table pour tes différents champs.

                        Sinon créer (en codant) ton propre custom field.

                        En informatique il y a toujours plusieurs manières de solutionner un problème...
                        Dernière édition par roland_d_alsace à 11/04/2019, 10h38
                        A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
                        Rejoignez le Joomla Users Groupe Alsace...
                        roland_d_alsace va-t-il devenir roland_du_grand_est ?

                        Commentaire


                        • #13
                          Le projet est simple (enfin je pensais...) :
                          J'ai des utilisateurs qui créent leur fiche contact lors de la création de leur compte (natif joomla). Sur ces fiches contacts, j'ai des champs supplémentaires, rien d'extraordinaire. Ce que je souhaite faire est d'avoir un acces front end à l'édition de leur fiches contact. Pour ce faire, j'appelle un petit modal sur le front end qui est un formulaire qui reprend les champs de la fiche contact. Donc, les seuls champs qui me posent réellement soucis sont les déroulants gérés depuis les champs de type list.
                          En fait, il faut "juste" faire la meme chose que ce qui se passe sur le backoffice qui lui liste tous les champs type list en déroulant normal... Bref, je pense que tous les éléments sont la, que le module en question reste le com_contact et le com_fields qui lui intervient dans le cadre du com_contact.
                          En d'autre termes, il faut juste que le fasse ce que le backoffice fiche contact fait mais du cote frontend en simplifiant puisque je ne reporte pas tous les champs...
                          Dernière édition par fabvincent à 11/04/2019, 10h59

                          Commentaire


                          • #14
                            Suivant cette reflection la fonction getOptionFromFields() issue du fichier com_fields/librairies/fieldlistplugin.php pourrait-elle m'etre utile???

                            Code PHP:
                            public function getOptionsFromField($field)
                                {
                                    
                            $data = array();

                                    
                            // Fetch the options from the plugin
                                    
                            $params = clone $this->params;
                                    
                            $params->merge($field->fieldparams);

                                    foreach (
                            $params->get('options', array()) as $option)
                                    {
                                        
                            $op = (object) $option;
                                        
                            $data[$op->value] = $op->name;
                                    }

                                    return 
                            $data;
                                } 

                            Commentaire


                            • #15

                              Je n'utilise pas com_contact, sur ce point je ne peux donc pas t'aider.

                              si je comprend quand tu dis
                              Envoyé par fabvincent Voir le message
                              ...j'appelle un petit modal sur le front end qui est un formulaire qui reprend les champs de la fiche contact....
                              c'est pour accéder aux fiches des autres membres en temps qu'administrateur ?

                              La vue n'est-elle pas déjà prévue dans le composant ?
                              Si oui, c'est peut être juste un problème d'accès (à configurer dans les ACL du composant et des customfields).
                              A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
                              Rejoignez le Joomla Users Groupe Alsace...
                              roland_d_alsace va-t-il devenir roland_du_grand_est ?

                              Commentaire

                              Annonce

                              Réduire
                              Aucune annonce pour le moment.

                              Partenaire de l'association

                              Réduire

                              Hébergeur Web PlanetHoster
                              Travaille ...
                              X