Back to top

Autore Topic: countdown multipli  (Letto 2832 volte)

Offline playpaf

  • Esploratore
  • **
  • Post: 91
    • Mostra profilo
countdown multipli
« il: 17 Nov 2012, 15:57:38 »
Ciao a tutti.
Sto realizzando un sito che visualizza vari countdown in base ad una data letta dal DB. Ho creato questa porzione di codice:
       <div id="main<?php echo $content->id; ?>">
             <div class="prova">
                                <p>
                                    <?php
                                        $dateDB = 5554343434;
                                        $arrayDateDB = explode("-", $dateDB);
                                        $month=$arrayDateDB[1];
                                        $dayArray = explode(" ", $arrayDateDB[2]);
                                        $day=$dayArray[0];
                                        $year=$arrayDateDB[0];
                                        $timeDB = explode(":", $dayArray[1]);
                                        $hours = $timeDB[0];
                                        $minutes = $timeDB[1];
                                        $seconds = $timeDB[2];
                                        $target = mktime($hours, $minutes, $seconds, $month, $day, $year);
                                        $today = time ();
                                        $difference =($target-$today);
                                        $seconds = $difference;
                                        $idDb = "cntdwn".$content->id;
                                    ?>
                                   
                                    <html>
                                        <script language="JavaScript" type="text/JavaScript">
                                            var intCountDown = <?php echo $seconds; ?>;
                                            //var idDiv = 'cntdwn_'+<?php echo $idDb; ?>;
                                            var idDiv = <?php echo $idDb; ?>;
                                           
                                            function countDown() {
                                                if (intCountDown <= 0) {
                                                    <?php echo $idDb; ?>.innerHTML  = '0';
                                                    return;
                                                } else {
                                                   
                                                    var difference = intCountDown--;
                                                    var oneMinute=60 //minute unit in seconds
                                                    var oneHour=60*60 //hour unit in seconds
                                                    var oneDay=60*60*24 //day unit in seconds
                                                    var dayfield=Math.floor(difference/oneDay)
                                                    var hourfield=Math.floor((difference-dayfield*oneDay)/oneHour)
                                                    var minutefield=Math.floor((difference-dayfield*oneDay-hourfield*oneHour)/oneMinute)
                                                    var secondfield=Math.floor((difference-dayfield*oneDay-hourfield*oneHour-minutefield*oneMinute))
                                                   
                                                    dayfield = dayfield+'';
                                                    if (dayfield.length<2) {
                                                        dayfield = "0" + dayfield;
                                                    }
                                                   
                                                    hourfield = hourfield+'';
                                                    if (hourfield.length<2) {
                                                        hourfield = '0' + hourfield;
                                                    }
                                                   
                                                    minutefield = minutefield+'';
                                                    if (minutefield.length<2) {
                                                        minutefield = '0' + minutefield;
                                                    }
                                                   
                                                    secondfield = secondfield+'';
                                                    if (secondfield.length<2) {
                                                        secondfield = '0' + secondfield;
                                                    }
                                                   
                                                   
                                                    <?php echo $idDb; ?>.innerHTML  = dayfield + ' Giorni ' + hourfield + ':' + minutefield + ':' + secondfield;
                                                   
                                                    setTimeout("countDown()", 999);
                                                }
                                            }
                                        </script>
                                       
                                        <body onload="javascript:countDown();">
                                            <div id="<?php echo $idDb; ?>"></div>
                                        </body>
                                    </html>     
                                </p>
                             </div>
       </div>
Se inserisco solo una riga nel DB, il countdown funziona in modo corretto, ma se ci sono due righe da far visualizzare con due countdown differenti, si visualizza solo l'ultimo. Sapreste indicarmi cosa sbaglio?

Ciao e grazie

Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
Re:countdown multipli
« Risposta #1 il: 17 Nov 2012, 17:16:18 »
il tuo problema sta qua
Codice: [Seleziona]
var intCountDown = <?php echo $seconds?>;
 //var idDiv = 'cntdwn_'+<?php echo $idDb?>;
var idDiv = <?php echo $idDb?>;

tu sovrascrivi questi valori che non sono univoci per ogni esecuzione quindi e chiaro che ti prende l'ultimo
BRAINCODE
Da Psd a Joomla - Sviluppo componenti joomla - SEO con Joomla
x-brain

