com_ajax dans composant

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

  • com_ajax dans composant

    Bonjour,

    j'utiliser parfois de l'ajax dans mes modules, mais je voudrais en faire dans un de mes composants perso, la tâche se complique malgré tout ce que j'ai pu lire sur le web depuis un moment.
    dans la doc ICI, ils disent : NOTE : si vous êtes développeur de composants, il ne vous est pas nécessaire d'utiliser com_ajax afin d'y implémenter les fonctionnalités Ajax. Vous pouvez le faire directement dans votre composant.
    L'expression 'il n'est pas nécessaire" ne veut pas dire qu'il n'est pas possible, à moins d'un problème de traduction, je cherche donc à adapter le code que j'ai l'habitude d'utiliser pour qu'il soit utilisable dans un composant.
    Voici mon code dans un module :
    Code:
    jQuery(document).ready(function($){
    
    $(document).on('click', '.mon_declencheur', function () {
    
    var data = {};
    data['mon_declencheur'] = this.value;
    
    request = {
    'option' : 'com_ajax',
    'module' : 'mon_module',
    'data' : data,
    'format' : 'raw'
    };
    $.ajax({
    type : 'GET',
    data : request,
    success: function(result) {
    
    var tab = JSON.parse(result);
    // mes actions
    
    }
    });
    return false;
    
    });
    
    });
    Bien sur le traitement PHP se fait dans le fichier helper.php du module dans la fonction :
    Code PHP:
    static function getAjax() {

    $input JFactory::getApplication()->input;
    $data = (array)$input->get('data', array(), 'array');

    // mes actions PHP qui donnent le $result

    return json_encode($result);


    comment puis-je adapter ce code pour garder à peut prêt la même configuration dans un composant ? est-ce possible ?
    car j'ai essayé toutes les solutions que j'ai trouvé qui impliquent de créer des controllers ou des vues, et je n'ai pas réussi

    Help plz, merci beaucoup

  • #2
    au pire je prends d'autres solutions que cette configuration, c'est juste que rien n'a fonctionné pour moi de ce que j'ai trouvé sur le web

    Commentaire


    • #3
      J'ai essayé une solution tirée de la doc joomla de création d'un composant, mais j'ai du encore faire quelque chose de mal ... forcément, car la réponse contient tout le code html de la page 404, voici mon code, pitié, help


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

      class 
      MoncomposantController extends JControllerLegacy
      {
      public function 
      getAjax()
      {
      if (!
      JSession::checkToken('get'))
      {
      echo new 
      JResponseJson(nullJText::_('JINVALID_TOKEN'), true);
      }
      else
      {
      parent::display();
      }
      }
      }

      /mon_composant/view/ajax/view.html.php
      Code PHP:
      <?php
      defined
      ('_JEXEC') or die;

      class 
      mon_composantViewAjax extends JViewLegacy
      {

      function 
      display($tpl null)
      {

      $document JFactory::getDocument();
      $document->addScript('/components/mon_composant/views/ajax/script.js');

      parent::display($tpl);

      }

      }

      /mon_composant/view/ajax/tmpl/default.php
      Code PHP:
      <input id="token" type="hidden" name="info_aller" />
      <
      button type="button" class="btn" id="ajax-button" >click !</button

      /mon_composant/view/ajax/script.js
      Code:
      jQuery(document).ready(function($){
      
      jQuery('#ajax-button').click(function(){
      
      var data = {};
      var token = jQuery('#token').attr('name');
      jQuery.ajax({
      data: { [token]: '1', task: 'getAjax', format: 'raw' },
      success: function(result) { console.log(result); },
      error: function() { console.log('fail'); },
      });
      
      });
      
      });

      Commentaire


      • #4
        j'ai essayé une solution "au feeling", même résultat
        Code:
        jQuery(document).ready(function($){
        
        $(document).on('click', '#ajax-button', function () {
        
        var data = {};
        
        data['token'] = $('#token').attr('name');
        
        $.ajax({
        data: data,
        url : 'index.php?option=com_moncomposant&view=ajax&layout=ajax',
        type : 'GET',
        format : 'raw',
        success: function(result) { console.log(result); },
        error: function() { console.log('fail'); },
        });
        
        });
        
        });
        bien sur l'url est testée, valide et executée, puisqu'une requete sql présente est bien effectuée sur la bdd, j'ai donc juste un problème d'info retour dans mon fichier ajax.php :
        Code PHP:
        <?php
        defined
        ('_JEXEC') or die;

        $input JFactory::getApplication()->input;
        $data = (array)$input->get('data', array(), 'array');

        $data['token2'] = 'info_retour';

        $db JFactory::getDbo();
        // une requette test bien executée dans la bdd


        echo json_encode($data);

        ?>
        je continue de cherche, en attendant que quelqu'un passe par là
        Dernière édition par Minie à 31/01/2021, 09h58

        Commentaire


        • #5
          Bon ben .. j'ai réussi

          j'ai rajouté &tmpl=component à mon URL d'appel dans le script js, après ca je n'avais plus le html de la page 404 en retour, j'avais enfin mon info de retour attendue, mais avec tout le html du header joomla et les balises body, j'ai donc mis un "exit;" à la fin de mon fichier de requete ajax.php ce qui a épuré mon résultat !

          je résume pour ceux qui galèrent comme moi :

          Fichier /components/com_moncomposant/views/ajax/view.html.php
          Code PHP:
          <?php
          defined
          ('_JEXEC') or die;

          class 
          MoncomposantViewAjax extends JViewLegacy
          {

          function 
          display($tpl null)
          {

          $document JFactory::getDocument();
          $document->addScript('/components/com_moncomposant/views/ajax/ajax.js');

          parent::display($tpl);

          }

          }
          Fichier /components/com_moncomposant/views/ajax/tmpl/default.php
          Code PHP:
          <input id="token" type="hidden" name="info_aller" />
          <
          button type="button" class="btn" id="ajax-button" >click !</button
          Fichier /components/com_moncomposant/views/ajax/tmpl/ajax.php
          Code PHP:
          <?php
          defined
          ('_JEXEC') or die;

          $input JFactory::getApplication()->input;
          $data = (array)$input->get('data', array(), 'array');

          $data['token2'] = 'info_retour';

          echo 
          json_encode($data);
          exit;

          ?>
          Fichier /components/com_moncomposant/views/ajax/ajax.js
          Code PHP:
          jQuery(document).ready(function($){

          $(
          document).on('click''#ajax-button', function () {

          var 
          data = {};

          data['token'] = $('#token').attr('name');

          $.
          ajax({
          datadata,
          url 'index.php?option=com_gixshop&view=ajax&layout=aja x&tmpl=component',
          type 'GET',
          format 'raw',
          success: function(result) {

          var 
          tab JSON.parse(result);
          console.log(result);

          },
          error: function() { console.log('fail'); },
          });

          });

          }); 
          Eddy.vh aime ceci.

          Commentaire

          Annonce

          Réduire
          Aucune annonce pour le moment.

          Partenaire de l'association

          Réduire

          Hébergeur Web PlanetHoster
          Travaille ...
          X