Joomla.it Forum
Non solo Joomla... => Sviluppo => : playpaf 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
-
il tuo problema sta qua
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
-
Come mi consigli di fare?
-
Potrei fare:
var idDiv_<?php echo $idDb; ?> = <?php echo $idDb; ?>;
in modo che la var sia univoca, che ne pensi?
-
certo, basta che la dichiari nel ciclo dimodoche ce ne siano piu istanze
-
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!!! :)
-
Scusa ma intanto xche non passi come variabili alla funzione countdown quelle due var che definisci esternamente?
-
Vuoi dire:
var intCountDown
var idDiv
?
Come parametri della funzione? Se puoi, mi scrivi il codice in modo che non faccio errori.
Grazie...
-
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
-
Ho capito poco ( :D ), ma proverò a fare quello che mi hai detto!
Grazie per l'aiuto!
-
Ci ho prvato, ma non ci sono riuscito. :'(
Puoi fornirmi maggiori dettagli?
Grazie