Offline playpaf

  • Esploratore
  • **
  • Post: 91
    • Mostra profilo
Re:countdown multipli
« Risposta #2 il: 18 Nov 2012, 15:29:38 »
Come mi consigli di fare?

Offline playpaf

  • Esploratore
  • **
  • Post: 91
    • Mostra profilo
Re:countdown multipli
« Risposta #3 il: 18 Nov 2012, 15:30:41 »
Potrei fare:
var idDiv_<?php echo $idDb; ?> = <?php echo $idDb; ?>;

in modo che la var sia univoca, che ne pensi?

Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
Re:countdown multipli
« Risposta #4 il: 18 Nov 2012, 16:07:01 »
certo, basta che la dichiari nel ciclo dimodoche ce ne siano piu istanze
BRAINCODE
Da Psd a Joomla - Sviluppo componenti joomla - SEO con Joomla
x-brain

Offline playpaf

  • Esploratore
  • **
  • Post: 91
    • Mostra profilo
Re:countdown multipli
« Risposta #5 il: 18 Nov 2012, 18:54:20 »
Ho fatto la prova col questo codice ma non va:
var intCountDown_<?php echo $idDb; ?> = <?php echo $seconds; ?>;

Aggiungo che il codice che ho inserito nel 1° post, è già inserito in un ciclo FOR. Inserendo $idDb in un array e stampandolo, ho notato che la prima riga viene inserita due volte mentre la seconda è presente solo una volta. Forse è questo il problema?
Dovrei stampare i vari countdown come quelli presenti in alcuni siti in cui puoi comprare dei coupon. La data di scadenza è letta dal DB.

Grazie per l'aiuto!  ;)

P.S. se hai qualche altra idea, è ben accetta!!!  :)

Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
Re:countdown multipli
« Risposta #6 il: 18 Nov 2012, 22:51:48 »
Scusa ma intanto xche non passi come variabili alla funzione countdown quelle due var che definisci esternamente?
BRAINCODE
Da Psd a Joomla - Sviluppo componenti joomla - SEO con Joomla
x-brain

Offline playpaf

  • Esploratore
  • **
  • Post: 91
    • Mostra profilo
Re:countdown multipli
« Risposta #7 il: 19 Nov 2012, 00:35:52 »
Vuoi dire:
var intCountDown
var idDiv
?

Come parametri della funzione? Se puoi, mi scrivi il codice in modo che non faccio errori.
Grazie...

Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
Re:countdown multipli
« Risposta #8 il: 19 Nov 2012, 01:01:25 »
ora che ci guardo con attenzione il tuo problema e che richiami il countdown come evento singolo attaccandolo al tag body nell'onload, ti renderai conto anche tu che questo approccio non fa  altro che richiamare il countdown songolarmente e se la tua funzione si trova nel ciclo non fai altro che ridichiararla x volte  e ne viene eseguita solo una giustamente cioe l'ultima. Hai a disposizione un framework cioe mootools
quindi intanto potresti insertire l'evento con

window.addEvent('domready',function(){

})

poi nei tag che contengono il countdown aggiungi un po di valori

<div id="<?php echo $idDb; ?>" class="cdowncontainer" data-time="<?php echo $seconds; ?>"></div>

quindi

window.addEvent('domready',function(){
 var cdowns=$$('.cdowncontainer'); // prende tutti i countdown
cdowns.each(function(el){ 
countDown(el,parseInt(el.get('data-time'),10));
})
})

quindi passi alla funzione l'elemento del dom che contiene il countdown e i secondi

poi il resto devi farlo da solo perche e troppo lungo da spiegare

BRAINCODE
Da Psd a Joomla - Sviluppo componenti joomla - SEO con Joomla
x-brain

Offline playpaf

  • Esploratore
  • **
  • Post: 91
    • Mostra profilo
Re:countdown multipli
« Risposta #9 il: 19 Nov 2012, 01:08:28 »
Ho capito poco (  :D ), ma proverò a fare quello che mi hai detto!

Grazie per l'aiuto!

Offline playpaf

  • Esploratore
  • **
  • Post: 91
    • Mostra profilo
Re:countdown multipli
« Risposta #10 il: 21 Nov 2012, 21:45:57 »
Ci ho prvato, ma non ci sono riuscito.  :'(
Puoi fornirmi maggiori dettagli?
Grazie

 



Web Design Bolzano Kreatif