Page 1 sur 2

Comment créer pages html avec template + données csv

Posté : 12 juin 2014, 18:39
par monica
Bonjour,

J'ai créé un template html qui ressemble en gros à cela:

Code : Tout sélectionner

<html> <head> <title>{productname} Home Page</title> <style></style> </head> <body> <img style="width: 100%; height: 100%" src='data:image/png;base64,{productlogo}'/> <img style="width: 100%; height: 100%" src='data:image/png;base64,{productimage}'/> <strong>{productname}</strong> <del> <font color=#FF0000> {productoldprice} </font> </del> <strong>{productprice}</strong> <input type=hidden name=model id=model value='{model}'> <p>{productdescription} </p> </body> </html>

mon fichier csv ressemble à cela :

productname , productlogo , productimage , productoldprice , productprice , model , productdescription
aaaaaaaaaaa , bbbbbbbbbbb , cccccccccccc , ddddddddddddddd , eeeeeeeeeeee , fffff , gggggggggggggggggg
aaaaaaaaaaa , bbbbbbbbbbb , cccccccccccc , ddddddddddddddd , eeeeeeeeeeee , fffff , gggggggggggggggggg


Donc je cherche à utiliser le fichier csv comme source de données ainsi que la page template
pour obtenir un résultat comme ceci:

productname1.html
productname2.html
productname3.html etc..

merci pour vos retours :oops:

Re: Comment créer pages html avec template + données csv

Posté : 12 juin 2014, 20:06
par Elie
Voila ce que je ferais :
<?php
$contents = file_get_contents('fichier.csv');
$var = array();
$explode = explode("\n", $contents); // On récupere ligne par ligne
foreach($explode as $k => $v) {
	$explode2 = explode(';', $v);
	$var[0] = $explode2; // On recupere chaque valeur entre les ;
}
?>

Après tu faire en sorte de recupere le numero du productname et genre tu fais
str_replace('{productdescription}', $var[$_GET['id']][numero_de_la_variable], ton_texte);
Je suis pas sur que str_replace soit le plus adapté :)

Re: Comment créer pages html avec template + données csv

Posté : 12 juin 2014, 20:15
par monica59
On m'a parlé de fgetcsv() et str_getcsv() mais je vois pas trop comment m'en servir :^o

Re: Comment créer pages html avec template + données csv

Posté : 12 juin 2014, 20:20
par Elie
Bah je te dis, tu vas chercher la ligne grace a l'iD de la page html et tu recuperes les variables de cette ligne.

Fait des tests en affichant le resultat d'un tableau avec un print_r()

Re: Comment créer pages html avec template + données csv

Posté : 12 juin 2014, 23:12
par monica59
c'est pas clair du tout pour moi je suis perdue :cry:

Re: Comment créer pages html avec template + données csv

Posté : 13 juin 2014, 12:01
par telnes
hello
Donc je cherche à utiliser le fichier csv comme source de données ainsi que la page template
pour obtenir un résultat comme ceci:

productname1.html
productname2.html
productname3.html etc.
donc tu cherche a générer (créer) des page html via php

ou

tu veux une page php unique
productname.php?id=1
productname.php?id=2
productname.php?id=3

???

ps: il y a url rewriting aussi pour mélanger les deux cas

Re: Comment créer pages html avec template + données csv

Posté : 13 juin 2014, 12:34
par telnes
hello

sur la page getcsv http://www.php.net/manual/fr/function.fgetcsv.php il y a un exemple

en 1 reprendre l'exemple !!!
en 2 l'adapter

ps: le code tout fait c'est cool, ca permet de reprendre pas à pas le fonctionnement si tu as envie de comprendre, mais faire soit même ca permet d’acquérir des mécanismes.

fichier data.csv
productname , productlogo , productimage , productoldprice , productprice , model , productdescription 
aaaaaaaaaaa1 , bbbbbbbbbbb1 , cccccccccccc1 , ddddddddddddddd1 , eeeeeeeeeeee1 , fffff1 , gggggggggggggggggg1 
aaaaaaaaaaa2 , bbbbbbbbbbb2 , cccccccccccc2 , ddddddddddddddd2 , eeeeeeeeeeee2 , fffff2 , gggggggggggggggggg2 
aaaaaaaaaaa3 , bbbbbbbbbbb3 , cccccccccccc3 , ddddddddddddddd3 , eeeeeeeeeeee3 , fffff3 , gggggggggggggggggg3
fichier code.php
<?php

