1

私はコードがあまり得意ではないので、答えるのに素人の用語を使ってください!

特定の時刻(つまり、ブロードキャスト時刻)までリンクを非表示にするブロードキャストサイトがあります。これは、これを行うために使用するコードです。

<?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秒ごとにページ全体を更新することで簡単に実行できることはわかっていますが、5分間閉じない「Facebookのような」ポップアップウィンドウを表示する別のコードがあるため、これは実行したくありません。クリックしない限り、ページ全体を更新すると常にポップアップウィンドウが表示されます。

誰かがスクリプトを書いて、更新スクリプトを上記のphpスクリプトにリンクできるようにしてください。そうすれば、リンクがコンテナの更新時に明らかになるときに、私は周りを見回して、これまでに適切なものを見つけられませんでしたか?

助けてくれてありがとう-大いに感謝します

4

2 に答える 2

4

悪いニュースは、PHP はブラウザに強制的に何かをさせることができないということです。これを実現するには、ajax を使用した JavaScript が必要です。しかし、クライアント側でJavaScriptが無効になっているとどうなりますか。php には小さなトリックがあります。

これがあなたができることです。

次のようにして、ライブブロードキャストが開始されるまでの秒数を決定します

$numOfSeconds = $starttime - $currtime;

次に、何秒後にブラウザを更新するかがわかったら、php でそれを行う方法を次に示します。

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

これにより、特定の時間後に移動したい任意の URL に移動します。更新したい場合は、同じページへの URL を定義します。このロジックを拡張して、必要な方法で実装できます。

アップデート1:

以下は、私がテストした作業コードです。これがあなたに役立つことを願っています:)

<?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>

これがお役に立てば幸いです。

于 2012-04-26T06:54:27.797 に答える
0

誰もあなたのために仕事をしてくれるわけではないので、誰かがあなたのスクリプトを書いてくれるのを待つ必要はありません。

一部のリンクを非表示にする必要がある時間がわかっているので、それらを非表示にするのにかかる時間を計算できます。次のようにします。

  • ユーザーは 11:50 にリクエストを行いますが、12:00 に 10 分後にリンクを非表示にする予定です
  • サーバーは、11:50 から 12:00 までの秒数を計算します。time()およびstrtotime()関数を見てください。
  • サーバーはページをユーザーに返し、リンクが非表示になるまでの秒数も返します。そのデータを非表示のフォーム値として返すことができます
  • 次に、Javascript でsetTimeout()メソッドを使用して、リンクを X 時間 (12:00 までの秒数) だけ非表示にする JavaScript 関数を呼び出します。
  • 上記のように秒数を非表示の値として記述した場合、JavaScript で document.getElementById('hidden_​​form_value').value を使用してその値を取得できます。
于 2012-04-26T06:49:30.257 に答える