recherche code

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

  • #16
    Bonjour,

    Je n'ai pas eu le temps de lire la discussion mais il me semble que tu recherche comment créer un formulaire de type select2
    https://select2.org/

    A la différence d'un menu de selection standard, l'affichage inclus une zone de saisie pour filtrer et afficher les choix.

    exemple sous joomla 3
    https://www.joomy.net/en/using-selec...e-codes-syntax

    Ensuite la requête serait affiché en ajax afin de rester dans la page.
    https://docs.joomla.org/Using_Joomla_Ajax_Interface/fr

    Le tout étant de savoir si tu veux utiliser un shortcode pour inserer le formulaire dans un article donc créer un plugin ou un module pour afficher le form et le résultat dans une position du template. Ce qui serait plus simple si tu as déjà défini ta source, c'est à dire la table contenant la traduction et l'url vers le fichier mp3.

    Alternativement si tu développe ton propre composant pour gérer ces traductions, le menu serait intégré dans une vue front et tu aurais une extension
    que tu aura développé de a à z.... Tu peux jeter un coup d'oeil à https://www.joomlacomponentbuilder.com/

    Perso, j'aurais créé le composant avec jcb (le lien ci-dessus) puis j'aurai défini une vue sous la forme d'un "glossaire" afin d'avoir la liste de toutes les traductions et de pouvoir les référencer par ordre alphabétique. J'aurai intégré une vue de recherche avec le menu de selection non pas en jquery avec select2 mais avec https://tom-select.js.org/ afin de supprimer jquery et de pouvoir assurer la compatibilité avec joomla 4. Mais cela demande du temps.

    Au final, si tu fais un simple module, ce sera certainement plus simple à réaliser, il te suffira de voir comment implanter un menu select 2 et de faire une requete en ajax. Toutes les solutions sont dans les liens données ci-dessus.


    laurent00 aime ceci.
    Joomla User Group (JUG) Lille : https://www.facebook.com/groups/JUGLille/

    Commentaire


    • #17
      bonsoir, je progresse ...
      ce code me permets de récupérer la liste des mots dans ma BDD et de la mettre dans une liste déroulante
      maintenant il faut que j'arrive à prendre le résultat du select pour afficher l'enregistrement correspondant au mot ...
      LJ

      Code PHP:
      <?php
      defined
      ('_JEXEC') or die('Restricted Access');

      use 
      Joomla\CMS\Factory;

      $db Factory::getDbo();

      $query $db->getQuery(true);

      $query->select($db->quoteName(array('mot''tg_pl')))
      ->
      from($db->quoteName('#__tasawaq'));

      $db->setQuery($query);

      $results $db->loadAssocList();

      ?>
      <html>
      <body>
      <select name='categorie'>
      <?php foreach ($results as $row) { ?>
      <option value=' <?php echo $row[mot]; ?> '>
      <?php echo $row['mot']; ?>
      <?php 
      ?>
      </select>


      </body>
      </html>
      mon avatar : http://www.ingall-niger.org

      Commentaire


      • #18
        Envoyé par daneel Voir le message
        Merci je viens juste de voirt ton message avant celui poster tout à l'heure
        merci je regarde cela ...

        LJ
        mon avatar : http://www.ingall-niger.org

        Commentaire


        • #19

          merci Daneel, mais je crois que je vais attendre epour l'ajax de réussir la chose sans, tant pis si la page doit être recharger, au moins cela me permet de comprendre car avec ajax, je suis perdu ...
          voici mon bout de code, d'abord je récupère la liste de mot dnas ma table
          puis je l'affiche dans une datalist, mais ensuite je n'arrive pas à récupérrer la valeur sélectionnée pour pourvoir afficher l'enregistrement qui correspond ...

          Code HTML:
          <?php defined('_JEXEC') or die('Restricted Access');
          use Joomla\CMS\Factory;
          $db = Factory::getDbo();
          $query = $db->getQuery(true);
          $query->select($db->quoteName(array('id', 'mot', 'tg_pl')))
          ->from($db->quoteName('#__tasawaq'));
          $db->setQuery($query);
          $results = $db->loadAssocList();
          
          /**foreach ($results as $row) {
          echo "<p>" . $row['mot'] . ", " . $row['tg_pl'] . "</p>";
          }*/
          
          ?>
          <html>
          <body>
          
          <form action="" method="POST">
          <datalist name="mot" id="list">
          <?php foreach ($results as $row) { ?>
          <option value=' <?php echo $row['mot']; ?> '>
          <?php echo $row['mot'];?>
          <?php } ?>
          </datalist>
          <input autocomplete="on" list="list" type="text" />
          </form>
          
          
          </body>
          </html>
          Dernière édition par laurent00 à 18/02/2021, 21h42
          mon avatar : http://www.ingall-niger.org

          Commentaire


          • #20
            Bonsoir

            Cela sera un peu rude mais que fais ton code ? Au mieux, tu affiches une liste déroulante avec quelques valeurs. C'est le strict minimum pour ton projet : afficher la liste.

            Mais ensuite ?

            Logiquement, une extension Joomla (que ce soit un module ou un composant) ne doit pas s'embêter de déclarer le tag html ou body; tout ça, c'est pris en charge par ton template.

            Intéresse-toi aux liens fournis par Yann à savoir soit créer un vrai composant (model-vue-controlleur) soit un module (mais auquel cas il faudra t'intéresser à com_ajax pour les interactions avec la base de données après sélection d'une valeur).

            La route que tu es occupé à prendre est celle de créer un script en dehors de toutes normes et est externe à Joomla (si ce n'est de faire une requête base de données). C'est loin d'être la plus propre et le plus pérenne.

            Bonne soirée.
            Christophe (cavo789)
            Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be
            Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)​

            Commentaire


            • #21
              Daneel Cavo, merci de me cadrer
              donc j'ai fais un module de base avec le helper et tout et tout ..
              j'ai intégré le select2 qui va chercher la liste d'un attribut dnas ma BDD et l'affiche dans le select ci-dessous
              sans doute que la boucle foreach est à transformer en requête ajax si j'ai bien compris ...
              mais la je sèche


              Code PHP:
              <select class="test1" style="width: 220px;" id="town" name="town">
              <option selected="selected" value="0"> - Please select - </option>
              <?php foreach ($results as $row) { ?>
              <option value=' <?php echo $row['mot']; ?> '>
              <?php echo $row['mot'];?>
              <?php 
              ?>
              </select>
              Dernière édition par laurent00 à 18/02/2021, 23h14
              mon avatar : http://www.ingall-niger.org

              Commentaire


              • #22
                Bonjour

                Lis ton code ... Tu ne fais jamais que de déclarer une liste déroulante et c'est tout. Il te faut un formulaire avec une action et une méthode. L'action sera d'appeler com_ajax (il existe des docs, voir https://docs.joomla.org/Using_Joomla_Ajax_Interface/fr).

                Autre lien (cherche "Joomla module com_ajax") https://www.itoctopus.com/how-to-use...onent-com_ajax

                Bonne prog
                laurent00 aime ceci.
                Christophe (cavo789)
                Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be
                Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)​

                Commentaire


                • #23
                  meerci Cavo de ta persévérance avec moi
                  mais là je sèche j'ai testé des choses mais je comprends pas vraiment ce que je fais...
                  est-il possible de bien vérifier qu'au moins ma base de travail est correcte

                  Merci LJ
                  mon avatar : http://www.ingall-niger.org

                  Commentaire


                  • #24
                    bonsoir
                    sincèrement je ne m'en sort pas avec ajax, j'avoue ne pas comprendre la chose ...
                    donc en attente je souhaite passer par un input quitte à recharger la page
                    mais là aussi je n'arrive pas à récupérer le choix de mon select
                    visible ici

                    Code PHP:
                    <?php defined('_JEXEC') or die;

                    //affiche les erreurs
                    ini_set('display_errors'1);
                    ini_set('display_startup_errors'1);
                    error_reporting(E_ALL);

                    JHtml::_('formbehavior.chosen''select');
                    JHtml::_('formbehavior2.select2''.test1');

                    $document =& JFactory::getDocument();
                    $document->addCustomTag'<link rel="stylesheet" type="text/css" href="'JURI::base() . 'modules/mod_tasawaq/tmpl/tasawaq.css" title="default" />' );


                    use 
                    Joomla\CMS\Factory;
                    $app Factory::getApplication(); // equivalent of $app = JFactory::getApplication();
                    $input $app->input;


                    $db Factory::getDbo();
                    $query $db->getQuery(true);
                    $query->select($db->quoteName(array('id''mot''tg_pl')))
                    ->
                    from($db->quoteName('#__tasawaq'));

                    $db->setQuery($query);
                    $results $db->loadAssocList();
                    ?>

                    <script>
                    function JouerSon() {
                    var sound = document.getElementById("beep");
                    sound.play();
                    }
                    </script>

                    <form method="POST" action="">
                    <select class="test1" style="width: 220px;" name="mot">
                    <option selected="selected" value=""><h1> - chercher un mot - </h1></option>
                    <?php foreach ($results as $row) { ?>
                    <option value="<?php echo $row["mot"]; ?>"
                    <?php echo isset($_POST["mot"])&&$_POST["mot"]==$row["mot"]?" selected":"";?>>
                    <?php echo $row["mot"];?>
                    </option>
                    <?php ?>
                    </select>
                    <input type="submit" value="Traduire" name ="choix"/>

                    <?php //debug code
                    echo 'Var POST : '.count($_POST).'<pre>';
                    print_r($_POST);
                    echo 
                    '</pre>'?>


                    <?php
                    $p1 
                    $input->get('mot''non trouvé''STRING');
                    echo 
                    $p1;
                    ?>
                    </form>
                    mon avatar : http://www.ingall-niger.org

                    Commentaire


                    • #25
                      j'ai aussi testé la méthode GET

                      mis une action dans mon form du style
                      Code PHP:
                      $uri = JURI::getInstance();
                      $url = $uri->toString();

                      action="<?php echo JRoute::_($url); ?>"
                      voir un index.php

                      et même testé Jinput

                      Code PHP:
                      JFactory::getApplication()->inputet ensuite tu le récupères avec $variable $jinput->get('mot''default_value''filter');. 
                      mais sans résultat !?

                      j'ai l'impression que mon module ne traite pas la méthode POST, mais aussi que le Input ne recharge pas la page !

                      Lj
                      Dernière édition par laurent00 à 22/02/2021, 20h24
                      mon avatar : http://www.ingall-niger.org

                      Commentaire


                      • #26
                        Hello.

                        Il faudrait t'inspirer d'une vue de Joomla.

                        Déjà ton formulaire html ne fait pas d'action, il ne renvoie de pas de requête au serveur.

                        Si tu regardes dans les templates de vues de Joomla tu trouveras de truc comme cela (exemple admin de com_contact) :
                        Code:
                        <form action="<?php echo JRoute::_('index.php?option=com_contact'); ?>" method="post" name="adminForm" id="adminForm">
                        Ici l'url ne contient pas de notion de vue ou de contrôleur/methode à exécuter, car la variable task est passé en post, voir plus bas dans le formulaire (même fichier) :
                        Code:
                        <input type="hidden" name="task" value="" />
                        C'est juste pour te dire qu'il te faut une url d'envoie du formulaire pour sevoir ce que tu veux faire en cliquant sur le bouton de validation.

                        Ensuite dans le contrôleur de la même vue tu trouveras comment récupérer le contenu des variables (get ou post).
                        Là on récupère le tableau de id sélectionnées pour un traitement de type batch.
                        Code PHP:
                        $ids    $this->input->get('cid', array(), 'array'); 
                        $this->input étant effectivement une instance de la classe Jinput initialisée dans le constructeur de a classe héritée.

                        Sinon tu récupères les variables de formulaire ainsi :
                        Code PHP:
                        $p_dir JFactory::getApplication()->input->getString('install_directory'); 
                        (à noter que getString est une notation de get avec un filtre de type string -3ème paramètre de la méthode get, le 2ème étant la valeur implicite-)

                        ou bien sûr :

                        ici un récupère la variable 'task', elle peut être passée en post (cas des boutons de formulaire dans l'admin par exemple ou la valeur de task (définie en hidden voir exemple ci*dessus) et renseignée par javascript lors du club sur un bouton d'action (bandeau du haut en admin avec les actions possibles dépendant de l'ACL), mais aussi en get dans l'url. jinput cherchera dans les 2 types.
                        Code PHP:
                        $input  JFactory::getApplication()->input;
                        ...
                        $task $input->get('task'); 
                        Si tu utilises la classe JForm (conseillée voir ici...) elle seront dans un tableau dépendant du formulaire.
                        Tu peux les récupérer ainsi dans le tableau $formData :
                        Code PHP:
                        $app JFactory::getApplication();
                        $formData $app->input->get('jform', array(), 'array');
                        ....
                        $CodeClub$formData['codeclub']; 
                        Comme dit n'hésite pas à chercher dans le code du CMS pour t'inspirer quand tu commences à coder sous Joomla.
                        Dernière édition par roland_d_alsace à 23/02/2021, 10h21
                        laurent00 aime ceci.
                        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


                        • #27
                          merci bien
                          j'ai réussi à récupérer mon $_POST["mot"]
                          il ne me reste plus qu'a interroger mon $results = $db->loadAssocList(); qui ramène les données de l'enregistrement $_POST["mot"]
                          ou dois-je refaire une nouvelle interrigation de ma bdd avec un Where ?
                          et coment sortir les données de $results ?
                          LJ

                          Code PHP:
                          $db Factory::getDbo();
                          $query $db->getQuery(true);
                          $query->select($db->quoteName(array('id''mot','ts_m''ts_g''ts_pl''ts_or''ts_com''tg_m','tg_g','tg_pl','tg_or','tg_com')))
                          ->
                          from($db->quoteName('#__tasawaq'));

                          $db->setQuery($query);
                          $results $db->loadAssocList(); 

                          mon avatar : http://www.ingall-niger.org

                          Commentaire


                          • #28
                            bon j'ai finalement réussi
                            Code PHP:
                            $results $db->loadAssocList("mot");
                            $mot $_POST["mot"];
                             echo 
                            $results[$mot]["ts_g"]; 
                            il me restera à voir pour l'ajax, mais je ne vais pas le faire de suite, donc je mets ce post en résolvé et vous remercie tous
                            LJ
                            mon avatar : http://www.ingall-niger.org

                            Commentaire

                            Annonce

                            Réduire
                            Aucune annonce pour le moment.

                            Partenaire de l'association

                            Réduire

                            Hébergeur Web PlanetHoster
                            Travaille ...
                            X