ANNONCES VISUELLES
POUR UNE MANIFESTATION


PRÉSENTATION PROJET

Nous imaginons une fête du livre comprenant une grande salle où sont exposés les livres à vendre et, dans un petit amphi à l’étage, une suite d’interventions à des horaires déterminés. Il existerait un programme des interventions disponible à l’entrée, mais l’on voudrait dans la grande salle attirer l’attention sur l’imminence d’une intervention dans l’amphi grâce à des annonces visuelles sur un panneau électronique. Cette solution évite ainsi la perturbation d’annonces sonores, très dommageables dans une manifestation littéraire. Pour obtenir cela, un écran est placé dans la grande salle, relié à un PC connecté. Nous voulons que ce programme soit facilement modifiable si un imprévu survient.

Voilà par exemple le programme que nous devons présenter, nous le limitons à la matinée, ce qui est suffisant por notre démonstration:

-10h à 10h30 Guy Martin présentera son ouvrage Les châteaux en Bourbonnais.

-10h45 à 11h Remise du Prix de poésie

-11h45 à 12h30 Lecture commentée d'Henri Guillemin par Albert Dupont


5 minutes avant chaque activité, l’écran devra afficher un message bien visible:

Dans quelques minutes à l’étage:
[intitulé et horaire de la rubrique]


En dehors de ces crénaux, le panneau affichera uniquement l'heure courante.


MÉTHODE GÉNÉRALE

Nous pouvons créer une page principale où des fonctions setTimeout renvoient à des fichiers html, chacun correspondant à un item du programme comme précédemment pour le diaporama. Il est plus commode de réaliser un seul fichier dont chaque partie s'affichera en fonction du temps.

Cela nécessitera de définir certaines commandes que nous réaliserons en PHP. On pourrait ici utiliser les fonctions correspondantes javascript, ce qui serait effectivement plus rationnel en évitant ainsi un fichier d'extension php, mais nous prondrons l'habitude de réaliser en jascript uniquement ce qui est nécessaire et le reste en PHP pour la raison que nous avons expliquée antérieurement.

Notre programme consistera à réaliser un fichier qui se rafraîchit périodiquement grâce à la fonction setTimeout et à indiquer l'affichage des annonces par des commandes conditionnelles en PHP. Il nous faut pour cela préalablement obtenir l'heure courante.

Astuce
Il est nécessaire souvent de tester à part une partie du programme ou simplement une commande. Pour cela, on conservera dans le répertoire utilisé un ou plusieurs fichiers que l'on nomera par exemple test1.php, test2.php. Si l'on doit utiliser en ligne ces fichiers, ne pas oublier de les mettre hors indexation par la commande appropriée dans le head.


OBTENTION ET AFFICHAGE DE L'HEURE COURANTE

La commande date, paramétrée comme suit, permet d'obtenir l'heure en utilisant comme séparateur les deux points. G indique les heures sans zéro initial (par exemple 7 pour 7 heures et non pas 07), i indique les minutes avec zéro initial (par exemple 02 pour 2 minutes).

date("G:i");

Pour plus de précisions sur la commande date, voir avec Google en recherchant "PHP manual".

Écrivons maintenant dans le body d'un fichier que l'on nommera par exemple annonce.php le début de programme suivant:

<?

//affichage heure courante

echo "<br><br>",date("G:i"),"<br><br>";

?>

<? est la balise d'ouverture du code PHP

// affichage heure courante est un commentaire hors code du programme. déterminé par les deux slashs, il vaut uniquement pour la ligne considérée (c'est-à-dire tant qu'on ne réalise pas un retour à la ligne à l'aide de la touche Entrée).

echo "<br><br>",date("G:i"),"<br><br>"; affiche les commandes html entre guillements (ici <br>) et affiche directement le résultat de la commande date

?> balise de fermeture du code PHP

Ce programme va donner comme résultat sur l'écran, s'il est par exemple 7h02:



7:02



Pour la suite de notre programme, nous devons exprimer l'heure courante dans un format qui permet la comparaison mathématique (ce qui n'est pas le cas par exemple du format que nous avons affiché). Le plus simple pour obtenir ce résultat est de supprimer les deux-points dans la commande précédente date que nous allons réécrire de la manière suivante:

