Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14

Discussione: Tasto "chiudi"

  1. #1

    Tasto "chiudi"

    Ciao a tutti.

    Per un sito ho l'esigenza di inserire un avviso per i visitatori. Un semplice <div> con delle informazioni. Nel box ci sarà un tasto "chiudi" per chi ha già letto quell'avviso. Non ho problemi a far "chiudere" il box (display: none quando l'utente schiaccia il tasto), ma non ho idea di come "registrare" l'azione in modo che ad ogni refresh non torni l'avviso. Cookie?

    p.s. uso jQuery come framework

    Grazie in anticipo.

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    pillola cookie, non mi risulta nulla per jquery, ma un occhio al sito la darei (per scrupolo)
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Ciao andrea, del thread che mi hai linkato purtroppo non ci ho capito granché... poi mi sembra una cosa troppo complessa rispetto a quello che realmente mi serve. grazie comunque

  4. #4
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Chiaramente quella discussione spiga i cookie con esempi, prova a vedere anche qui se trovi qualcosa di semplice
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  5. #5
    Mmmhh... sono giorni ormai che cerco qualcosa di "semplice"... ma niente.

  6. #6
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Originariamente inviato da Alej
    Mmmhh... sono giorni ormai che cerco qualcosa di "semplice"... ma niente.
    Secondo me fai prima a fartelo col copia-incolla non sie è sempre fortunati, poi dipende cosa intendi tu per semplice dato che la gestione dei cookie di per se non è semplicissima.
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  7. #7
    Ciao,
    invece di gestire i cookie manualmente lato client (non è proprio una passeggiata, basta cercare cookie su questo forum per rendersene conto) potresti risolvere facilmente lato server con le sessioni.

    Se il tuo sito è su server linux e hai a disposizione il php prova a caricare nella root del tuo sito un file prova.php contenente questo:


    codice:
    <?php session_start(); ?>
    <html>
    <head>
    </head>
    <body>
    
       <div>
          questa c'è sempre
       </div>
    
    <?php
       if (!$_SESSION['flag']) {
          $_SESSION['flag'] = true;
    ?>
          <div>
             questa invece c'è solo la prima volta
          </div>
    <?php
       }
    ?>
    
       <div>
          anche questa c'è sempre
       </div>
    
    </body>
    </html>
    e poi richiamalo con w w w.tuosito.it/prova.php. Dovresti ottenere quello che vuoi.

    Le sessioni sono un modo automatico di gestire i cookie, è il server che se ne occupa, tu non devi fare niente.

    E' necessario solo inserire la session_start e poi testare se una variabile qualsiasi (l'ho chiamata flag ma puoi scegliere liberamente il nome) è stata già settata a true o no e se la risposta è no visualizzare la div e settarla.
    Tutto qui.

    Se il tuo server e windows devi fare la stessa cosa in asp (chiedi al forum di quel linguaggio).

    Ciao
    La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
    www.beppegrillo.it

  8. #8
    Grazie mille. Era proprio quello che cercavo.
    L'unica cosa è che il comando va dato SOLAMENTE quando clicco sul pulsante "chiudi".
    E' un problema secondo te?

  9. #9
    Sì, si può fare in vari modi ma tutti hanno qualche problema. Te ne illustro qualcuno così potrai scegliere.

    Il fatto è che la soluzione che ti ho postato ha un grosso limite che è quello di delegare al server una decisione che spetta al client.

    Se si tratta di un semplice refresh la cosa non appare evidente perché l'utente chiede al server di reinviare la pagina, il server si fa i suoi conti e decide se inviarla con la div o senza. E tutto va bene.

    Se invece si tratta di cliccare su un pulsante la cosa è diversa perché l'utente in quel caso non chiede esplicitamente un reinvio della pagina e quindi non si aspetta che questo avvenga ma, d'altra parte, occorre comunicare al server che il pulsante è stato cliccato e questo si può fare solo tramite un form che ricarichi la pagina.

    In altre parole nel momento in cui l'utente clicca per chiudere la div non gli si chiuderà la div ma gli si ricaricherà la pagina senza div. E le due cose sono molto diverse anche se il risultato è lo stesso.

    Insomma, secondo me è una brutta soluzione. Se avessi letto con più attenzione il tuo post iniziale avrei potuto accorgermene subito visto che già lì parlavi del pulsante di chiusura. I'm sorry.

    Tutto considerato quindi la soluzione formalmente corretta resta quella che avevi scelto inizialmente cioè di fare tutto in locale tramite "display:none" e cookie.

    Se però quella soluzione risulta impraticabile ... questo è il codice, valuta tu se può andarti bene:

    codice:
    <?php session_start(); ?>
    <html>
    <head>
    </head>
    <body>
    
       <div>
          questa c'è sempre
       </div>
    
    <?php
       if ($_GET['f'] == "x") {
          $_SESSION['flag'] = true;
       }
       if (!$_SESSION['flag']) {
    ?>
          <div style="border:1px solid red; width:300px;">
             leggi questo testo e poi clicca su chiudi
             <form method="get" action="prova.php">
                <input type="hidden" name="f" value="x">
                <input type="submit" value="chiudi">
             </form>
          </div>
    <?php
       }
    ?>
    
       <div>
          anche questa c'è sempre
       </div>
    
    </body>
    </html>
    come vedi ho inserito un form che invia, via get, una variabile di nome f e valore x.

    Ho usato il get invece del post per evitare che al refresh compaia la finestrella di richiesta di reinvio dei dati che disturberebbe ulteriormente il navigatore.

    In questo modo la variabile di session che impedisce successivi reinvii non viene impostata a true dopo il primo invio ma solo se dal get è stata ricevuta la variabile f con valore x cioè solo se il pulsante è stato cliccato.

    Come ti dicevo questa è una soluzione che non mi piace a causa del doppio invio della pagina ma questo forse si può risolvere intercettando, via js, la richiesta di refresh e inserendo, sempre via js, la variabile di get nell'url. In questo caso quindi il div si potrebbe chiudere con display:none e si eviterebbe la doppia chiamata al server (a meno che non venga esplicitamente richiesta con un refresh). Così su due piedi non saprei dirti come intercettare il refresh ma sicuramente si può fare, per puntare all'url invece credo che si usi this.location.

    Un'altra soluzione può essere quella di aprire un pop-up la prima volta gestendo l'evento onLoad Però se i pop-up sono bloccati questo non funziona.

    Comunque questo è il codice:

    codice:
    <?php session_start(); ?>
    <html>
    <head>
    </head>
    
    <?php
       if (!$_SESSION['flag']) {
          $_SESSION['flag'] = true;
    ?>
          <body onLoad="javascript:window.open('avviso.htm','Testo_Preliminare','width=600,height=450,left=50,top=50,scrollbars=yes').creator;">
    <?php
       } else {
    ?>
          <body>
    <?php
       }
    ?>
    
       <div>
          questa c'è sempre
       </div>
    
       <div>
          anche questa c'è sempre
       </div>
    
    </body>
    </html>
    chiaramente devi fare un'altra pagina, avviso.htm, con la div da visualizzare una sola volta.

    Vedi tu, spero di averti dato qualche spunto.
    Ciao
    La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
    www.beppegrillo.it

  10. #10
    Sembra funzionare alla grande. Stasera lo provo e ti faccio sapere. Grazie!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.