Parser des caractéristiques techniques et générer un tableau convivial

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 910 fois - Téléchargée 30 fois

Contenu du snippet

Ce script récupére des données brutes pour générer un tableau où des boutons permettent à l'internaute de voir les caractéristiques qui l'interresse.

Dans le source, $caracteristiques contient des données comme ci-dessous:

DIMENSIONS
Longueur : 2260 mm
Hauteur de Selle: 693 mm
Garde au Sol: 141.0 mm
Angle de Chasse / Chasse : 29.6º / 116.8 mm
Empattement : 1520 mm
Contenance du Réservoir : 12.9 L
Capacité en Huile : 3.4 L
Poids à Vide : 251 kg
MOTORISATION
Moteur : Evolution
Cylindrée : 883 cm³
Alésage et Course : 76.2 mm x 96.8 mm
Couple: 69 nm @ 4200 trm
Alimentation : Carburateur
Taux de Compression : 9 / 1
Rapports (Finaux)
1ère : 9.79
2ème : 6.73
3ème : 5.22
4ème : 4.30
5ème : 3.64
ROUES/PNEUS
Roues
Avant : 19" 13 jantes à bâtons
Arrière : 16" 13 jantes à bâtons
Dim. des Pneus
Avant : 100/90-19 57H
Arrière : 150/80B16 71H

Concrétement, il y a une caractéristique (ou un titre) par ligne, et le nom est séparé de sa valeur par un deux-points (:)... Et parfois même des lignes vides, des espaces, ou des tabulations inutiles.

Le script reconnait les titres de groupes de caractéristiques pour ajouter les boutons permettant de les afficher ou cacher (par défaut)... Si 2 titres se suivent, ils seront confondus en un seul.

Les couleurs et bordures sont définies via des classes de style CSS.

Source / Exemple :


//Variable avec les données brutes
			$caracteristiques = stripslashes($caracteristiques);

				echo("<TABLE CLASS=TableauSpecifications WIDTH='100%' CELLPADDING=0 CELLSPACING=0><TR><TD COLSPAN=2 CLASS=TitreSpecifications><b>Caractéristiques techniques</b></TD></TR>\n<TBODY>\n");
				//Une caracteristique ou un titre par ligne, les lignes vides sont acceptées
				$listecaracteristiques = explode("\n",$caracteristiques);
				
				$nbcaracteristiques = count($listecaracteristiques);
				$nbsouscategories = 0;
				$dernierecaracteristique = 0;
				
				for ($i = 0; $i < $nbcaracteristiques; $i++)
					{
					//cest une caracteristique ou un titre ?
					if (strpos($listecaracteristiques[$i],":") > 3)
						{
						echo("<TR><TD CLASS=SpecificationNomValeur WIDTH=35%><u>".str_replace(":"," :</u></TD><TD CLASS=SpecificationValeur><i>",$listecaracteristiques[$i])."</i></TD></TR>\n");
						$dernierecaracteristique = $i;
						}
					//Cest un titre ou une ligne vide ?
					else if (trim($listecaracteristiques[$i]) != "")
						{
						//Cest un soustitre ou un titre principal ?
						if (($i >= 1) AND (strpos($listecaracteristiques[$dernierecaracteristique],":") <= 1))
							{
							echo("<TR><TD COLSPAN=2 CLASS=SousTitreSpecifications><b><u>$listecaracteristiques[$i] :</u></b></TD></TR>\n");
							}
						else
							{
							echo("</TBODY>\n<TR><TD COLSPAN=2 CLASS=SousTitreSpecifications><INPUT TYPE=Button VALUE=Afficher ID=AfficherGroupe$nbsouscategories CLASS=\"Bouton Boutonspecifications\" onclick=\"groupespecifications$nbsouscategories.style.display = 'inline'; CacherGroupe$nbsouscategories.style.display='inline'; AfficherGroupe$nbsouscategories.style.display='none';\"><INPUT TYPE=Button VALUE=Cacher ID=CacherGroupe$nbsouscategories CLASS=\"Bouton Boutonspecifications\" onclick=\"groupespecifications$nbsouscategories.style.display = 'none'; CacherGroupe$nbsouscategories.style.display='none'; AfficherGroupe$nbsouscategories.style.display='inline';\" STYLE=\"display: none\"> <u>les caractéristiques <b>$listecaracteristiques[$i]</b> :</u></TD></TR>\n<TBODY ID=groupespecifications$nbsouscategories STYLE=\"display: none\">\n");
							$nbsouscategories++;
							}
						$dernierecaracteristique = $i;
						}
					}
					
				echo("</TBODY></TABLE>\n");