$file = 'data.csv'; //chemin vers le fichier
$row = 1; //compteur de ligne
$tabData = array(); //tableau des données CSV
$tabTitle = array(); //titre les colonnes

//ouvre le fichier
if (($handle = fopen($file, "r")) !== FALSE) {

	// on parcours le fichier csv tant qu'il n'y a plus de ligne
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $num = count($data); //nombre de champs sur une ligne
		//récupère les champs sur une ligne
		for ($c=0; $c < $num; $c++) {
			if($row == 1){ // titre des colonnes csv
			 
				$tabData[$data[$c]] = array(); //on créer un tableau avec le titre de la colonne
				$tabTitle[$c] = $data[$c];
			}
			else{
				
				$tabData[$tabTitle[$c]][] = $data[$c]; // on met les données dans le tableau
			
			}				
		}	
		$row++; // on incrémente la ligne
    }		


	//var_dump($tabData);
	
	//accés à la ligne 2 par exemple
	$ligne = 2;
	foreach($tabData as $title=>$tab){ //pour chaque titre=>valeur du tableau
	
		echo 'colonne : <b>'.$title.'</b> valeur: '.$tab[$ligne-1]."<br />\n"; // ligne-1 car le tab commence en 0 
	
	}
	
	// via function
	var_dump(getLine($tabData,3));
	
	
}
else{

	die("no file to open");
}

//function sinon
function getLine($array,$num){

	$ligne = $num-1;
	$tmp = array(); //tableau
	foreach($array as $title=>$tab){ //pour chaque titre=>valeur du tableau
	
		$tmp[$title]=$tab[$ligne]; 
	}
	return $tmp;
}



?>

Re: Comment créer pages html avec template + données csv

Posté : 13 juin 2014, 13:37
par monica59
Je viens de tester ca me sort :

Code : Tout sélectionner

colonne : productname valeur: aaaaaaaaaaa1 colonne : productlogo valeur: bbbbbbbbbbb1 colonne : productimage valeur: cccccccccccc1 colonne : productoldprice valeur: ddddddddddddddd1 colonne : productprice valeur: eeeeeeeeeeee1 colonne : model valeur: fffff1 colonne : productdescription valeur: gggggggggggggggggg1 array(7) { ["productname "]=> string(13) "aaaaaaaaaaa2 " [" productlogo "]=> string(14) " bbbbbbbbbbb2 " [" productimage "]=> string(15) " cccccccccccc2 " [" productoldprice "]=> string(18) " ddddddddddddddd2 " [" productprice "]=> string(15) " eeeeeeeeeeee2 " [" model "]=> string(8) " fffff2 " [" productdescription "]=> string(21) " gggggggggggggggggg2 " } array(7) { ["productname "]=> string(13) "aaaaaaaaaaa3 " [" productlogo "]=> string(14) " bbbbbbbbbbb3 " [" productimage "]=> string(15) " cccccccccccc3 " [" productoldprice "]=> string(18) " ddddddddddddddd3 " [" productprice "]=> string(15) " eeeeeeeeeeee3 " [" model "]=> string(8) " fffff3 " [" productdescription "]=> string(20) " gggggggggggggggggg3" }
par example ["productname "]=> string(13) donc je dois me servir de ca pour remplacer dans mon template la partie => <p>{productdescription} </p>

<?php

$productname = ["productname"]=> string(13);
$productlogo = ["productlogo"]=> string(14);
$productimage = ["productimage"]=> string(15);
$productoldprice = ["productoldprice"]=> string(18);
$productprice = ["productprice"]=> string(15);
$model = ["model"]=> string(8);
$productdescription = ["productdescription"]=> string(21);

$fp = fopen("template.html", "a");

fputcsv($fp,array($productname ,
$productlogo ,
$productimage ,
$productoldprice ,
$productprice ,
$model ,
$productdescription,
));

fclose($fp);

?>
enfin ca je pense pas que ca remplace les champs sur ma page template :shock:

Re: Comment créer pages html avec template + données csv

