Autore Topic: [RISOLTO] Override com_users - Chiamata Ajax  (Letto 74 volte)

Offline andreasuriani

  • Appassionato
  • ***
  • Post: 469
  • Sesso: Maschio
  • Rag,Gran ladr.farabut, figlio di put . Direttore
    • Mostra profilo
[RISOLTO] Override com_users - Chiamata Ajax
« il: 18 Mag 2020, 10:59:53 »
Ciao a tutti,
mi trovo a dover fronteggiare l'override del componente in fase di registrazione.

Ora, quando l'utente (dopo vari passaggi) clicca sul pulsante registrati, ho la necessita di fare dei controlli prima di procedere per questo utilizzo Ajax.

Funziona tutto alla grande se non per un piccolo, minuscolo, insignificante (si fa per dire...) dettaglio: non riesco ad inglobare il file di risposta (esempio Ajax.php) nella root di joomla, ma viene letto (giustamente) come un file esterno.
Questo mi porta a non poter utlizzare le stringhe di Joomla, a creare falle di sicurezza (Conn DB, tanto per citarne una..).

Come posso ovviare a questo problema?

Stavo ragionando sul fatto di creare in piccolo componente solo per gestire queste chiamate ed inserire nel url della chiamata qualcosa del tipo


Codice: [Seleziona]
url: 'index.php?option=com_mycom_ajax&task=abc&format=raw',

Ma non mi è chiaro come far lavorare il componente in questione per restituirmi i valori che mi servono...

Qualche idea?
« Ultima modifica: 19 Mag 2020, 11:08:01 da andreasuriani »
"Ragionere che fa, batti?! - Ma, mi dà del tu?? - No No dicevo, Batti Lei? - Ah Congiuntivo!"

Offline andreasuriani

  • Appassionato
  • ***
  • Post: 469
  • Sesso: Maschio
  • Rag,Gran ladr.farabut, figlio di put . Direttore
    • Mostra profilo
Re:[RISOLTO] Override com_users - Chiamata Ajax
« Risposta #1 il: 19 Mag 2020, 11:26:28 »
Come (purtroppo) spesso accade .. si faccia una domanda (per quanto semplice o complicata che sia) e si dia una risposta.

Ho trovato l'escamotage per gestire le chiamate Ajax fatte in override "pesante" di un componente/modulo.

La prima cosa da fare è creare (esistono svariati modi nel farlo) un componente basico che abbia una view e un controller.
Io l'ho chiamato com_myajax

Nel file controller.php ho inserito il mio task (function) per verificare qualcosa.
Esempio pratico.


Verifico se il valore che immetto nel form è 1 o 2.

Default.php (del componente, modulo ecc della quale facciamo l'override)

Codice: [Seleziona]
<input class="form-control" id="test" name="test" maxlength="1"  type="text">

<div id="risultato" style="max-width: 80%;">
<button id="avanti"type="button" class="button-form-registrazione">Avanti</button>

Il file con la chiamata Ajax, sarà piu o meno questo.

Codice: [Seleziona]

    $.ajax({


     //imposto il tipo di invio dati (GET O POST)
      type: "POST",


      //Dove devo inviare i dati recuperati dal form?
      url: 'index.php?option=com_myajax&view=taskajaxes&task=validateform',


      //Quali dati devo inviare?
      data: "test=" + test,
      dataType: "html",


      //Inizio visualizzazione errori
      success: function(msg)
      {
        $("#risultato").html(msg); // espongo il risultato
// fai qualcosa.....
      },
      error: function()
      {
        alert("Chiamata fallita, si prega di riprovare..."); //sempre meglio impostare una callback in caso di fallimento
      }
    });

Nel file controller.php  dentro la classe del componente inseriamo la funzione.

Codice: [Seleziona]


public function validateform() {
$app = Factory::getApplication();   // equivalent of $app = JFactory::getApplication();
$input = $app->input;


if ($input->exists('test')) {
if ($input->get('test') == 1) {
echo 1;
jexit();
} else if ($input->get('test') == 2) {
echo 2;
jexit();
} else {
echo 'valore non valido';
jexit();
}
} else {


jexit();
}


}

il comando jexit(); fa in modo che la pagina carichi solo il valore richiesto e non restituisca l'interno html della view.

Sono consapevole che probabilmente questo non è il metodo migliore, però funziona e, se non vado errato, non ha falle di sicurezza utilizzando i parametri di Joomla..

Poi se qualcuno che ha piu esperienza e competenza di me mi vuole correggere, ne sarei ben felice!

Spero di aver, cmq, aiutato qualcuno.

A.
"Ragionere che fa, batti?! - Ma, mi dà del tu?? - No No dicevo, Batti Lei? - Ah Congiuntivo!"

 

Host

Torna su