Visa ett inlägg
Oläst 2007-10-11, 10:06 #17
anders.n anders.n är inte uppkopplad
Medlem
 
Reg.datum: Oct 2004
Inlägg: 113
anders.n anders.n är inte uppkopplad
Medlem
 
Reg.datum: Oct 2004
Inlägg: 113
För php gillar jag Smarty Template Engine (smarty.php.net). Då kan man helt skilja kod från layout.

Man skapar en template-mapp som innehåller designen, och kan t.ex. ha olika template-mappar för olika språk.

Sedan läser man in sidinnehåll från en databas (eller direkt från filer om man så vill), och använder Smarty för att "rita ut sidan". Man kan även använda dess cache-funktioner, och loopar på sidan, etc.

t.ex /templates/main_page.tpl
Kod:
<html>
<head><title>{$title}</title></head>
<body>{include file='left_menu.tpl'}

{$body_content}

</body></html>
sedan... website.php
Kod:
$language = 'english';
if (isset($_GET['language'])) $language=mysql_real_escape_string($_GET['language']);

// Kolla om den finns i cache... cache_id är per språk.
if (!$smarty->is_cached('main_page.tol', $language))
{ // Finns inte i cache, läs in från databasen...
  $title = read_from_database('index_sida', 'title', $language);
  $content = read_from_database('index_sida', 'content', $language);

  // Sätt värden i Smarty-template
  $smarty->assign('title', $title);
  $smarty->assign('body_content', $content);
}

// Sätt cache till... 24 timmar... (så att den bara behöver ansluta till databasen en gång om dagen för sidan)
$smarty->cache_lifetime = 60 * 60 * 24;

// Visa sidan... antingen från cache eller nyhämtat från databas om den inte var cachad...
$smarty->display('main_page.tpl', $language);
(sådär skulle jag inte koda, och man ska inte ha ofiltrerad input som cache_id, språk som id i databasen, och kunna falla tillbaka till engelska, men.. ;P)

Det jag gillar är att man enkelt kan loopa igenom arrayer och hantera associativa arrayer i templaten, och ha enkel ...

Man kan hämta t.ex. en medlemslista från databasen som en array av associativa arrayer... sedan loopa igenom dem, och i templaten ha typ:

Kod:
<h1>Lista</h1>
{section name=i loop=$users}
<p>Namn: {$users[i].namn}<br />
Ålder: {$users[i].alder}<br /></p>
{sectionelse}
Finns inga! Tom array!
{/section}
om man skickar den en array som innehåller [ [name => 'kalle', alder=5], [name => 'olle', alder=7 ] (vilket ENKELT kan hämtas direkt från databasen), så får man följande output:

Kod:
<p>Namn: kalle<br />
Ålder: 5<br /></p>
<p>Namn: olle<br />
Ålder: 7<br /></p>
Sedan kan man ju med hjälp av mod_rewrite och/eller path_info få "snygga" URLer:
www.example.com/english/nice_page_name

Finns naturligtvis många andra befintliga template-klasser för olika språk, men för php har jag av någon anledning fastnat för Smarty.
anders.n är inte uppkopplad   Svara med citatSvara med citat