par
cerber » 07 juil. 2005, 10:19
en fait on va laisser tomber l'histoire du last-modified et faire plus simple avec jpspan :
- un fonction php qui retourne la date de dernière modif dans la bdd
- ta page html (qu'on va transformer pour y mettre un peu de php) avec un petit code java qui :
- appelle le script php et récupère la date
- raffraichi la page si la date de dernière modif a changé
voila un code "simplifié" :
page php *serveur* de "mesUtilitaires.php"
<?php
define ('JPSPAN_ERROR_DEBUG',TRUE);
require_once '../JPSpan.php';
require_once JPSPAN . 'Server/PostOffice.php';
//-----------------------------------------------------------------------------------
class modifBDD{
function getDate() {
$date= ....;//une date valide
return date('r',$date);
}
}
$S = & new JPSpan_Server_PostOffice();
$S->addHandler(new modifBDD());
//-----------------------------------------------------------------------------------
// Generates the Javascript client by adding ?client to the server URL
//-----------------------------------------------------------------------------------
if (isset($_SERVER['QUERY_STRING']) && strcasecmp($_SERVER['QUERY_STRING'], 'client')==0) {
// Compress the Javascript
// define('JPSPAN_INCLUDE_COMPRESS',TRUE);
$S->displayClient();
} else {
require_once JPSPAN . 'ErrorHandler.php';
$S->serve();
}
?>
code html/php client :
<?php
header( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" );
header( "Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . "GMT" );
header( "Cache-Control: no-cache, must-revalidate" );
header( "Pragma: no-cache" );
// Just a utility to help the example work out where the server URL is...
function path() {
$basePath = explode('/',$_SERVER['SCRIPT_NAME']);
$script = array_pop($basePath);
$basePath = implode('/',$basePath);
if ( isset($_SERVER['HTTPS']) ) {
$scheme = 'https';
} else {
$scheme = 'http';
}
echo $scheme.'://'.$_SERVER['SERVER_NAME'].$basePath;
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<script type="text/javascript" src="<?php path(); ?>/mesUtilitaires.php?client"></script>
<script type="text/javascript">
var dateInitiale = Date.parse('<?php echo date('r'); ?>');
// on va passer par un systeme asynchrone
// (en utilisant le handler ci dessous)
// sinon l'utilisateur ne pourra pas utiliser la page pendant les requêtes
// ceci ne fait que gerer les reponse, l'appel est un peu plus bas
var CompletionHandler = {
// Callback method
// note ici que le nom de méthode est le même qu'en php
// mais en minuscules. Je sais pas d'ou viens la limitation
getdate: function(result) {
if(Date.parse(result)>dateInitiale){
//Raffraichir la page
}
}
}
//la fonction JS qui va appeller le script php
// on va la déclancher via un timer
function checkRefresh() {
// Create du client distant
// note ici que le nom de classe est le même qu'en php
// mais en minuscules. Je sais pas d'ou viens la limitation
var a = new modifbdd(modifBDDHandler);
// Son met un timeout de 3 secondes pour pas attendre pour rien
a.timeout = 3000;
// Ignore timeouts
a.clientErrorFunc = function(e) {
if ( e.code == 1003 ) {
// Ignore...
} else {
alert(e);
}
}
// on appelle la methode distante
// même contrainte avec les minuscules
a.getdate();
}
// le timer toute les 5 secondes
// (dont 3 max d'attentes de l'appel précédent)
setTimeout("checkRefresh()",5000);
</script>
...
en fait on va laisser tomber l'histoire du last-modified et faire plus simple avec jpspan :
[list][*]un fonction php qui retourne la date de dernière modif dans la bdd[*]ta page html (qu'on va transformer pour y mettre un peu de php) avec un petit code java qui :
[list][*]appelle le script php et récupère la date
[*]raffraichi la page si la date de dernière modif a changé[/list][/list]
voila un code "simplifié" :
page php *serveur* de "mesUtilitaires.php"
[php]<?php
define ('JPSPAN_ERROR_DEBUG',TRUE);
require_once '../JPSpan.php';
require_once JPSPAN . 'Server/PostOffice.php';
//-----------------------------------------------------------------------------------
class modifBDD{
function getDate() {
$date= ....;//une date valide
return date('r',$date);
}
}
$S = & new JPSpan_Server_PostOffice();
$S->addHandler(new modifBDD());
//-----------------------------------------------------------------------------------
// Generates the Javascript client by adding ?client to the server URL
//-----------------------------------------------------------------------------------
if (isset($_SERVER['QUERY_STRING']) && strcasecmp($_SERVER['QUERY_STRING'], 'client')==0) {
// Compress the Javascript
// define('JPSPAN_INCLUDE_COMPRESS',TRUE);
$S->displayClient();
} else {
require_once JPSPAN . 'ErrorHandler.php';
$S->serve();
}
?>[/php]
code html/php client :
[php]<?php
header( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" );
header( "Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . "GMT" );
header( "Cache-Control: no-cache, must-revalidate" );
header( "Pragma: no-cache" );
// Just a utility to help the example work out where the server URL is...
function path() {
$basePath = explode('/',$_SERVER['SCRIPT_NAME']);
$script = array_pop($basePath);
$basePath = implode('/',$basePath);
if ( isset($_SERVER['HTTPS']) ) {
$scheme = 'https';
} else {
$scheme = 'http';
}
echo $scheme.'://'.$_SERVER['SERVER_NAME'].$basePath;
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<script type="text/javascript" src="<?php path(); ?>/mesUtilitaires.php?client"></script>
<script type="text/javascript">
var dateInitiale = Date.parse('<?php echo date('r'); ?>');
// on va passer par un systeme asynchrone
// (en utilisant le handler ci dessous)
// sinon l'utilisateur ne pourra pas utiliser la page pendant les requêtes
// ceci ne fait que gerer les reponse, l'appel est un peu plus bas
var CompletionHandler = {
// Callback method
// note ici que le nom de méthode est le même qu'en php
// mais en minuscules. Je sais pas d'ou viens la limitation
getdate: function(result) {
if(Date.parse(result)>dateInitiale){
//Raffraichir la page
}
}
}
//la fonction JS qui va appeller le script php
// on va la déclancher via un timer
function checkRefresh() {
// Create du client distant
// note ici que le nom de classe est le même qu'en php
// mais en minuscules. Je sais pas d'ou viens la limitation
var a = new modifbdd(modifBDDHandler);
// Son met un timeout de 3 secondes pour pas attendre pour rien
a.timeout = 3000;
// Ignore timeouts
a.clientErrorFunc = function(e) {
if ( e.code == 1003 ) {
// Ignore...
} else {
alert(e);
}
}
// on appelle la methode distante
// même contrainte avec les minuscules
a.getdate();
}
// le timer toute les 5 secondes
// (dont 3 max d'attentes de l'appel précédent)
setTimeout("checkRefresh()",5000);
</script>
...[/php]