Użycie szablonów - na przykładzie Smarty

Widok z poprzedniego przykładu możemy zastąpić przez wywołanie szablonu Smarty [29] [https://pl.wikibooks.org/wiki/PHP/Smarty]:

<?php
// Smarty http://www.smarty.net
require_once("smarty/libs/Smarty.class.php");
$smarty = new Smarty;
//$smarty->force_compile = true;
$smarty->debugging = true;
$smarty->caching = false;
// $smarty->cache_lifetime = 120;

$smarty->assign('books', $books);
$smarty->assign('title', 'Katalog Książek');
$smarty->assign('charset', 'utf8');

$smarty->display('ex29.tpl');
?>

Przykładowy szablon (e29.tpl):

{include file="header.tpl"}

<h1> {#title#|capitalize}</h1>
<div>Data {$smarty.now|date_format:"%Y-%m-%d %H:%M:%S"}</div>


<form action="ex29.php" method="get"> 
<h3>Nowa książka</h3>
<div>Autorzy:<input type="text" name="authors" /></div>
<div>Tytuł:<input type="text" name="title" /></div>
<input type="submit" value="Zapisz"/>
</form>


<table>

{section name=b loop=$books}
{if $smarty.section.b.index is odd by 1}
   <tr class="odd">
    <td>
     {$books[b].title}
    </td>
    <td>
     {$books[b].authors}
    </td>
   </tr>
{else}
   <tr class="even">
    <td>
     {$books[b].title}
    </td>
    <td>
     {$books[b].authors}
    </td>
   </tr>
{/if}
{sectionelse}
<tr><td> zbiór pusty </td></tr>
{/section}
</tables>
{include file="footer.tpl"}

Jedną pożytecznych kwestii w szablonach jest możliwość wydzielenia ich fragentówdo innych plików (tu: header.tpl I footer.tpl).

Header:

<HTML>
<HEAD>
<TITLE>{$title}</TITLE>
<meta charset={$charset}" />
<style type="text/css">
{literal}
  td{padding: 10px; border:1px solid gray;} .odd {background-color:lightgray}
{/literal}
</style>
</HEAD>
<BODY bgcolor="#ffffff">

Footer:

</BODY>
</HTML>

Zwróć uwagę na konieczność ujęcia CSS w sekcji {literal} - umożliwia to użycie nawiasów {}, które w szablonie mają inne znaczenie (literal - nie jest analizowane).

<?php
chdir('ex29smarty');
include 'ex29c.php';