Back to top

Autore Topic: [Risolto] Ajax su modulo in costruzione  (Letto 2535 volte)

Offline 01Danny

  • Esploratore
  • **
  • Post: 141
    • Mostra profilo
[Risolto] Ajax su modulo in costruzione
« il: 15 Apr 2015, 11:40:51 »
Ciao a tutti,


sto costruendo un modulo per joomla 3 e sono al punto che ho bisogno di usare ajax per filtrare dei dati solo che non riesco a capire come joomla si aspetta questo ajax.php, ovviamente ho fatto un pò ricerca e ho letto del componente com_ajax solo che da quello che ho capito quello lo si usa solo nel caso non fossi io l'originale developer del modulo.


Al momento ho una cartella "asset" nella root del mio modulo (com_blog) e dentro questa il file ajax.php. il file viene chiamato correttamente tramite js al click di un pulsante e restituisce correttamente i dati. Il problema è che non posso fare delle query all'interno di ajax.php o richiamare dei parametri del modulo quindi ho pensato di mettere la funzione nel helper.php e poi richiamare la funzione da ajax.php solo che non so come implementare helper.php nel file ajax.php.


é questo il giusto e standard modo di implementare ajax? se si mi sapreste dare delle dritte su come implementare helper.php in ajax.php?


Grazie mille  ;)


« Ultima modifica: 16 Apr 2015, 13:46:01 da 01Danny »

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:Ajax su modulo in costruzione
« Risposta #1 il: 15 Apr 2015, 14:23:15 »
ho letto del componente com_ajax solo che da quello che ho capito quello lo si usa solo nel caso non fossi io l'originale developer del modulo.
no: se non sei lo sviluppatore del componente cui si riferisce il modulo, NON del modulo in sé.

Al momento ho una cartella "asset" nella root del mio modulo (com_blog) e dentro questa il file ajax.php. il file viene chiamato
sbagliato: tutte le chiamate devono passare dall'entry point di joomla (/index.php), anche perché qualcuno potrebbe impedire di richiamare da web files diversi dal citato (questioni di sicurezza). un modulo deve quindi passare dal suo componente, e qui si torna al punto precedente

é questo il giusto e standard modo di implementare ajax?
no. è sbagliato per quanto detto sopra. vedi https://docs.joomla.org/Using_Joomla_Ajax_Interface

ciao,
marco
mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline 01Danny

  • Esploratore
  • **
  • Post: 141
    • Mostra profilo
Re:Ajax su modulo in costruzione
« Risposta #2 il: 15 Apr 2015, 16:12:56 »
Ciao Marco,Grazie per la molto competente risposta.

quindi tenendo presente che il modulo che sto sviluppando non dipenda da nessun componente a questo punto, seguendo il link che mi ha inviato, penso che dovrei:

file.js al click del bottone:

Codice: [Seleziona]
//creao un array con i dati da dare da elaboare alla funzione
        selectedData['author'] = $('#btnAuthorFilter').attr('value');
   selectedData['category'] = $('#btnCategoryFilter').attr('value');
   selectedData['keyword'] = $('#inpKeywordFilter').val();
//lancio ajax
    $.ajax({
           type: 'post',
      url: "index.php?option=com_ajax&module=mod_dc_blog&method=post&format=json",
           data: {filterData: selectedData},
           success: function( data ) {$('#blogModule').html(data)}
           });



giusto? se il codice sopra è giusto, dove metto la funzione che prendi i dati dell'array creato, gli elabora e restituisce il risultato? nell' helper.php? se si, come la richiamo e ottengo i risultati di quella funzione?


Grazie mille per l'aiuto

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:Ajax su modulo in costruzione
« Risposta #3 il: 15 Apr 2015, 16:51:47 »
guarda che è tutto scritto nel link che ti postato prima...

leggi con attenzione perché stai sbagliando
mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline 01Danny

  • Esploratore
  • **
  • Post: 141
    • Mostra profilo
Re:Ajax su modulo in costruzione
« Risposta #4 il: 15 Apr 2015, 18:27:57 »
Grazie ancora e scusa ma proprio non riesco a farlo girare.

allora questo il file js (situato in: media/mod_dc_blog/js)
al click di un determinato bottone viene chiamata questa funzion
Codice: [Seleziona]

function showFilteredArticles(){
   var url = document.location.origin;
   var selectedData = {};

        selectedData['author'] = $('#btnAuthorFilter').attr('value');
   selectedData['category'] = $('#btnCategoryFilter').attr('value');
   selectedData['keyword'] = $('#inpKeywordFilter').val();
    $.ajax({
           type: 'post',
           url: "?option=com_ajax&module=dc_blog&method=getFilterData&format=debug",
           data: {filterData: selectedData},
           success: function( data ) {
                     $('#blogModule').html(data)
                    }
           });
}

questo l'helper.php:

Codice: [Seleziona]

defined('_JEXEC') or die('Restricted access');

abstract class mod_dc_blogHelper
{
      public static function getFilterDataAjax(&$params)
   {   
      $test = "Urray!";
     
   return($test);
        }
}

Quando clicco il bottone non mi compare la scritta "Urray!" ma [message:protected] => Method getFilterDataAjax does not exist.

Dove sto sbagliando?

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:Ajax su modulo in costruzione
« Risposta #5 il: 16 Apr 2015, 08:16:11 »
secondo me è sbagliato il nome della classe: modDc_blogHelper o modDcblogHelper
non mi ricordo l'algoritmo, ma io evito accuratamente caratteri che non siano a..z nei nomi  ;)

ciao
mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline 01Danny

  • Esploratore
  • **
  • Post: 141
    • Mostra profilo
Re:Ajax su modulo in costruzione
« Risposta #6 il: 16 Apr 2015, 11:45:26 »
Grande.. ho cambiato il nome della classe da mod_dc_blogHelper a moddcblogHelper e adesso la funzione viene trovata.


Il problema è che adesso nella funzione chiamata da ajax non posso leggere i parametri che arrivano dal back end (categorie selezionate etc etc )


Come risolvo questo?

Offline 01Danny

  • Esploratore
  • **
  • Post: 141
    • Mostra profilo
Re:Ajax su modulo in costruzione
« Risposta #7 il: 16 Apr 2015, 13:45:38 »
Risolto


Questo il codice usato


Codice: [Seleziona]

        $module = JModuleHelper::getModule('mod_dc_blog');
$params= new JRegistry($module->params);
$Narticles= (int) $params['N-articles'];


Sono sicuro che questo post sarà d'aiuto per molti  ;)

 



Web Design Bolzano Kreatif