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

Eléphant du PHP | 422 Messages

13 juin 2014, 18:01

hello

tu dois mettre le contenu de $tplFile dans un fichier, (si le fichier n'existe pas, il sera créé (il faut tout lire)
toujours faire une recherche sur http://www.php.net et/ou sur http://www.google.fr :)
utiliser http://ideone.com/ pour vos codes :)

Petit nouveau ! | 9 Messages

13 juin 2014, 18:10

ok

mais si je met le contenu de $tplFile dans un fichier je risque d'avoir une page enregistre de la meme sorte que ce que me donne le echo $tplFile

de ce que je vois le echo $tplFile m'affiche tout les pages dans une seule page dynamique alors je vois pas comment il va me dissocier le tout ??

Eléphant du PHP | 422 Messages

14 juin 2014, 11:27

<?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
$fileExt = '.html';

//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
    }           
                
                
        //récupère le fichier template
        $tplFile = file_get_contents($tpl);//récupère le fichier template
		
		$row = $row-2; //décrémente de 2 ( titre + incrément de fin en trop)
		
		//boucle sur le nombre de ligne == nombre de fichier à créer
		for($i=1;$i<$row;$i++){
			
			$tplFileTmp = $tplFile; // on associe un tpl clean
			$datas = getLine($tabData,$i);//récupère les champs de la ligne $i (1 2 3 ...)

			//boucle sur les champs pour remplacer dans le fichier tpl
			foreach($datas as $title=>$value){
					//remplace dans le tpl
					$tplFileTmp = str_replace('{'.$title.'}',$value,$tplFileTmp);
			}
			
                        // écrire le fichier
			file_put_contents($datas['productname'].$fileExt,$tplFileTmp);
			echo $datas['productname'].$fileExt." créer !<br />\n";
			
		}	

}
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;
}



?>
 
toujours faire une recherche sur http://www.php.net et/ou sur http://www.google.fr :)
utiliser http://ideone.com/ pour vos codes :)

Petit nouveau ! | 9 Messages

14 juin 2014, 12:30

Hello,

Je viens de voir et on va dire que je n'aurai pas su le faire seule :( j'ai test le code cela marche parfaitement mais je ne comprends pas pourquoi la dernière ligne du csv n'est pas prise en compte il me creer 2 page au lieu de 3 .
Par contre des que je rajoute une ligne au csv il me génère 3 pages sur 4 , bon c'est pas trop gênant j'ajouterai une dernière ligne qui me servira pas ainsi j'aurai toute les pages :roll:
En tout cas merci beaucoup pour ton temps et d'avoir bien commenté ton code cela va beaucoup m'aider à l'avenir muchas gracias !!