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