Posté : 13 juin 2014, 14:09
par telnes
1 est ce que tu as compris le code ?
2 est ce que tu as regardé sur http://www.php.net/ les fonctions qui te paraissent pas claires ?
3 est ce que tu as exécuté ton code ?

ps : la lecture de http://www.php.net/manual/fr/language.v ... basics.php est fortement conseillé


html.tpl
<html> 
<head> 
<title>{productname} Home Page</title> 
<style></style> 
</head> 
<body> 
<img style="width: 100%; height: 100%" src='data:image/png;base64,{productlogo}'/> 
<img style="width: 100%; height: 100%" src='data:image/png;base64,{productimage}'/> 
<strong>{productname}</strong> 
<del> 
<font color=#FF0000> 
{productoldprice} 
</font> 
</del> 
<strong>{productprice}</strong> 
<input type=hidden name=model id=model value='{model}'> 
<p>{productdescription} </p> 
</body> 
</html>
data.csv
productname , productlogo , productimage , productoldprice , productprice , model , productdescription 
page 1 , bbbbbbbbbbb1 , cccccccccccc1 , ddddddddddddddd1 , eeeeeeeeeeee1 , fffff1 , gggggggggggggggggg1 
page 2 , bbbbbbbbbbb2 , cccccccccccc2 , ddddddddddddddd2 , eeeeeeeeeeee2 , fffff2 , gggggggggggggggggg2 
page 3 , bbbbbbbbbbb3 , cccccccccccc3 , ddddddddddddddd3 , eeeeeeeeeeee3 , fffff3 , gggggggggggggggggg3
code.php
<?php

$file = 'data.csv'; //chemin vers le fichier csv
$tpl = 'html.tpl'; //chemin vers le fichier template
$row = 1; //compteur de ligne
$tabData = array(); //tableau des données CSV
$tabTitle = array(); //titre les colonnes
$numPage = (isset($_GET['p']) and $_GET['p']>0)?(int)$_GET['p']:'1'; //numéro de la page récupéré en URL ?p=3 ou 1 sinon

//ouvre le fichier
if (($handle = fopen($file, "r")) !== FALSE) {

	// on parcours le fichier csv tant qu'il n'y a plus de ligne
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $num = count($data); //nombre de champs sur une ligne
		//récupère les champs sur une ligne
		for ($c=0; $c < $num; $c++) {
			if($row == 1){ // titre des colonnes csv
			 
				$tabData[trim($data[$c])] = array(); //on créer un tableau avec le titre de la colonne
				$tabTitle[$c] = trim($data[$c]);
			}
			else{
				
				$tabData[$tabTitle[$c]][] = trim($data[$c]); // on met les données dans le tableau
			
			}				
		}	
		$row++; // on incrémente la ligne
    }		
		
	//si $numPage > $row == impossible
	if($numPage >= ($row-1)) $numPage = 1;
		
	//récupère le fichier template
	$tplFile = file_get_contents($tpl);//récupère le fichier template
	$datas = getLine($tabData,$numPage);//récupère les champs de la ligne numPage

	//boucle sur les champs
	foreach($datas as $title=>$value){
		//remplace dans le tpl
		$tplFile = str_replace('{'.$title.'}',$value,$tplFile);
	}

	//écris les autres pages
	foreach($tabData['productname'] as $p=>$value){
	
		echo '<a href="?p='.($p+1).'">'.$value.'</a> - '; // lien pas tres catholique !! ??? :/ :)
	}
	
	echo $tplFile; //affiche le tpl
	

}
else{

	die("no file to open");
}

//function sinon
function getLine($array,$num){

	$ligne = $num-1;
	$tmp = array(); //tableau
	foreach($array as $title=>$tab){ //pour chaque titre=>valeur du tableau
	
		$tmp[$title]=$tab[$ligne]; 
	}
	return $tmp;
}



?>

Re: Comment créer pages html avec template + données csv

Posté : 13 juin 2014, 14:57
par monica59
1 oui j'ai vu que la ligne deux etait manquante je l'ai ajouter au code var_dump(getLine($tabData,2));

ensuite de ce que j'ai compris le string(13) est egale à la colonne productname donc maintenant avec ces valeurs

je doit les inserer dans le fichier template.html pour cela je dois remplacer les <title>{productname} Home Page</title> par quelque chose comme <title> <?php echo $productname; ?> Home Page</title> faire ca pour tout le reste et enregistrer le template
avec le nom du produit.html et passer à la ligne suivant en répétant la meme chose.

