L'idée est de pouvoir écrire les listes et tables comme suit:
1. Pour une liste : <Select src="data_list.txt" name= "list1" caption= "List 1">
2. Pour une table : <table src="data_table.txt" name= "table1" caption= "Table 1">
Exemple.htm :
Code : Tout sélectionner
<html>
<form name="f" onSubmit="return validate();">
<p><SELECT id="js_id" src="mois.txt" name="mois" caption="Mois" onChange="f.submit();">
<p><TABLE src="agenda.txt" name= "agenda" caption= "Agenda" onClick="f.submit();">
</form>
</html>
html_parser.php?file=exemple.htm
ce programme transforme le fichier HTML de base en fichier HTML/PHP prêt à l'emploi.
<?php
//Programme d'interprétation de balises HTML modifiées
//PRINCIPAL (exige un fichier HTML en entrée)
if (!$_GET[file]) {
echo "<p>Aucun fichier à traiter!";
exit;
};
//Les balises recherchées
$tags = array("SELECT", "TABLE");
//Traitement du fichier en entrée
$file = file_get_contents($_GET[file]);
$file = str_replace("\r\n", " ", $file);
foreach ($tags as $tag) $file = parse($file, $tag);
//Affichage en tantque fichier PHP
showAs_PHP($file);
//FONCTIONS
function showAs_PHP($file){
$file = "<?php \n \t extract(\$_GET); \n \t echo \"".str_replace("\\'","'", addslashes($file))."\"; \n?>";
file_put_contents("temp.php", $file);
header("location: temp.php");
}
function parse($file, $tag){
//Format :
//<select src="data_list.txt" name="list1" caption="List 1">
//<table src="data_table.txt" name="table1" caption="Table 1">
//Recherche du tag
preg_match("#<$tag\s+[^>]+>#", $file, $résultat);
$ligne_origine = trim($résultat[0]);
$ligne_recherche = str_replace("<$tag", "", str_replace(">", "", $ligne_origine));
//Recherche de l'attribut src
preg_match('#(src\s*=(\s|"|\')*[^"]*("|\')\s)#', $ligne_recherche, $résultat);
$src = trim($résultat[0]);
//Recherche de l'attribut name
preg_match('#(name\s*=(\s|"|\')*[^"]*("|\')\s)#', $ligne_recherche, $résultat);
$name = trim($résultat[0]);
$clé = $name;
//Recherche de l'attribut caption
preg_match('#(caption\s*=(\s|"|\')*[^"]*("|\')\s)#', $ligne_recherche, $résultat);
$caption = trim($résultat[0]);
//Recherche des autres attributs
$other_attrib = str_replace($src,"",str_replace($name, "", str_replace($caption, "", $ligne_recherche)));
//Extraction des valeurs
$src = trim(preg_replace('/(^src\s*=(\s|"|\')*)|("|\')$/', "", $src));
$name = trim(preg_replace('/(^name\s*=(\s|"|\')*)|("|\')$/', "", $name));
$caption = trim(preg_replace('/(^caption\s*=(\s|"|\')*)|("|\')$/', "", $caption));
//Construction du HTML
$html = write ($tag, $src, $name, $caption, $other_attrib);
$file = str_replace($ligne_origine, $html, $file);
return $file;
}
function write ($tag=null, $src=null, $name="", $caption="", $other_attrib=null){
if ($tag == null || $src == null) return null;
switch (strtoupper($tag)){
case "SELECT":
$résultat = "<b>$caption</b> <SELECT name=\"$name\" $other_attrib><OPTION value=\"\">-- Choisissez --</OPTION>";
$options = @file($src);
if ($options)
foreach ($options as $i=>$ligne){
$ligne = explode(",", $ligne);
if ($ligne[0]){
$valeur = $ligne[0]&&$ligne[1]?$ligne[0]:$i;
$texte = $ligne[0]&&$ligne[1]?$ligne[1]:$ligne[0];
$résultat.= "<OPTION value=\"$valeur\">$texte</OPTION>";
}
}
$résultat.= "</SELECT>
<script>
for (i=0; i<document.all[\"$name\"].options.length; i++){
if (document.all[\"$name\"].options[i].value == \"$$name\"){
document.all[\"$name\"].options[i].selected = true;
break;
}
}
</script>
";
return $résultat;
case "TABLE":
$résultat = "<TABLE border name=\"$name\" $other_attrib><LEGEND><b>$caption</b></LEGEND>";
$contenu = @file($src);
if ($contenu)
foreach ($contenu as $i=>$ligne){
$ligne = explode(",", $ligne);
$résultat.= "<TR id=\"ligne_$i\" onClick=\"select(this);\">";
foreach ($ligne as $j=>$col)
if ($i == 0) $résultat.= "<TH>$col <input type=hidden name=\"$name"."["."$i][$j]\" value=\"$col\">";
else $résultat.= "<TD>$col <input type=hidden name=\"$name"."["."$i][$j]\" value=\"$col\">";
}
$résultat.= "</TABLE><input type=hidden name=\"ligne\" value=\"\$ligne\">
<script>
//Global
var id_last = \"\$ligne\";
var last_selected_in_$name = id_last?document.all[id_last]:null;
//Default: Select last
if (last_selected_in_$name){
last_selected_in_$name.style.background = \"silver\";
last_selected_in_$name.style.color = \"white\";
}
function select(me){
//unSelect last selected
if (last_selected_in_$name && last_selected_in_$name.style){
last_selected_in_$name.style.background = \"\";
last_selected_in_$name.style.color = \"\";
}
//Select me
me.style.background = \"silver\";
me.style.color = \"white\";
//Store me as last selected
last_selected_in_$name = me;
document.all[\"ligne\"].value = me.id;
}
</script>
";
return $résultat;
default : return null;
}
}
?>
Extrait d'exemple des fichiers de données utilisés pour les source des lists et tables :Le fichier "mois.txt" pour remplir la liste
- 1,Janvier
2,Février
3,Mars
- Date,Heure,Durée,Note
16-01-06,08:30,2,Préparer le cours PHP/HTML
16-01-06,13:30,3,Cours PHP/HTML
16-02-06,08:30,2,Préparer le cours PHP/HTML
16-02-06,13:30,3,Cours PHP/HTML