Création de module

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

  • [Problème] Création de module

    Bonjour,
    Je cherche à créer un module permettant d'avoir la liste des participants à un évènement.
    Au chargement je crée un combox avec la liste des évènements et sur changement je requete une 2ième fois pour afficher un tableau.
    Le chargement du combo se passe bien, par contre quand je change la valeur il ne se passe rien.
    Code:
    <?php
    
    defined('_JEXEC') or die('Restricted Access');
    use Joomla\CMS\Factory;
    use Joomla\CMS\Language\LanguageHelper;
    $input = Factory::getApplication()->input;
    $nowdate = JFactory::getDate('now', new DateTimeZone('Europe/Berlin'));
    $db = Factory::getDbo();
    $query = $db->getQuery(true);
    $query->select($db->quoteName(array('id', 'title', 'next')))
    ->from($db->quoteName('jm38_icagenda_events'))
    ->where($db->quoteName('next') .' >= '. $db->quote( $nowdate ))
    ->order($db->quoteName('next') . ' DESC');
    //->setLimit('20');
    $db->setQuery($query);
    $results = $db->loadObjectList();
    
    function loadTableData() {
    $selected = JFactory::getApplication()->input->get('selected', '', 'STRING');
    $db = JFactory::getDbo();
    $query = $db->getQuery(true);
    $query->select($db->quoteName(array('t.eventid', 't.userid', 't.people', 'u.id', 'u.name','u.email')));
    $query->from($db->quoteName('jm38_icagenda_registration', 't'));
    $query->join('LEFT', $db->quoteName('jm38_users', 'u') . ' ON (' . $db->quoteName('t.userid') . ' = ' . $db->quoteName('u.id') . ')');
    $query->where($db->quoteName('t.eventid') . ' = ' . $db->quote($selected));
    $db->setQuery($query);
    $results = $db->loadObjectList();
    echo json_encode($results);
    jexit();
    }
    ?>
    <script type="text/javaScript">
    function updateTable(selectedValue) {
    console.log('updateTable called with selectedValue = ', selectedValue);
    jQuery.ajax({
    url: 'index.php?option=com_ajax&module=mod_listing_part icipant&method=loadTableData&format=json&selected= ' + selectedValue,
    success: function(response) {
    var tableData = JSON.parse(response);
    var tableHtml = '<table>';
    tableHtml += '<thead><tr><th>Nom</th><th>Mail</th><th>Nombres</th></tr></thead>';
    tableHtml += '<tbody>';
    for (var i = 0; i < tableData.length; i++) {
    var row = tableData[i];
    tableHtml += '<tr><td>' + row.name + '</td><td>' + row.email + '</td><td>' + row.people + '</td></tr>';
    }
    tableHtml += '</tbody></table>';
    
    jQuery('#table-container').html(tableHtml);
    },
    error: function(xhr, status, error) {
    console.error(xhr.responseText);
    }
    });
    }
    </script>
    <select name="mon_combobox" onchange="updateTable(this.value)">
    <?php foreach ($results as $result) : ?>
    <option value="<?php echo $result->id; ?>"><?php echo $result->title; ?></option>
    <?php endforeach; ?>
    </select>
    <div id="table-container"></div>
    Auriez vous une idée d'ou vient le problème svp?

  • #2
    Bonjour,

    Juste pour tester votre appel AJAX, il suffit d'entrer
    <votre adresse web>/index.php?option=com_ajax&module=mod_listing_parti cipant&method=loadTableData&format=json&selected=< votre date>

    et vous devriez voir ce que votre module répond.

    Mais, si vous êtes en développement Joomla 4, la structure d'un module n'est pas aussi simple : voir https://docs.joomla.org/J4.x:Creatin...mple_Module/fr

    Pour faire fonctionner la partie AJAX, cela passe par le helper de votre module et le ServiceProvider. Voir la discussion https://joomla.stackexchange.com/que...e-for-joomla-4

    De plus, il faut prévoir de ne plus utiliser jQuery en remplaçant jQuery.ajax par Joomla.request.

    Pour info, j'utilise cette structure Joomla 4 dans plusieurs modules dont Simple Isotope (qui n'est plus aussi simple) : https://github.com/conseilgouz/mod_simple_isotope_j4


    Pascal
    If anything can go wrong, it will...If I can help, I will ..https://conseilgouz.com

    Commentaire


    • #3
      Bonjour Pascal,
      Je suis allé un peu vite en collant mon code, mon site tourne sous Joomla 3.10.
      Quand je fais le test que te me décris, dans le debogeur j'ai : le fichier helper.php est manquant.

      Commentaire


      • #4
        En J3, l'appel AJAX fonctionne en lien avec la methode getAjax qui doit être dans le helper du module : voir https://docs.joomla.org/Using_Joomla_Ajax_Interface/fr

        Pascal
        If anything can go wrong, it will...If I can help, I will ..https://conseilgouz.com

        Commentaire

        Annonce

        Réduire
        Aucune annonce pour le moment.

        Partenaire de l'association

        Réduire

        Hébergeur Web PlanetHoster
        Travaille ...
        X