Supporto » Varie ed eventuali » Impostare valore a variabile globale PHP da Javascript

  • Risolto nick2020nm

    (@nick2020nm)


    Ciao a tutti,

    ho un piccolo problema, ho cercato possibili soluzioni, purtroppo al momento nulla.
    Ho un form CF7 di prenotazione ad un webinar.

    Intercettando l’evento DOM ‘wpcf7mailsent’ so esattamente quando la mail è stata inviata.
    A questo punto mi servirebbe semplicemente poter settare a ‘1’ il valore di una variabile globale php ‘abil_WR_pren’ preceenemente dichiarata.

    Posto il codice

    —– Nel file Functions.php:
    <?php
    $GLOBALS[‘$abil_WR_pren’] = 0;
    ……..
    …..

    function cf7Tracking() {
    if ( is_page(10) ) {
    echo ‘<script>
    document.addEventListener( \’wpcf7mailsent\’, function( event ) {
    // CODICE DI TRACCIAMENTO
    if ( 2129 == event.detail.contactFormId ) {

    alert( “DEBUG Mail inviata – The contact form ID is 2129” );
    // Qui vorrei settare a ‘1’ la variabile globale PHP $GLOBALS[‘$abil_WR_pren’] dichiarata in precedenza

    }
    }, false );
    </script>’;
    }
    }
    add_action(‘wp_enqueue_scripts’, ‘cf7Tracking’);`

    ……
    ….
    ?>

    Ringrazio chiunque possa fornirmi un piccolo aiuto in tal senso 😉

    Nick

Stai visualizzando 6 risposte - dal 1 al 6 (di 6 totali)
  • Ciao @nick2020nm ,

    ho un piccolo problema, ho cercato possibili soluzioni, purtroppo al momento nulla.

    Non mi sembra un problema piccolo.
    Ci sono varie cose da dire sul passaggio di un valore dal javascript a php.

    Mi limito a far notare, riguardo a javascript, che non capisco cosa sia l’evento DOM wpcf7mailsent. In genere gli eventi DOM sono cose tipo click oppure keydown da applicare ad uno specifico elemento html, oppure se il documento o la pagina è stata completamente caricata DOMContentLoaded.

    Credo sia impossibile che js reagisca ad wpcf7mailsent

    Ciao.

    Chi ha creato la discussione nick2020nm

    (@nick2020nm)

    Ciao Luca,

    intanto grazie per la risposta.

    Premesso che quella porzione di codice, sta funzionando intercettando l’evento di “mail inviata” da uno specifico form, nel mio caso verifico la pagina ed il form di mio interesse con il relativo ID.

    Allora procedo con ordine:

    1. Riguardo l’evento DOM ti riporto la documentaz di CF7
    wpcf7mailsent — Fires when an Ajax form submission has completed successfully, and mail has been sent.

    2. JS come ti dicevo reagisce perfettamente con l’evento DOM
    Il problema che da codice JS non è possibile settare una variabile PHP (seppur globale)…
    Un modo per portarsi dietro un’informaz. da una pagina all’altra (dopo invio form, oltre in URL poco sicuro ) ho visto che può essere un campo nascosto nel form della pagina di origine.
    Tuttavia CF7 dopo l’invio mail cancella l’array $_POST

    Dopo varie ricerche e tentativi, ho risolto con l’utilizzo di una sessione.
    Bisogna intercettare evento wpcf7_before_send_mail e trasferire i dati del form appena compilato nell’array di sessione.
    Leggo i dati e poi distruggo la sessione

    Grazie in ogni caso per l’attenzione
    Buon codice!

    Nick

    Ciao @nick2020nm ,

    1. Riguardo l’evento DOM ti riporto la documentaz di CF7
    wpcf7mailsent — Fires when an Ajax form submission has completed successfully, and mail has been sent.

    Buono a sapersi. Un evento creato appositamente da cf7 allora. Devo averlo esaminato un po’ superficialmente perché non l’ho trovato. Hai anche il link alla documentazione citata?

    Il problema che da codice JS non è possibile settare una variabile PHP (seppur globale)…

    In effetti non so cosa ci sia oltre ajax o alla più nuova fetch per avere una rielaborazione ‘al volo’ di parte della pagina.

    Dopo varie ricerche e tentativi, ho risolto con l’utilizzo di una sessione.
    [ … ]
    Leggo i dati e poi distruggo la sessione

    Sì, è meglio fare attenzione con le sessioni perché wp ha una certa idiosincrasia – sperimentata personalmente – con le medesime. Per ottenere un risultato simile, anche migliore, wp adopera le registrazioni temporanee WordPress Transients API.
    Ciao!

    Chi ha creato la discussione nick2020nm

    (@nick2020nm)

    Ciao Luca

    Buono a sapersi. Un evento creato appositamente da cf7 allora. Devo averlo esaminato un po’ superficialmente perché non l’ho trovato. Hai anche il link alla documentazione citata?

    https://contactform7.com/dom-events/

    Per ottenere un risultato simile, anche migliore, wp adopera le registrazioni temporanee WordPress Transients API.

    Non le conosco hai qualche link di documentazione da suggerirmi?

    Ciao,
    Nick

    Ciao @nick2020nm ,

    Non le conosco [ WordPress Transients API ] hai qualche link di documentazione da suggerirmi?

    Questo link per la documentazione ufficiale:

    https://developer.wordpress.org/apis/handbook/transients/

    e poi, per un esempio di uso:
    /wp-admin/includes/dashboard.php :1156 per get_transient() in wp 5.8.1
    /wp-admin/includes/dashboard.php :1173 per set_transient() in wp 5.8.1

    Buon lavoro!

    Chi ha creato la discussione nick2020nm

    (@nick2020nm)

    Grazie Luca!

Stai visualizzando 6 risposte - dal 1 al 6 (di 6 totali)
  • Devi essere collegato per rispondere a questo topic.