Проблема с просмотром времени - PullRequest
0 голосов
/ 12 июня 2010

Я хочу отобразить время просмотра пользователя, но когда я обновлю его, оно снова будет начинаться с 0: 0: 0.Как это справится?

<?php
 $total_mints=($live_match['match_name']) * (60);

?>
<script language="javascript">
display_c(<?=$total_mints?>,'ct');
</script>

<script type="text/javascript">
function display_c(start,div){

window.start = parseFloat(start);
var end = 0 // change this to stop the counter at a higher value
var refresh=1000; // Refresh rate in milli seconds
if(window.start >= end ){

mytime=setTimeout("display_ct('"+div+"')",refresh)
}
else {alert("Time Over ");}
</script>

Ответы [ 2 ]

1 голос
/ 12 июня 2010

Когда время истекло, вы можете установить для cookie значение «Время истекло» ... Когда страница загружена, если для файла «Время истекло», вы можете отобразить предупреждение «Время истекло». Вы также можете использовать cookie для отслеживания накопленного времени просмотра.

Редактировать - добавил некоторые особенности ... но я думаю, вам придется подумать об этом еще немного.

По сути, вы хотите использовать JS для записи файла cookie, когда пользователь использует страницу, и вы хотите использовать PHP для чтения файла cookie при загрузке страницы. Вы можете использовать cookie, чтобы отслеживать только время, общее время накопления или и то, и другое. Я думаю, вы хотите обновлять cookie каждую минуту или около того?

Это будет выглядеть ЧТО-ТО примерно так - этот код просто показывает, как отслеживать, истекло или нет время с cookie, а не с накопленным временем.

<?php
$total_mints=($live_match['match_name']) * (60);
// check for cookie and only proceed if it is not expired
// can also use cookie to keep track of total accumulated number
// of minutes between session
if ($_COOKIE["yourMints"] != "expired")
{
    ?>
    <script language="text/javascript">
        display_c(<?php echo $total_mints; ?>,'ct');
    </script>
    <script type="text/javascript">
    function display_c(start,div)
    {
        window.start = parseFloat(start);
        var end = 0 // change this to stop the counter at a higher value
        var refresh=1000; // Refresh rate in milli seconds
        if(window.start >= end )
        {
            mytime=setTimeout("display_ct('"+div+"')",refresh)
        } else 
        {
            alert("Time Over ");
            // set cookie to expired
            document.cookie = "yourMints=expired";  
        }
    }
    </script>
    <?php
} else // What follows is what happens if cookies IS expired
{
    ?>
    <script type="text/javascript">
        alert("Time Over ");               
    </script>
    <?php
}
?>

Вот хорошее руководство по использованию файлов cookie JS: http://www.quirksmode.org/js/cookies.html

Здесь используется $ _COOKIE для чтения куки с PHP http://php.net/manual/en/reserved.variables.cookies.php

РЕДАКТИРОВАТЬ: Добавлено в примере JQuery после просмотра примера PlagueEditor.

Хороший скрипт PlagueEditor. Думаю, я попробую то же самое с JQuery для развлечения.

JQuery имеет простой маленький плагин cookie ... всего 40 строк кода или около того. Вот страница с таймером, сохраненным в файлах cookie, и временем ожидания 10 секунд с возможным сбросом:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <title>Time Spent on Page</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <script type="text/javascript" src="PATH-TO-YOUR-JQ-DIRECTORY/jquery-1.4.2.min.js"></script>
        <script type="text/javascript" src="PATH-TO-YOUR-JQ-DIRECTORY/cookie.js"></script>
        <script type="text/javascript">
        <!--
            $.myTimer = 
            {
                timeLimit: 10,
                displayTime: function ()
                {
                    if ($.myTimer.time < $.myTimer.timeLimit)
                    {
                        $("#timeHere").html($.myTimer.time);                 
                        $.cookie('yourMints', $.myTimer.time, { expires: 7});     
                        ++$.myTimer.time;
                        $.myTimer.toggle = setTimeout("$.myTimer.displayTime()",1000);
                    } else
                    {
                        $("#page").html('<h1>Time expired</h1>');
                    }
                }
            }
            // When the page is ready ==================================================
            $(document).ready(function()
            {
                // Read time spent on page cookie. Set it, if it doesn't exist.
                if (!$.cookie('yourMints'))
                {
                    $.cookie('yourMints', '0', { expires: 7});                 
                }
                $.myTimer.time = $.cookie('yourMints');
                // Start timeer
                $.myTimer.displayTime();
                // Reset the timer
                $("#reset").click( function() 
                {        
                    $.cookie('yourMints', '0');
                    window.location.reload();
                });
            });
        // -->
        </script>
    </head>
    <body>
        <div id="page">
            <h2>Your total time here: <span id="timeHere"></span></h2>
            You can only look at this page for 10 seconds.
        </div>
        <input id="reset" type="button" value="Reset Timer" /> 
    </body>
</html>
0 голосов
/ 12 июня 2010

Ниже представлено решение для отслеживания просматриваемого времени даже при обновлении. Он получает дату загрузки страницы и каждую секунду вычитает эту дату из указанной даты. Дата затем отображается в промежутке. Страница должна работать сама по себе. Я надеюсь, что это то, что вы искали, или, по крайней мере, помогает. Две функции были примерами W3Schools *.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <title></title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
        <script type="text/javascript">
            /**
             * getCookie and setCookie were taken from http://www.w3schools.com/JS/js_cookies.asp.
             */
            function getCookie(c_name)
            {
                if (document.cookie.length>0)
                {
                    c_start=document.cookie.indexOf(c_name + "=");
                    if (c_start!=-1)
                    {
                        c_start=c_start + c_name.length+1;
                        c_end=document.cookie.indexOf(";",c_start);
                        if (c_end==-1) c_end=document.cookie.length;
                        return unescape(document.cookie.substring(c_start,c_end));
                    }
                }
                return "";
            }

            function setCookie(c_name,value,expiredays)
            {
                var exdate=new Date();
                exdate.setDate(exdate.getDate()+expiredays);
                document.cookie=c_name+ "=" +escape(value)+
                    ((expiredays==null) ? "" : ";expires="+exdate.toUTCString());
            }

            var totalTime=0;

            var storedTime=getCookie("storedTime");
            if(storedTime.length == 0){
                //If it doesn't exist..
                storedTime=0;
            }else{
                storedTime=parseInt(storedTime);
                totalTime=storedTime;
            }

            function updateTime(){
                totalTime+=1000;
                document.getElementById("duration").innerHTML= Math.ceil(totalTime / 1000);
            }

            onbeforeunload = function(){
                setCookie("storedTime",totalTime,3);
            }            
            setInterval(updateTime, 1000);
        </script>
        Your total time here: <span id="duration"><script type="text/javascript">document.write( Math.ceil(totalTime / 1000));</script></span> seconds...
    </body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...