date("Gi");

Cette commande va donner, s'il est par exemple 7h02 la valeur de 702. Attention, le paramètre H qui fournit l'heure avec les zéros initiaux (par exemple 07 pour 7h) ne conviendrait pas car PHP ne lirait pas par défaut le nombre 07.

Réécrivons la portion de programme en affectant l'heure courante à la variable $heure_courante et vérifions sa valeur:

<?

//affichage heure courante

echo "<br><br>",date("G:i"),"<br><br>";

$heure_courante=date("Gi");

echo "<br><br>La variable heure courante est: ",$heure_courante,"<br><br>";

?>

Le résultat sur l'écran sera le suivant, s'il est par exemple 7h10 quand nos exécutons le programme:



7:10

La variable heure_courante est: 710



Traquenard
La variable heure_courante ne serait pas valable si la manifestation concernait des horaires nocturnes autour de minuit (passage de 1159 à 0001). Dans ce cas, il faudrait indiquer la date du jour (par exemple (passage de 231159 à 240001) ou mieux utiliser une variable indiquant le nombre de secondes correspondant à une date à partir d'une date origine, c'est la commande PHP strtotime. Une solution un peu plus compliquée, mais plus propre, il faut l'avouer.

Pour la suite du programme, nous masquerons par la commande // la ligne indiquant la valeur de la variable $heure_courante, laquelle ne doit pas être visible par le public.


RAFRAÎCHISSEMENT DU FICHIER

Il nous faut maintenant écrire le rafraîchissement du fichier par la fonction javascript setTimeout que nous allons paramétrer à 1 minute, soit 1000 millisecondes, ce qui donne (si mon fichier se nomme annonce.php):

<?

//affichage heure courante

echo "<br><br>",date("G:i"),"<br><br>";

$heure_courante=date("Gi");

//echo "<br><br>La variable heure courante
est: "$heure_courante,"<br><br>";

?>

<script language="javascript">

setTimeout("window.location.replace('annonce.php')",1000);

</script> <br><br>

Remarquez que nous avons fermé le PHP, puis ouvert le javascript pour écrire la fonction de setTimeout, puis enfin fermé le javascript. il n'aurait pas été possible d'insérer le javascript à l'intérieur des balises PHP.

Vous pouvez observer immédiatement le résultat à l'écran. L'heure affichée est rafraîchie toutes les minutes, ce qui est suffisant pour notre programme d'annonces.


INDICATION DES ANNONCES

Il faut maintenant introduire dans la partie de code PHP les annnonces grâce à la fonction conditionnelle PHP if suivante facilement compréhensible par elle-même. Voilà pour le 1er évènement:

if ($heure_courante>954 AND $heure_courante<1000)
{
?>
Dans quelques minutes à l'étage...<br><br>
10h à 10h30 Guy Martin présentera son ouvrage Les châteaux en Bourbonnais
<?
}

La fonction if, déterminée par la partie entre parenthèse, exécute la portion de programme se trouvant entre les 2 accolades { et }, laquelle concerne du html. Nous avons donc fermé le PHP pour l'écrire, puis rouvert le PHP pour écrire l'accolade de fermeture du if. Le texte de l'annonce va donc s'afficher à 9h55 et disparaître à 10h00 (en négligeant une imprécision de 1 minute).

Cependant, il nous faut vérifier que ce programme fonctionne correctement sans attendre qu'arrive l'heure affichée du programme. Pour cela, nous exécuterons cette portion de programme dans un fichier test (par exemple test.php) où nous remplacerons l'horaire dans la condition par l'horaire actuel. Par exemple, s'il est 11h21, on écrira dans la condition if:

($heure_courante>1123 AND $heure_courante<1125)

On enregistre et on exécute ce fichier. Quand vient 11h24, on observera l'affichage de l'annonce et sa disparition vers 11h26.

Voilà le programme final obtenu indiquant le programme de la matinée:

<?

//affichage heure courante

echo "<br><br>",date("G:i"),"<br><br>";

$heure_courante=date("Gi");

//echo "<br><br>La variable heure courante est: ",$heure_courante,"<br><br>";

if ($heure_courante>954 AND $heure_courante<1000)
{
?>
Dans quelques minutes à l'étage...<br><br>
10h à 10h30 Guy Martin présentera son ouvrage Les châteaux en Bourbonnais
<?
}
if ($heure_courante>1039 AND $heure_courante<1045)
{
?>
Dans quelques minutes à l'étage...<br><br>
10h45 à 11h Remise du Prix de poésie
<?
}

if ($heure_courante>1139 AND $heure_courante<1145)
{
?>
Dans quelques minutes à l'étage...<br><br>
11h45 à 12h30 Lecture commentée d'Henri Guillemin par Albert Dupont
<?
}
?>

<script language="javascript">
setTimeout("window.location.replace('annonce.php')",15000);
</script>

<br><br>


REMPLACEMENT DE COMMANDES RPÉTITIVES PAR UNE FONCTION

Il apparaît que la condition pourrait être synthétisée en une fonction dans laquelle on ferait entrer les paramètres correspondant à chaque annonce. Voici l'expression correspondante de cette fonction où l'on a nommé pour bien en montrer la généralité les paramètres par des numéros.


function annonce ($var1,$var2,$var3,$var4)
{
if ($var1>$var2 AND $var1<$var3)
{
?>
Dans quelques minutes à l'étage...<br>
<?
echo $var4;
echo "<br>";
}
}

La partie entre les accolades de la fonction sera exécutée lorsque nous ferons appel à cette fonction, en précisant bien sûr la correspondances des paramètres avec les données:

$var1 correspond à $heure_courante déjà définie en début de programme
$var2 à la limite horaire inférieure déclenchant l'annonce (on la nomera par exemple $lim_inf)
$var3 à la limite horaire supérieure déclenchant l'annonce (on la nomera par exemple $lim_sup)
$var4 correspond au texte spécifique de l'annonce (on le nommera par exemple $texte)

L'appel à la fonction se réalisera donc ainsi après l'affectation de leur valeur aux variables:

$lim_inf=954;
$lim_sup=1000;
$texte="10h à 10h30 Guy Martin présentera son ouvrage Les châteaux en Bourbonnais";

annonce($heure_courante,$lim_inf,$lim_sup,$texte);


Et voici l'ensemble du programme résultant entre les balises body du fichier annonce.php:

<?

//affichage heure courante

echo "<br><br>",date("G:i"),"<br><br>";

$heure_courante=date("Gi");

//echo "<br><br>La variable heure courante est: ",$heure_courante,"<br><br>";

function annonce ($var1,$var2,$var3,$var4)
{
if ($var1>$var2 AND $var1<$var3)
{
?>
Dans quelques minutes à l'étage...<br>
<?
echo $var4;
echo "<br>";
}
}
$lim_inf=954;
$lim_sup=1000;
$texte="10h à 10h30 Guy Martin présentera son ouvrage Les châteaux en Bourbonnais";

annonce($heure_courante,$lim_inf,$lim_sup,$texte); $lim_inf=1039;
$lim_sup=1045;
$texte="10h45 à 11h Remise du Prix de poésie";

annonce($heure_courante,$lim_inf,$lim_sup,$texte);

$lim_inf=1139;
$lim_sup=1145;
$texte="11h45 à 12h30 Lecture commentée d'Henri Guillemin par Albert Dupont";

annonce($heure_courante,$lim_inf,$lim_sup,$texte); ?>

<script language="javascript">
setTimeout("window.location.replace('annonce.php')",15000);
</script>

<br><br>


DÉBOGAGE DU CODE DANS LES CONDITIONS DE L'UTILISATION FINALE

Notre code paraît valide. Il faut cependant toujours se méfier des traquenards inattendus et des erreurs de programmation. Il serait donc conseillé en cas d'utilisation réelle de le tester pendant la durée d'une matinée en laissant le fichier s'exécuter sur un PC.


DÉVELOPPEMENTS ULTÉRIEURS

Pour une annonce visuelle, il conviendrait que l'annonce apparût de manière bien visible: couleur, flash, clignotement... Nous réserverons cette programmation pour un prochain chapitre.

On pourrait aussi poursuivre ce programme notamment en créant un formulaire où l'utilisateur entrerait les paramètres de chaque annonce... Nous verrons pour une autre occasion cette fontionnalité.

SOMMAIRE