[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Здраствуйте, Нужна срочно помощь м счетчиком време
Architect
Движок сайта Groupon script
Проблема с отображением счетчика времени отсчета на сайте! смысл в том, что в админке устанавливается дата времени начала и окончания продажи товаров, но в этом коде отображается только отсчет одного товара, а другие стоят на месте!
вот код:

Свернутый текст


$pagination = new pagination();
$pagination->createPaging($queryString,10);
$resultSet = $pagination->resultpage;

if(mysql_num_rows($resultSet)>0)
{
while($row = mysql_fetch_array($resultSet))
{
if($type=="P" || $row["timeleft"] > "00:01:00")
{
$coupon_value = $row["coupon_value"];
?>



<div class="times_display_cl">
<!--
Countdown Timer starts here-->
<
script type="text/javascript">

dateFuture = new Date('<?php echo date("D M d Y H:i:s", strtotime($row["coupon_enddate"])); ?>');
//pass the date format similar to date function

function gettimes(){
var url = '/gettimestamp.php';
$.post(url,function(e){
document.getElementById("generaldate").innerHTML=e;
});
}
gettimes();


function GetCount(){

gettimes();
var dateNow = new Date(document.getElementById("generaldate").innerHTML); //grab current date
var amount = dateFuture.getTime() - dateNow.getTime(); //calc milliseconds between dates
delete dateNow;

var days=0;var hours=0;var mins=0;var secs=0;var nodays="";var nohrs="";var nomins="";
var amount = Math.floor(amount/1000);//kill the "milliseconds" so just secs
var days=Math.floor(amount/86400);//days
var days = days*24;
var amount=amount%86400;
var hours=days + Math.floor(amount/3600);//hours
var amount=amount%3600;
var mins=Math.floor(amount/60);//minutes
var amount=amount%60;
var secs=Math.floor(amount);//seconds
if(days == 0 && hours == 0 && mins == 0 && secs == 0 )
{
window.location='<?php echo DOCROOT; ?>';exit;
}
if(days != 0 || hours != 0)
{
nohrs = hours +((hours!=1)?"":"");
if(nohrs < 10 && nohrs >= 0){nohrs = '0'+ nohrs;}
//alert(nohrs);
document.getElementById('tot_hrs2').innerHTML=nohrs;
}
else
{
document.getElementById('tot_hrs2').innerHTML='';
document.getElementById('hrs').innerHTML='';
}

if(days != 0 || hours != 0 || mins != 0)
{
nomins = mins +((mins!=1)?"":"");
if(nomins < 10 && nomins >= 0){nomins = '0'+ nomins;}
//alert(nomins);
document.getElementById('tot_mins2').innerHTML=nomins;
}
else
{
document.getElementById('tot_mins2').innerHTML='';
document.getElementById('mins').innerHTML='';
}

if(secs < 10 && secs >= 0){secs = '0'+ secs;}
document.getElementById('tot_secs2').innerHTML = secs;
setTimeout("GetCount()", 1000);

}
window.onload=GetCount;//call when everything has loaded
</script>


<?[SPAN=darling]php[/SPAN] //display timeleft page onload

$timeleft = dateDiff($row["coupon_enddate"],date('Y-m-d H:i:s' ));
if(isset($timeleft['days']))
{
$default_hr = $timeleft['days'] * 24; //calculate days into hours

if(isset($timeleft['hours']))
$default_hr = $default_hr + $timeleft['hours'];
}
else
$default_hr = '';

if(isset($timeleft['minutes']))
{
$default_min = $timeleft['minutes'];
}
else
$default_min = '';

if(isset($timeleft['seconds']))
{
$default_sec = $timeleft['seconds'];
}
else
$default_sec = '';

?>

<h2>
<
span class="display_time_cl_sym"></span>
<
span class="display_time_cl" id="tot_hrs2"><?[SPAN=darling]php[/SPAN] echo $default_hr; ?></span>
<
span class="display_time_cl" id="hrs"> : </span>
<
span class="display_time_cl" id="tot_mins2"><?[SPAN=darling]php[/SPAN] echo $default_min; ?></span>
<
span class="display_time_cl" id="mins"> : </span>
<
span class="display_time_cl" id="tot_secs2"><?[SPAN=darling]php[/SPAN] echo $default_sec; ?></span>
</
h2>
<
p><span id="generaldate" style="display:none;"></span></p>
</
div>


<?[SPAN=darling]php[/SPAN]
} //end of if

}

echo '<table border="0" width="400" align="center" class="clr">';
echo '<tr><td align="center">';
$pagination->displayPaging();
echo '</td></tr>';
echo '</table>';

}
else
{?>

<div class="no_data"><?[SPAN=darling]php[/SPAN] echo $language['no_deals_avail']; ?></div>
<?[SPAN=darling]php[/SPAN]
}
?>





Спустя 5 часов, 5 минут, 56 секунд (26.08.2011 - 12:25) Architect написал(а):
Ребята, может предложите варианты?

Спустя 10 минут, 40 секунд (26.08.2011 - 12:36) Игорь_Vasinsky написал(а):
Меня вот этот кусок смущает

                                        
<h2>
<
span class="display_time_cl_sym"></span>
<
span class="display_time_cl" id="tot_hrs2">
<?php echo $default_hr; ?></span>
<
span class="display_time_cl" id="hrs"> : </span>
<
span class="display_time_cl" id="tot_mins2">
<?php echo $default_min; ?></span>
<
span class="display_time_cl"id="mins"> :</span>
<
span class="display_time_cl" id="tot_secs2">
<?php echo $default_sec; ?></span>
</
h2>


Он выводит статику(без JS);

Спустя 8 минут, 10 секунд (26.08.2011 - 12:44) sharki написал(а):
Architect
Есть у JQ готовый плагин для таких целей, countdown

http://keith-wood.name/countdown.html

Спустя 50 минут, 8 секунд (26.08.2011 - 13:34) Architect написал(а):
Игорь_Vasinsky, дело в том, что на главной странице отображаются продажи товаров, у каждого есть счетчик отсчета времени, этот код работает только на один товар, а остальные счетчики на товары не работают, т.е. стоят на месте...

Спустя 5 минут, 34 секунды (26.08.2011 - 13:40) Architect написал(а):
sharki, может предложишь варианты... как это написать...?

Спустя 1 час, 25 минут, 56 секунд (26.08.2011 - 15:05) sharki написал(а):
Architect
Там уже все за тебя написано, тебе надо только скопипастить.

PS там JS smile.gif

Спустя 14 минут, 51 секунда (26.08.2011 - 15:20) ИНСИ написал(а):
Architect у вас привязка идет к одному ID для всех, поэтому только для одного купона работает код. Попробуйте так:
Свернутый текст
<?
$pagination = new pagination();
$pagination->createPaging($queryString,10);
$resultSet = $pagination->resultpage;

if(mysql_num_rows($resultSet)>0)
{
$number = 1;
while($row = mysql_fetch_array($resultSet))
{
if($type=="P" || $row["timeleft"] > "00:01:00")
{
++$number;
$coupon_value = $row["coupon_value"];
?>



<div class="times_display_cl">
<!--
Countdown Timer starts here-->
<
script type="text/javascript">

dateFuture = new Date('<?php echo date("D M d Y H:i:s", strtotime($row["coupon_enddate"])); ?>');
//pass the date format similar to date function

function gettimes(){
var url = '/gettimestamp.php';
$.post(url,function(e){
document.getElementById("generaldate_<?=$number?>").innerHTML=e;
});
}
gettimes();


function GetCount(){

gettimes();
var dateNow = new Date(document.getElementById("generaldate_<?=$number?>").innerHTML); //grab current date
var amount = dateFuture.getTime() - dateNow.getTime(); //calc milliseconds between dates
delete dateNow;

var days=0;var hours=0;var mins=0;var secs=0;var nodays="";var nohrs="";var nomins="";
var amount = Math.floor(amount/1000);//kill the "milliseconds" so just secs
var days=Math.floor(amount/86400);//days
var days = days*24;
var amount=amount%86400;
var hours=days + Math.floor(amount/3600);//hours
var amount=amount%3600;
var mins=Math.floor(amount/60);//minutes
var amount=amount%60;
var secs=Math.floor(amount);//seconds
if(days == 0 && hours == 0 && mins == 0 && secs == 0 )
{
window.location='<?php echo DOCROOT; ?>';exit;
}
if(days != 0 || hours != 0)
{
nohrs = hours +((hours!=1)?"":"");
if(nohrs < 10 && nohrs >= 0){nohrs = '0'+ nohrs;}
//alert(nohrs);
document.getElementById('tot_hrs2_<?=$number?>').innerHTML=nohrs;
}
else
{
document.getElementById('tot_hrs2_<?=$number?>').innerHTML='';
document.getElementById('hrs_<?=$number?>').innerHTML='';
}

if(days != 0 || hours != 0 || mins != 0)
{
nomins = mins +((mins!=1)?"":"");
if(nomins < 10 && nomins >= 0){nomins = '0'+ nomins;}
//alert(nomins);
document.getElementById('tot_mins2_<?=$number?>').innerHTML=nomins;
}
else
{
document.getElementById('tot_mins2_<?=$number?>').innerHTML='';
document.getElementById('mins_<?=$number?>').innerHTML='';
}

if(secs < 10 && secs >= 0){secs = '0'+ secs;}
document.getElementById('tot_secs2_<?=$number?>').innerHTML = secs;
setTimeout("GetCount()", 1000);

}
window.onload=GetCount;//call when everything has loaded
</script>


<?php //display timeleft page onload

$timeleft = dateDiff($row["coupon_enddate"],date('Y-m-d H:i:s' ));
if(isset($timeleft['days']))
{
$default_hr = $timeleft['days'] * 24; //calculate days into hours

if(isset($timeleft['hours']))
$default_hr = $default_hr + $timeleft['hours'];
}
else
$default_hr = '';

if(isset($timeleft['minutes']))
{
$default_min = $timeleft['minutes'];
}
else
$default_min = '';

if(isset($timeleft['seconds']))
{
$default_sec = $timeleft['seconds'];
}
else
$default_sec = '';

?>

<h2>
<
span class="display_time_cl_sym"></span>
<
span class="display_time_cl" id="tot_hrs2_<?=$number?>"><?php echo $default_hr; ?></span>
<
span class="display_time_cl" id="hrs_<?=$number?>"> : </span>
<
span class="display_time_cl" id="tot_mins2_<?=$number?>"><?php echo $default_min; ?></span>
<
span class="display_time_cl" id="mins_<?=$number?>"> : </span>
<
span class="display_time_cl" id="tot_secs2_<?=$number?>"><?php echo $default_sec; ?></span>
</
h2>
<
p><span id="generaldate_<?=$number?>" style="display:none;"></span></p>
</
div>


<?php
} //end of if

}

echo '<table border="0" width="400" align="center" class="clr">';
echo '<tr><td align="center">';
$pagination->displayPaging();
echo '</td></tr>';
echo '</table>';

}
else
{?>

<div class="no_data"><?php echo $language['no_deals_avail']; ?></div>
<?php
}
?>


Спустя 3 часа, 45 минут, 57 секунд (26.08.2011 - 19:06) Architect написал(а):
INSIDIOUS, код я попробовал, но без изменений...

Спустя 1 час, 53 минуты, 51 секунда (26.08.2011 - 21:00) Architect написал(а):
может есть у кого-то еще какие-то варианты?

Спустя 13 часов, 41 минута, 42 секунды (27.08.2011 - 10:42) killer8080 написал(а):
Код кривой до безобразия. Вот хотя бы это что за бред
 nohrs = hours +((hours!=1)?"":"");


Один и тот же кусок JS кода выводиться многократно, в цикле пагинации, объявляются одни и те же функции в цикле :blink: Странно что это вообще работает. Да ещё и аяксом раз в секунду стучаться на сервер, чтоб узнать время - полный изврат и бессмысленная нагрузка на сервер! Тут нужно не исправлять, а все выкинуть и написать с нуля!

Спустя 1 час, 49 минут, 36 секунд (27.08.2011 - 12:31) killer8080 написал(а):
вот накидал вариант (могут быть ошибки)
Свернутый текст
<?php
$pagination = new pagination();
$pagination->createPaging($queryString,10);
$resultSet = $pagination->resultpage;

if(mysql_num_rows($resultSet)>0)
{
$kupons = array();
$i = 0;
while($row = mysql_fetch_assoc($resultSet))
{
if($type=="P" || $row["timeleft"] > "00:01:00")
{
$coupon_value = $row["coupon_value"];
$kupons[]= strtotime($row["coupon_enddate"]) - time();
?>



<div class="times_display_cl">


<?php //display timeleft page onload

$timeleft = dateDiff($row["coupon_enddate"],date('Y-m-d H:i:s' ));
if(isset($timeleft['days']))
{
$default_hr = $timeleft['days'] * 24; //calculate days into hours

if(isset($timeleft['hours']))
$default_hr = $default_hr + $timeleft['hours'];
}
else
$default_hr = '';

if(isset($timeleft['minutes']))
{
$default_min = $timeleft['minutes'];
}
else
$default_min = '';

if(isset($timeleft['seconds']))
{
$default_sec = $timeleft['seconds'];
}
else
$default_sec = '';

?>

<h2>
<
span class="display_time_cl_sym"></span>
<
span class="display_time_cl" id="time_line_<?php echo $i;?>">
<?php echo $default_hr . ' : ' . $default_min . ' : ' . $default_sec; ?>
</span>
</
h2>

</
div>


<?php
$i++;
} //end of if

}

if(count($kupons) > 0):
?>
<script type="text/javascript">
<!--


var kupons = {
times : [<?php echo implode(', ', $kupons); ?>],

count : function(){
var continueCount = false;
for(var i = 0; i < this.times.length; i++){
this.times[i]--;

if(this.times[i] >= 0){
continueCount = true;
document.getElementById("time_line_" + i).innerHTML = this.getTimeString(this.times[i]);
}

}


if(!continueCount)
clearInterval(this.timer);
},

getTimeString : function(time){
var days = Math.floor(time / 86400),
hours = this.roundTime(Math.floor(time / 3600) % 24),
minutes = this.roundTime(Math.floor(time / 60) % 60),
seconds = this.roundTime(time % 60);

return (days > 0 ? "Дней: " + days + " <br />" : "") + hours + ":" + minutes + ":" + seconds;
},

roundTime : function(time){
return time > 9 ? time : "0" + time;
},

timer : setInterval("kupons.count()", 1000);
}


//-->
</script>

<?php
endif;
echo '<table border="0" width="400" align="center" class="clr">';
echo '<tr><td align="center">';
$pagination->displayPaging();
echo '</td></tr>';
echo '</table>';

}
else
{?>

<div class="no_data"><?php echo $language['no_deals_avail']; ?></div>
<?php
}
?>

Спустя 8 часов, 46 минут, 44 секунды (27.08.2011 - 21:18) Architect написал(а):
все равно не работает...((

Спустя 14 часов, 59 минут, 11 секунд (28.08.2011 - 12:17) killer8080 написал(а):
Architect
покажи выходной html.

Спустя 1 день, 3 часа, 44 минуты, 52 секунды (29.08.2011 - 16:02) Architect написал(а):
ошибка исправлена!

Спустя 4 часа, 39 минут, 41 секунда (29.08.2011 - 20:42) killer8080 написал(а):
Architect
я имел ввиду не то что было, а с моим вариантом, раз говоришь что он не работает.
Изначальный код не корректный по многим пунктам, его нужно не исправлять, а переписывать. Как я уже говорил, нельзя в цикле выводить JS код с декларациями функций - это грубая ошибка. К тому же еще и в html образуется множество элементов с одинаковым id.
Измени код на тот что я дал выше, и если он не работает, покажи html.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.