preprost template engine

Torej z template engini nimam nič izkušenj in iščem čimbolj preprost template engine. Gledal sem smarty ampak se mi zdi za stran ki jo izdelujem veliko preobsežen. Rad bi nekaj majhnega, mogoče z podporo cachiranja..

Našel sem en primer in me zanima, če je primeren za uporabo in ali se najde še kaj podobnega? Hvala za nasvete.

8 odgovorov

Template Engine je ponavadi zahteven toliko kakor si sam narediš.
Jaz osebno uporabljam DWOO

Kaj je narobe iz Titovim MiniTpl, na scene-si.org ?

http://scene-si.org/minitpl/

Super, nekaj takega sem iskal. Malo sem probaval kako in kaj s tem in se mi je zalomilo. Torej imam datoteke: main.tpl, header.tpl, user.tpl, footer.tpl.

main.tpl

<head>
<title>{site_title}</title>
</head>

<body>
{include header.tpl}
<div id="content">{site_content}</div>
{include header.tpl}
</body>
</html>

v header.tpl in footer.tpl imam nek tekst

user.tpl

<h1>{username} profile</h1>
<ul>
    <li><span>Name:</span>{name}</li>
    <li><span>Age:</span>{age}</li>
    <li><span>Location:</span>{location}</li>
    <li><span>Date:</span>{date}</li>
</ul>
<ul>
{foreach $users as $id=>$user}
   <li><a href="{id|escape}">{user}</a></li>
{/foreach}
</ul>

in datoteka user.php

<?php
include('class.minitpl.php');

$tpl = new minitpl;
$tpl->load('user.tpl');
$data = array(
    "username" => "test",
    "name" => "Kwak",
    "age" => "150",
    "location" => "Slovenija",
    "date" => date("m.d.Y")
);
$tpl->assign($data);

$users = array(
    "users" => array("test1", "test2", "test3", "test4", "test5"),
);
$tpl->assign($users);
$tpl->render();
?>

Zdaj bi pa jas želel, da je main.tpl glavn fajl in je kot neke vrste iztočnica za druge datoteke. Torej če jas v brskalniku odprem user.php bi mi preko main.tpl moralo naložit header in footer ter vsebino user.tpl. Torej zanima me kako spremenljivko $tpl "vpisati" pod site_content v main.tpl. Upam da razumete. :)

Če prav razumem?

{include header.tpl}
<h1>{username} profile</h1>
<ul>
<li><span>Name:</span>{name}</li>
<li><span>Age:</span>{age}</li>
<li><span>Location:</span>{location}</li>
<li><span>Date:</span>{date}</li>
</ul>
<ul>
{foreach $users as $id=>$user}
<li><a href="{id|escape}">{user}</a></li>
{/foreach}
</ul>
{include footer.tpl}

Al sem narobe razumel tvoje vprašanje ?

V bistvu ne popolnoma, rad bi da bi vse izhajalo iz main.tpl, da nebi rabo v vsaki strani z vsebino (ki ni footer ali header) inkludat teh dveh datotek. Nekako da bi v datoteki user.php zloadal main.tpl in kot content vstavil user.tpl. Upam da je bolj razumljivo..

{include header.tpl}
<div id="content">
{if $data['username'] != null } <!-- ustvariš en pogoj -->
{include user.tpl}
{/if}
</div>
{include footer.tpl}

Če te sedaj prav razumem :D

Še zmeraj nisma na istem. Imam datoteko user.php v kateri zloadam main.tpl:

$tpl->load('main.tpl');

v katerem se avtomatsko inkudata header in footer.tpl, zaenkrat imam obliko strani z header in footer (ter potrebne html, body, meta tage). Moram še samo vstaviti vsebino torej morem nekako preko assign funkcije vstaviti vsebino user.php (v prejšnji datoteki) v main.tpl:

$tpl = new minitpl;
$tpl->load('user.tpl');
$data = array(
    "username" => "test",
    "name" => "Kwak",
    "age" => "150",
    "location" => "Slovenija",
    "date" => date("m.d.Y")
);
$tpl->assign($data);

$users = array(
    "users" => array("test1", "test2", "test3", "test4", "test5"),
);
$tpl->assign($users);
$tpl->render();

v main.tpl, vrjetno nekako takole:

$tpl->assign("content", $tpl->load('user.tpl'));

ali pa si jas to stvar narobe predstavljam.