Initiation aux templates en PHP avec Smarty


précédentsommairesuivant

VIII. Recettes de code

L'objet de cette partie du tutoriel est de vous présenter 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 données (une table Mysql dans notre exemple) pour afficher un tableau

Un screenshot de ma table visualisée avec phpMyAdmin (base training, table person)

Image non disponible

La partie PHP ne présente rien d'exceptionnel. L'idée est d'empiler chacune des "lignes"récupérées (avec la fonction mysql_fetch_array) pour réutiliser 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 élément 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
Résultat: 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 chaîne de caractères) on peut mettre ces données 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 particulièrement 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 différente de {SECTION}), cette fonction est de plus imbriquée pour obtenir les téléphones 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 particulièrement dans cette exemple nous allons produire un fil RSS 2.0.

Pour réaliser ce fil RSS, nous allons utiliser une source mysql dont voici un aperçu:

Image non disponible

Pour la suite même logique que ce que nous avons pu voir précédemment. Le fichier PHP chargé de la récupération des données 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 éléments RSS
	$aRssItems = array();	
 
	// Se connecter à mysql
	if (! $oConnexion = mysql_connect('localhost', 'root', '')) 
		die("Impossible de se connecter");
 
	// Choisir la base de données	
	if (! mysql_select_db('demos')) 
		die("Erreur de selection de la base de données");
 
	// Construire la requête
	$sSql = "SELECT `title` , `description` , `link` FROM rss" ;
 
	// Exécuter la requête et récupérer le jeu d'enregistrments
	if (! $oMysqlRes = mysql_query($sSql)) 
		die("Erreur: la requête n'a pu être exécutée");
 
	// 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'éléments dans la base de donnée.

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 démo suivant vous montre comment créer 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>      
Résultat dans le navigateur Firefox
Le Fil RSS tel qu'il apparaît dans le navigateur FIREFOX

précédentsommairesuivant

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 et 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.