私はもう一度SOコミュニティに少しの助けを求めています。
Joomlaの「クイズ」コンポーネントを変更して、必要な動作をするようにしています。私が今やろうとしているのは、コンポーネントの「更新」動作を変更することです。基本的に、すべてのクイズにはタイムアウトがあります。つまり、ユーザーがクイズにアクセスできなくなったため、タイマーが0になると、クイズが送信されます。ただし、このコンポーネントのデフォルトの動作では、ページが更新されると、タイマーは最初に設定された時間(たとえば、10分)にリセットされます。
リフレッシュした場合に備えて、タイマーを残したところから継続させたいのです。
私は3、4年前からPHPを使っていないので、ちょっと迷っています。
目的の動作を実現するために、初期時間(クイズが開かれたとき)と「現在」の時間(ロード時には0に設定されていますが、更新時に必要です)を(implodeを介して)保存するCookieを設定しています。リロード時間を保存するためにCookieを「更新」します)。
最初の時間と現在の時間で、経過した時間を計算し、タイマーを中断したところから配置することができます。
問題は、javascript'onbeforeunload'を使用してCookieを「更新」しようとしているため、Cookieに更新時間を取得することができます。しかし、何らかの理由で、それはまったく何もしていません。クッキーの内容を見に行くと、クッキーが設定されたときからすべてが同じです。
Cookieを更新するには、Cookieを削除してから再度設定する必要があることはわかっていますが、失敗しています。
サンプルコードは次のとおりです。
//This is responsible for setting the cookie (via PHP):
<?php
$name = "progress";
$now = 0;
$time_diff = 0;
$expire = time() + 3600;
$data = array(time(), $now, $time_diff, $this->quiz->time_limit);
//$var = implode(',', $data);
if(isset($_COOKIE[$name])) {
/* If defined, update the timer */
} else {
setcookie($name, implode(',',$data), $expire);
}
echo $_COOKIE[$name];
echo "<br />";
echo $this->quiz->time_limit;
?>
そして、これは「更新」イベントを検出するためのものです(PHPを実行するJavascriptを使用)。
window.onbeforeunload = function() {
<?php
$name = "progress";
$list = explode($_COOKIE[$name]);
//delete cookie
setcookie($name, "", time() - 3600);
//Update the fields
$list['1'] = time(); //now - refresh time
$list['2'] = $list['1'] - $list['0']; //time_diff
//Set the cookie again
setcookie($name, implode(',', $list), time() + 3600);
?>
}
誰かがこのコードの何が問題になっているのか指摘できますか?