Pour la présentation (comme sur la capture),  il faut faire la déclaration de style CSS ci-dessous :

TABLE.TableauSpecifications {border-width: 1px; border-style: solid; border-collapse: collapse; border-color: #FFCC00; border-right-width: 2px; border-bottom-width: 2px}
TD.TitreSpecifications,TD.SousTitreSpecifications, TD.SpecificationTitre,TD.SpecificationNomValeur, TD.SpecificationPrix, TD.SpecificationValeur,TD.SpecificationReference {padding: 3px; border-width: 1px; border-style: solid; text-align: left}
TD.TitreSpecifications {text-align: center; color: #4D4D4D; background-color: #FFCC00; font-size: 14px}
TD.SousTitreSpecifications {color: #4D4D4D; background-color: white; border-style: none; border-color: #FFCC00; border-top-style: solid}
TD.SpecificationTitre,TD.SpecificationNomValeur, TD.SpecificationPrix, TD.SpecificationValeur,TD.SpecificationReference {padding: 1px; border-style: none; padding-left: 3px}
TD.SpecificationTitre,TD.SpecificationNomValeur {color: #4D4D4D; background-color: #CCCCCC; border-color: white; border-right-style: solid; vertical-align: top}
TD.SpecificationPrix {text-align: right; font-weight: bold; background-color: #A5A5A5}
TD.SpecificationReference {text-align: left; background-color: #A5A5A5}
TD.SpecificationNomValeur {}
TD.SpecificationValeur {text-align: left; background-color: #A5A5A5;}
INPUT.Boutonspecifications {color: #4D4D4D; background-color: #EFEFEF}

Conclusion :


Script réalisé pour le site www.harley-davidson-lille.com qui sera ouvert au public fin octobre 2003 ;o)

A voir également

Ajouter un commentaire

Commentaires

cs_olid
Messages postés
296
Date d'inscription
lundi 2 septembre 2002
Statut
Membre
Dernière intervention
28 janvier 2008
-
Petite précision:

Il faut pô quil y est deux fois un deux-point ":" sur une même ligne, ni quil soit dans une ligne de titre evidemmen... Mais ce bug est facile à corriger ;op
defkrie
Messages postés
435
Date d'inscription
vendredi 20 septembre 2002
Statut
Membre
Dernière intervention
20 novembre 2004
-
pas mal, bravo pour la simplicité du code le mien aurait fait facilement le triple en longeur....
cs_Bernard74
Messages postés
40
Date d'inscription
samedi 1 mars 2003
Statut
Membre
Dernière intervention
26 janvier 2013
-
Bonjour,
Je suis débutant et je ne comprends pas comment utiliser la class css .... pouvez-vous m'aider ? merci d'avance.
cs_olid
Messages postés
296
Date d'inscription
lundi 2 septembre 2002
Statut
Membre
Dernière intervention
28 janvier 2008
-
Tu dois mettre les styles dans une balise <style> ou les mettre dans un fichier que tu charge avec la balise <LINK> :op
cs_Bernard74
Messages postés
40
Date d'inscription
samedi 1 mars 2003
Statut
Membre
Dernière intervention
26 janvier 2013
-
Voila ce que j'ai fait : 9à ne parche pas ! grrr !

echo"<html>";
echo"<form name='form'>";
echo"<STYLE>";
echo"include afficheur.css";
echo"</STYLE>";


echo("Caractéristiques techniques,

\");
//Une caracteristique ou un titre par ligne, les lignes vides sont acceptées
$listecaracteristiques = explode(\"
\",$caracteristiques);

$nbcaracteristiques = count($listecaracteristiques);
$nbsouscategories = 0;
$dernierecaracteristique = 0;

for ($i = 0; $i < $nbcaracteristiques; $i++)
{
//cest une caracteristique ou un titre ?
if (strpos($listecaracteristiques[$i],\":\") > 3)
{
echo(\"----
".str_replace(":"," :, ",$listecaracteristiques[$i]).",
\");
$dernierecaracteristique = $i;
}
//Cest un titre ou une ligne vide ?
else if (trim($listecaracteristiques[$i]) != \"\")
{
//Cest un soustitre ou un titre principal ?
if (($i >= 1) and (strpos($listecaracteristiques[$dernierecaracteristique],\":\") <= 1))
{
echo(\"----
$listecaracteristiques[$i] :,
\");
}
else
{
echo(\"
----
les caractéristiques $listecaracteristiques[$i] :,

\");
$nbsouscategories++;
}
$dernierecaracteristique = $i;
}
}

echo("

");
echo"</form></html>";

?>

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.