IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

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 templates 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 cet 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 sélection 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'enregistrements
    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ées.

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 suivante 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

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.