mon code
<?php

$productname = ["productname"]=> string(13);
$productlogo = ["productlogo"]=> string(14);
$productimage = ["productimage"]=> string(15);
$productoldprice = ["productoldprice"]=> string(18);
$productprice = ["productprice"]=> string(15);
$model = ["model"]=> string(8);
$productdescription = ["productdescription"]=> string(21);

$fp = fopen("template.html", "a");

fputcsv($fp,array($productname ,
$productlogo ,
$productimage ,
$productoldprice ,
$productprice ,
$model ,
$productdescription,
));

fclose($fp);

?>
va juste creer un fichier template.html avec ces infos dedans ..... mais ce n'est pas ca que je dois faire
d'abord lire le csv ensuite recuperer les infos du csv ensuite ouvrir le fichier template.html et remplacer les endroits spécifiques par les infos récupérées du csv et ensuite me servir du nom du produit pour donner un nom unique a la page html

Re: Comment créer pages html avec template + données csv

Posté : 13 juin 2014, 15:19
par telnes
hello
$productname = ["productname"]=> string(13);


ca n'existe pas !! c'est pas possible (erreur), la synthaxe est incorrecte

ensuite var_dump() affiche la structure de la donnée, en l'occurence ici c'est un tableau (array) et string correspond à la longueur de la chaine dans le champs ... cf la doc http://fr2.php.net/manual/fr/function.var-dump.php
ce qui est important dans le tableau c'est les index et les valeurs.
var_dump(array('titi','toto'));
array(2) {
  [0]=>
  string(4) "titi"
  [1]=>
  string(4) "toto"
}
tu as un tableau avec 2 valeurs (array(2))
en index 1 de ton tableau tu as "titi" qui fait 4 caractères (string(4))
...

si tu veux accéder au champs 2 de ton tableau il faut faire
$tab = array('titi','tata');
echo $tab[1]; // index 0,1 ....
il faut te documenter et surtout faire des exemples simples pour comprendre les for,foreach array ...

le code que tu veux est ici php-debutant/comment-creer-pages-html-a ... ml#p424316 mais tu n'a pas regardé

++

Re: Comment créer pages html avec template + données csv

Posté : 13 juin 2014, 15:45
par monica59
ah mince je n'avais pas vu ok donc j'avais tout faux sur le string je vois ce que cela veux dire maintenant je vais tester le code merci pour ton temps :oops:

Re: Comment créer pages html avec template + données csv

Posté : 13 juin 2014, 16:03
par monica59
Ola

Je viens de tester le code cela marche nickel seulement comment je fais pour les enregistrer séparément genre page1.html page2.html etc..

En tout cas c'est tres bien expliqué sur le code =D>

Re: Comment créer pages html avec template + données csv

Posté : 13 juin 2014, 16:19
par telnes
hello

au lieu de faire un echo de la page il faut l'enregistré via http://fr2.php.net/manual/fr/function.f ... ntents.php par exemple (bonne lecture lecture)

Re: Comment créer pages html avec template + données csv

Posté : 13 juin 2014, 17:12
par monica59
Ola

j'ai vu la fonction file_put_contents mais dans l'exemple le fichier existe deja
<?php
$file = 'people.txt';
// Ouvre un fichier pour lire un contenu existant
$current = file_get_contents($file);
// Ajoute une personne
$current .= "Jean Dupond\n";
// Écrit le résultat dans le fichier
file_put_contents($file, $current);
?>
la dans notre cas les pages sont générée à la volé alors je vois pas trop ou je dois les enregistrées

je pense que c'est à ce niveau la
     //écris les autres pages
        foreach($tabData['productname'] as $p=>$value){
        
               echo  '<a href="?p='.($p+1).'">'.$value.'</a> - '; // lien pas tres catholique !! ??? :/ <img src="http://forum.phpfrance.com/images/smilies/icon_smile.gif" alt=":)" title="Smile" />
                //echo '<a href="'.$value.'.html">'.$value.'</a> - '; // lien pas tres catholique !! ??? :/ <img src="http://forum.phpfrance.com/images/smilies/icon_smile.gif" alt=":)" title="Smile" />
        }
        
        echo $tplFile; //affiche le tpl