Initiation aux templates en PHP avec Smarty


prcdentsommairesuivant

VIII. Recettes de code

L'objet de cette partie du tutoriel est de vous prsenter quelques cas concrets de ce que l'on peut faire et comment on peut le faire avec SMARTY.

VIII-A. Extraction Mysql vers tableau HTML

Voil un exemple que l'on retrouve dans la plupart des applications, partir d'un ensemble de donnes (une table Mysql dans notre exemple) pour afficher un tableau

Un screenshot de ma table visualise avec phpMyAdmin (base training, table person)

Image non disponible

La partie PHP ne prsente rien d'exceptionnel. L'ide est d'empiler chacune des "lignes"rcupres (avec la fonction mysql_fetch_array) pour rutiliser le tableau ainsi constitu dans le template Smarty.

fromMysqlToTable.php
Sélectionnez
require_once('../lib_smarty/Smarty.class.php');
 
$oSmarty = new Smarty();
 
$mysql_ressource = mysql_connect('localhost', 'root', '');
 
mysql_select_db("training", $mysql_ressource);
 
$sQuery = "SELECT PSN_FIRST_NAME, PSN_LAST_NAME, PSN_PHONE FROM person ORDER BY PSN_LAST_NAME";
 
$mysql_rs = mysql_query($sQuery, $mysql_ressource) or die(mysql_error());
 
$aRecordSet = array();
 
while ($aRow = mysql_fetch_array($mysql_rs)) {
	array_push($aRecordSet, $aRow);
}
 
$oSmarty->assign('smarty_table_mysql', $aRecordSet);
 
$oSmarty->display('index.tpl');
mysqlToTable.tpl
Sélectionnez
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
	<head>
	<title></title>
	</head>
	<body>
		<table width="450px">
			<tr style="background-color:teal;color:white;">
				<th>NOM</th>
				<th>PRENOM</th>
				<th>TELEPHONE</th>
			</tr>
			<!-- Pour chaque lment du tableau $smarty_table_mysql -->
			{section name=idx loop=$smarty_table_mysql}
				<tr style="background-color:{cycle values="#ffffcc, #cccccc"};">
					<td>{$smarty_table_mysql[idx].PSN_LAST_NAME}</td>
					<td>{$smarty_table_mysql[idx].PSN_FIRST_NAME}</td>
					<td>{$smarty_table_mysql[idx].PSN_PHONE}</td>            
				</tr>   	
			{/section}
 
		</table>
	</body>
</html>
Image non disponible
Rsultat: un tableau HTML avec alternat de couleur

VIII-B. Utilisation d'une source xml

Nous allons voir comment, partir d'un fichier XML (source fichier ou bien chane de caractres) on peut mettre ces donnes dans notre template.

personnes.xml
Sélectionnez
<?xml version="1.0"?>
<personnes>
	<personne>
		<nom>PEYROUX</nom>
		<prenom>Jean</prenom>
		<tels>
			<tel>06.76.89.78.56</tel>
		</tels>
	</personne>
	<personne>
		<nom>MICHEL</nom>
		<prenom>Jean-Luc</prenom>
		<tels>
			<tel>01.87.54.23.34</tel>
			<tel>06.12.21.34.54</tel>
			<tel>09.09.98.89.09</tel>         
		</tels>
	</personne>
	<personne>
		<nom>POMMEREAU</nom>
		<prenom>Eric</prenom>
		<tels>
			<tel>01.78.98.87.87</tel>
			<tel>06.12.34.32.34</tel>
		</tels>
	</personne>
</personnes>

Comme nous allons le voir, la taille du code PHP est particulirement faible.

personnes.php
Sélectionnez
require_once('../lib_smarty/Smarty.class.php');
 
$oSmarty = new Smarty();
 
$oXmlFile = simplexml_load_file("personnes.xml");
 
$oSmarty->assign('smarty_xml_file', $oXmlFile);
 
$oSmarty->display('personnes.tpl');

Le fichier de template est un peu plus complexe puisque nous utilisons la fonction foreach (un peu diffrente de {SECTION}), cette fonction est de plus imbrique pour obtenir les tlphones de chacun:

personnes.tpl
Sélectionnez
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
	<head>
		<title>Utilisation d'une source XML</title>
	</head>
	<body>
		<table width="450px">
			<tr style="background-color:teal;color:white;">
				<th>NOM</th>
				<th>PRENOM</th>
				<th>TELEPHONES</th>                  
			</tr>
			<!-- pour chaque item personne -->
			{foreach from=$smarty_xml_file item=personne}
				<tr style="background-color:{cycle values="#ffffcc, #cccccc"};">
					<td>{$personne->nom}</td>
					<td>{$personne->prenom}</td>
					<td>
						<table>
							<!-- pour chaque item telephone -->
							{foreach from=$personne->tels->tel item=telephone}
								<tr>
									<td>
										{$telephone}
									</td>
								</tr>
							{/foreach}
						</table>
					</td>            
				</tr>   	
			{/foreach}
 
		</table>	
	</body>
</html>
Image non disponible

VIII-C. Production d'un fichier XML (fil rss)

Nous avons vu comment utiliser avec Smarty une source XML.

Nous allons maintenant voir comment produire du XML. Plus particulirement dans cette exemple nous allons produire un fil RSS 2.0.

Pour raliser ce fil RSS, nous allons utiliser une source mysql dont voici un aperu:

Image non disponible

Pour la suite mme logique que ce que nous avons pu voir prcdemment. Le fichier PHP charg de la rcupration des donnes et de la "ventilation" vers Smarty.

rss.php
Sélectionnez
<?php
 
	require_once('../lib_smarty/Smarty.class.php');
 
	$oSmarty = new Smarty();
 
	// Le tableau conteneur des lments RSS
	$aRssItems = array();	
 
	// Se connecter  mysql
	if (! $oConnexion = mysql_connect('localhost', 'root', '')) 
		die("Impossible de se connecter");
 
	// Choisir la base de donnes	
	if (! mysql_select_db('demos')) 
		die("Erreur de selection de la base de donnes");
 
	// Construire la requte
	$sSql = "SELECT `title` , `description` , `link` FROM rss" ;
 
	// Excuter la requte et rcuprer le jeu d'enregistrments
	if (! $oMysqlRes = mysql_query($sSql)) 
		die("Erreur: la requte n'a pu tre excute");
 
	// Pour chaque ligne du jeu d'enregistrement
	while ($oRow = mysql_fetch_array($oMysqlRes, MYSQL_ASSOC)) {
		// Ajouter dans le conteneur
		array_push($aRssItems, $oRow);
	}
 
	// Passer la
	$oSmarty->assign('smarty_RssItems', $aRssItems);
 
	header("Content-Type: text/xml");
 
	$oSmarty->display('rss.tpl')
?>

Enfin, le fichier de template est un fichier XML standard RSS 2.0 Standard RSSavec une partie "dynamique" reproduite autant de fois qu'il y a d'lments dans la base de donne.

rss.tpl
Sélectionnez
<?xml version="1.0" encoding="ISO-8859-1" ?>
<rss version="0.91">
   <channel>
      <title>Exemple de production de fil RSS avec SMARTY</title>
      <link>http://localhost/demos/init_smarty/demoRSS/</link>
      <description>La dmo suivant vous montre comment crer facilement un flux RSS avec SMARTY.</description>
      <language>fr</language>
      <copyright>Eric POMMEREAU</copyright>
      <webMaster>eric-pommereau@developpez.com</webMaster>
 
      <image>
         <title>Smarty</title>
         <url>http://localhost/demos/init_smarty/demoRSS/smarty_icon.gif</url>
         <link>http://smarty.php.net/</link>
         <width>88</width>
         <height>31</height>
      </image>
 
		{section name=itemIndex loop=$smarty_RssItems}      
      <item>
         <title>{$smarty_RssItems[itemIndex].title}</title>
         <description>{$smarty_RssItems[itemIndex].description}</description>
         <link>{$smarty_RssItems[itemIndex].link}</link>
      </item>
   	{/section}
 
   </channel>
</rss>      
Rsultat dans le navigateur Firefox
Le Fil RSS tel qu'il apparat dans le navigateur FIREFOX

prcdentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Copyright © 2008 Eric POMMEREAU. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.