2012-04-26 34 views
1

我不太擅長代碼,所以請在回答中使用laymans術語!在特定時間後刷新頁面元素

我已經播出網站,我躲,直到一天(即播出時間)的特定時間的鏈接,這是我用來做這個代碼:

<?php 
date_default_timezone_set('Europe/London'); 
$currtime = date('Hi'); 
// Change time 
$starttime = 2200; 
$endtime = 2300; 
$endtime = $endtime + 2400; 
$endtest = $currtime + 2400; 

?> 
<?php 

if($currtime >= $starttime && $endtest <= $endtime){ 
?> 
<a href="*broadcastlink*">LIVE NOW</a> 
<?php 
} 
else{ 
?> 
Live at 22:00 
<?php 
} 
?> 

目前,用戶必須手動這是刷新頁面有點凌亂。

我知道這可以很容易地使用JavaScript來刷新整個頁面每x秒,但我不想這樣做,因爲我有另一段代碼,顯示一個「Facebook喜歡」的彈出窗口,不關閉5分鐘,除非它們點擊,因此刷新整個頁面將不斷顯示彈出窗口。

請有人可以編寫一個腳本,這樣我可以鏈接刷新腳本PHP腳本的上方,使得在鏈路顯示時間的容器刷新,我環顧四周,發現沒有合適的那麼遠?

預先感謝任何幫助 - 非常感謝

+0

用代碼更新了我的答案。 – 2012-04-26 16:40:23

回答

3

壞消息是PHP不能強迫瀏覽器做任何事情。你需要使用Ajax來實現這一點。但是如果javascript在客戶端被禁用了呢?在php中有一個小竅門。

這裏是你可以做什麼。

確定的秒數爲直播做

$numOfSeconds = $starttime - $currtime; 

然後,一旦你知道你要多少秒刷新瀏覽器在這裏是你如何可以用PHP做後啓動。

header("refresh:$numOfSeconds;urltoanywhere.php"); 

這將帶你到任何你想在特定時間後去的網址。如果您想刷新,請將網址定義到同一頁面。你可以擴展這個邏輯來實現你想要的方式。

UPDATE1:

下面是我所測試的工作代碼。希望這可以幫助你:)

<?php 
ob_start(); 
date_default_timezone_set('Europe/London'); 
$currentPage = $_SERVER['PHP_SELF']; 
$currentTimestamp = strtotime(date('Y-m-d H:i:s')); 
//Define your startTime here in {Year-Month-Day Hour:Minute:Second} format 
$startTime = '2012-04-26 21:57:00'; 
//Define your endTime here in {Year-Month-Day Hour:Minute:Second} format. 
$endTime = '2012-04-27 22:00:00'; 
$startTimestamp = strtotime($startTime); 
$endTimestamp = strtotime($endTime); 
$numOfSecondsToReload = $startTimestamp - $currentTimestamp; 
if($currentTimestamp >= $startTimestamp && $currentTimestamp <= $endTimestamp): 
?> 
<a href="*broadcastlink*">LIVE NOW</a> 
<?php else: ?> 
<p>Live at <?php echo date('H:i', $startTimestamp); ?></p> 
<?php header("refresh:$numOfSecondsToReload;$currentPage"); ?> 
<?php endif; ?> 

UPDATE2:重新加載特定DIV的內容。這裏是你可以使用的代碼。

<div id="live"> 
    <?php 
    ob_start(); 
    date_default_timezone_set('Europe/London'); 
    $currentPage = $_SERVER['PHP_SELF']; 
    $currentTimestamp = strtotime(date('Y-m-d H:i:s')); 
    $startTime = '2012-04-27 12:42:20'; 
    $endTime = '2012-04-28 22:00:00'; 
    $startTimestamp = strtotime($startTime); 
    $endTimestamp = strtotime($endTime); 
    $numOfSecondsToReload = $startTimestamp - $currentTimestamp; 
    if($currentTimestamp >= $startTimestamp && $currentTimestamp <= $endTimestamp): 
    ?> 
    <a href="*broadcastlink*">LIVE NOW</a> 
    <?php else: ?> 
    <p>Live at <?php echo date('H:i', $startTimestamp); ?></p> 
    <?php endif; ob_end_flush(); ?> 
    <div id="timeremaining" hidden><?php echo $numOfSecondsToReload * 1000; ?></div> 
</div> 
<script src="http://code.jquery.com/jquery-latest.js"></script> 
<script type="text/javascript"> 
    var numOfMiliSecondsToReload = $('#timeremaining').html(); 
    var timeToReload = (numOfMiliSecondsToReload >= 0) ? numOfMiliSecondsToReload : 86400000; 
    $(function() { 
     $(function() { setTimeout(reloadDiv, timeToReload); }); 
     function reloadDiv() { $('#live').load(location.href);} 
    }); 
</script> 

希望這可以幫助你。

+0

讓我知道它是否適合你.. – 2012-04-26 16:45:20

+0

感謝它的工作唯一的問題是它是由於某種原因加載整個頁面的div? – user1357902 2012-04-27 16:30:44

0

沒有人會做你爲你工作,所以不要等着別人來寫腳本爲您服務。

既然你知道在什麼時候應該隱藏一些鏈接,那麼你可以計算出它需要你來隱藏他們的時間。做這樣的事情:

  • 用戶進行11:50的請求,但你打算隱藏鏈接在12:00,在十分鐘內
  • 你的服務器計算和11:50之間的秒量12:00。看看time()strtotime()的功能。
  • 您的服務器將該頁面返回給用戶,並且還返回了秒數,直到隱藏鏈接。你可以返回該數據作爲一個隱藏的表單值
  • 然後,在JavaScript中,你使用setTimeout()方法來調用JavaScript函數隱藏在時間量X(直到12:00的秒數)的鏈接。
  • 如果寫的秒的量作爲隱藏值像上面所解釋的,那麼就可以取在JavaScript通過document.getElementById(「hidden_​​form_value」)。值該值。
相關問題