Gevonden: Smarty
http://smarty.php.net/
Fantastisch! Dit is een template engine die mijn geliefde HTML::Template van perl doet verbleken.
Template dingen als:
<html>
<head>
<title>User Info</title>
</head>
<body>
User Information:<p>
Name: {$name|capitalize}<br>
Addr: {$address|escape}<br>
Date: {$smarty.now|date_format:"%Y-%m-%d"}<br>
</body>
</html>
Vervolgens: het laden van meerdere info naar een template:
<table>
{section name=mysec loop=$name}
{strip}
<tr bgcolor="{cycle values="#eeeeee,#dddddd"}">
<td>{$name[mysec]}</td>
</tr>
{/strip}
{/section}
</table>
<table>
{section name=mysec loop=$users}
{strip}
<tr bgcolor="{cycle values="#aaaaaa,#bbbbbb"}">
<td>{$users[mysec].name}</td>
<td>{$users[mysec].phone}</td>
</tr>
{/strip}
{/section}
</table>
Dit wordt pas echt leuk:
Een tabel compleet naar een template sjouwen zonder moeite zou zo moeten kunnen (alles dmv fetcharray naar smarty slepen):
Nu de template (voor de w3c fanaten: NU EVEN NIET!):
<html>
<head><title>Guestbook</title></head>
<body>
<h1>Guestbook</h1>
<table>
<tr><td>
{section name=entry loop=$entries}
{strip}
<tr bgcolor="{cycle values="#aaaaaa,#bbbbbb"}">
<td><b>{$entries[entry].name|escape:"htmlall"}</b></td>
<!-- // HTML entities.. --!>
<td>{$entries[entry].date|date_format:"%A, %B %e, %Y"}</td>
<!-- // Date format.. eet alle formaten (unixtime, time, mysql formaat --!>
</tr>
<tr bgcolor="{cycle values="#aaaaaa,#bbbbb"}">
<td colspan="2">{$entries[entry].comment|escape:"htmlall"}</td></tr>
</tr>
</table>
{/section}
</table>
Effectief gezien:
Alle opmaak informatie zit nu in de template. De code in php is beperkt tot 4 regels, niet geheel eerlijk, in de template zitten toch flink wat meer regels code.
Mijn punt is dat je met dit systeem een ongelofelijk krachtig systeem kan opzetten om met minder tijd, minder code meer te doen.
Fantastisch! Dit is een template engine die mijn geliefde HTML::Template van perl doet verbleken.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?
include('Smarty.class.php');
// create object
$smarty = new Smarty;
// assign some content. This would typically come from
// a database or other source, but we'll use static
// values for the purpose of this example.
$smarty->assign('name', 'george smith');
$smarty->assign('address', '45th & Harris');
// display it
$smarty->display('index.tpl');
?>
include('Smarty.class.php');
// create object
$smarty = new Smarty;
// assign some content. This would typically come from
// a database or other source, but we'll use static
// values for the purpose of this example.
$smarty->assign('name', 'george smith');
$smarty->assign('address', '45th & Harris');
// display it
$smarty->display('index.tpl');
?>
Template dingen als:
<html>
<head>
<title>User Info</title>
</head>
<body>
User Information:<p>
Name: {$name|capitalize}<br>
Addr: {$address|escape}<br>
Date: {$smarty.now|date_format:"%Y-%m-%d"}<br>
</body>
</html>
Vervolgens: het laden van meerdere info naar een template:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?
include('Smarty.class.php');
// create object
$smarty = new Smarty;
// assign an array of data
$smarty->assign('name', array('bob','jim','joe','jerry','fred'));
// assign an associative array of data
$smarty->assign('users', array(
array('name' => 'bob', 'phone' => '555-3425'),
array('name' => 'jim', 'phone' => '555-4364'),
array('name' => 'joe', 'phone' => '555-3422'),
array('name' => 'jerry', 'phone' => '555-4973'),
array('name' => 'fred', 'phone' => '555-3235')
));
// display it
$smarty->display('index.tpl');
?>
include('Smarty.class.php');
// create object
$smarty = new Smarty;
// assign an array of data
$smarty->assign('name', array('bob','jim','joe','jerry','fred'));
// assign an associative array of data
$smarty->assign('users', array(
array('name' => 'bob', 'phone' => '555-3425'),
array('name' => 'jim', 'phone' => '555-4364'),
array('name' => 'joe', 'phone' => '555-3422'),
array('name' => 'jerry', 'phone' => '555-4973'),
array('name' => 'fred', 'phone' => '555-3235')
));
// display it
$smarty->display('index.tpl');
?>
<table>
{section name=mysec loop=$name}
{strip}
<tr bgcolor="{cycle values="#eeeeee,#dddddd"}">
<td>{$name[mysec]}</td>
</tr>
{/strip}
{/section}
</table>
<table>
{section name=mysec loop=$users}
{strip}
<tr bgcolor="{cycle values="#aaaaaa,#bbbbbb"}">
<td>{$users[mysec].name}</td>
<td>{$users[mysec].phone}</td>
</tr>
{/strip}
{/section}
</table>
Dit wordt pas echt leuk:
Een tabel compleet naar een template sjouwen zonder moeite zou zo moeten kunnen (alles dmv fetcharray naar smarty slepen):
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?
// mysql connectie al gemaakt ga ik even voor de lol vanuit
// Dit is een simpele versie van wat ik in perl gebruik (in perl kan ie eigenlijk ook nog inserten, en updaten en andere leuke dingen)
function sjouwtabel ($query) {
$result = mysql_query($query);
$resultarray = array();
// $query is bijv: SELECT * FROM TABEL
while ($record = mysql_fetch_array($result, MYSQL_ASSOC)) {
array_push($resultarray, $record);
}
return $resultarray;
}
// Nu het specifieke gedeelte:
include('Smarty.class.php');
// create object
$smarty = new Smarty;
$data = sjouwtabel("SELECT naam,comment,datum FROM guestbook");
// gegeven: naam en comments zijn strings, datum is mysql datetime
$smarty->assign('entries', $data);
$smarty->display('guestbook.tpl');
?>
// mysql connectie al gemaakt ga ik even voor de lol vanuit
// Dit is een simpele versie van wat ik in perl gebruik (in perl kan ie eigenlijk ook nog inserten, en updaten en andere leuke dingen)
function sjouwtabel ($query) {
$result = mysql_query($query);
$resultarray = array();
// $query is bijv: SELECT * FROM TABEL
while ($record = mysql_fetch_array($result, MYSQL_ASSOC)) {
array_push($resultarray, $record);
}
return $resultarray;
}
// Nu het specifieke gedeelte:
include('Smarty.class.php');
// create object
$smarty = new Smarty;
$data = sjouwtabel("SELECT naam,comment,datum FROM guestbook");
// gegeven: naam en comments zijn strings, datum is mysql datetime
$smarty->assign('entries', $data);
$smarty->display('guestbook.tpl');
?>
Nu de template (voor de w3c fanaten: NU EVEN NIET!):
<html>
<head><title>Guestbook</title></head>
<body>
<h1>Guestbook</h1>
<table>
<tr><td>
{section name=entry loop=$entries}
{strip}
<tr bgcolor="{cycle values="#aaaaaa,#bbbbbb"}">
<td><b>{$entries[entry].name|escape:"htmlall"}</b></td>
<!-- // HTML entities.. --!>
<td>{$entries[entry].date|date_format:"%A, %B %e, %Y"}</td>
<!-- // Date format.. eet alle formaten (unixtime, time, mysql formaat --!>
</tr>
<tr bgcolor="{cycle values="#aaaaaa,#bbbbb"}">
<td colspan="2">{$entries[entry].comment|escape:"htmlall"}</td></tr>
</tr>
</table>
{/section}
</table>
Effectief gezien:
Alle opmaak informatie zit nu in de template. De code in php is beperkt tot 4 regels, niet geheel eerlijk, in de template zitten toch flink wat meer regels code.
Mijn punt is dat je met dit systeem een ongelofelijk krachtig systeem kan opzetten om met minder tijd, minder code meer te doen.
Gewijzigd op 03/02/2005 14:08:00 door Arend a
Jelmer
Ik ben er nu pas net wat mee aant experimenteren. Opzich wel leuk maar er zullen heus wel nadelen aan zitten die ik nog niet gevonden heb :D.
En offtopic: coole naam als onderwerp! Ik dacht al "wie is er dan zijn smartie kwijt?" :)
wel vet dat smarty..
met een template parser kun je de html gescheiden houden je scripts. In theorie zou er helemaal geen html meer in je scripts hoeven te zitten maar in praktijk klopt dit niet helemaal. Maar zo kun je heel makkelijk verschillende lay outs maken. Je kan zelfs de gebruiker een layout laten kiezen. Bijna iedereen kent wel phpBB forums. Bij die forums is de code overal hetzelfde. Alleen de templates zijn anders :). op phpbb.com staan wel een paar voorbeelden.
www.uprise.be heb ik iets van 3 <b> tags verwerkt in de html. (En er zitten toch iets van 20 templates in de site, zo niet meer). Je zult alleen even moeten kijken of je werkelijk zin hebt om er een aparte template voor te brouwen.
Voor huh wacht dit volg ik niet :/ Met 3 <b> tags kun je geen complete site maken lijkt me :). Je zult toch ook wel gewoon wat .tpl bestanden hebben neem ik aan?
Drie <b> tags in mijn php code, de rest zit dus in templates.