Skabeloner med PHP

PHP-klassen FastTemplate er måden, hvorpå man kan skabe hurtige, velstrukturerede websites på.

Download

En styrke ved at bruge scriptingmiljøer som ASP og PHP til webudvikling, er at man kan blande script-kode og HTML. Hvis man har en variabel ved navn $titel, kan den nemt indlejres i HTML-koden, for eksempel sådan her:

<HTML>
<HEAD>
<TITLE><?php echo $titel; ?></TITLE>
</HEAD>
...

Når scriptet kører, bliver værdien af $titel-variablen skrevet ud inde i HTML-kodens <TITLE>-mærke. Det er nemt og effektivt til små scripts, men man betaler en pris for at kode på denne facon.

Koden bliver ganske hurtigt uoverskuelig, og det kan også gå ud over kørselstiden. Et andet problem er at HTML-koden er hårdkodet på denne facon, og det bliver svært at ændre udformning og layout, da script-koden og HTML-koden er blandet sammen i en pærevælling.

Til større websites vinder man i det lange løb ved at benytte andre teknikker, og en af dem er af bruge skabeloner. Der findes et Perl-modul ved navn FastTemplate til dette formål, og det har venlige mennesker porteret til PHP.

Download
FastTemplate Version 1.1.0 downloades fra Thewebmasters.net, men den er oprindeligt skrevet til PHP3, hvilket giver et problem. Der er sket nogle ændringer i PHP4, som gør at der skal rettes en anelse i koden. Hvorfor forfatterne ikke blot har lagt en ændret version til download, melder historien ikke noget om. Men det drejer sig kun om to ændringer, der til gengæld er beskrevet meget kortfattet på Thewebmasters.net, så her gennemgår vi dem lidt mere udførligt.

Tilretning

Start med at downloade og udpakke filerne. Klassen FastTemplate består kun af en enkelt fil, men der følger nogle ganske ubrugelige eksempler med i pakken - regn ikke med at de virker, hvis du har sat php.ini op på den skrappe måde.

Placer nu den udpakkede mappe et sted, hver webserveren har adgang, og åbn så filen class.FastTemplate.php3 i en teksteditor.

Gå til linie 199. Udskift linien

$template = ereg_replace("{$key}","$val","$template");

med linierne

$key = '{'."$key".'}';
$template = ereg_replace("$key","$val","$template");

Gå til linie 414. Udskift linien

$newParent .= "{$MacroName}\n";

med linien

$newParent .= '{'."$MacroName}\n";

Så skulle den være køreklar.

Til sidst er det en god ide at omdøbe filen til class.FastTemplate.php, så vi ved, at det ikke længere er PHP3-versionen, vi har at gøre med.

Skabelonen

Den grundlæggende virkemåde af FastTemplate er ganske simpel. Værdier, i almindelighed tekststrenge, evalueres og indsættes i skabelonerne. Man kan have et hierarki af skabeloner, for eksempel en skabelon til tabeller, en skabelon til brødtekst, og til sidst puttes alle delene ind i en skabelon for selve websiden, og så udskrives det hele til browseren.

Lad os allerførst se på, hvordan en skabelon ser ud. Det er blot HTML-dokumenter med FastTemplate's egne variabel-symboler indlejret i koden. Variablerne, som altså ikke er almindelige PHP-variabler, skives med Tuborg-klammer omkring navnet.

En skabelon for et helt HTML-dokument kunne se sådan ud:

<HTML>
<HEAD>
<TITLE>{TITEL}</TITLE>
</HEAD>
<BODY>
{INDHOLD}
</BODY>
</HTML>

Ideen er, at {TITEL} og {INDHOLD} udskiftes med de værdier, som vi nu synes. Det ser måske lidt for simpelt ud, men husk på, at skabelonerne kan indlejres imellem hinanden på kaskade-vis. Gem skabelonen herovre under navnet html_skelet.tpl.

Det første script

Lad os nu skive et lille script, som benytter skabelonen herover. Det kunne se sådan ud:

<?php

include "class.FastTemplate.php";

$tpl = new FastTemplate(".");

$tpl->define(array(
  "toplevel" => "html_skelet.tpl"
  ));

$tpl->assign("TITEL", "Min første skabelon");
$tpl->assign("INDHOLD", "<H1>Halløjsa!</H1><P>Det virker sørme.</P>");

$tpl->parse("MAIN", "toplevel");
$tpl->FastPrint();

?>

Lad os gennemgå koden: Først henter vi FastTemplate-klassen.

I den næste linie opretter (instantierer) vi et FastTemplate-objekt, som vi gemmer i variablen $tpl. FastTemplate skal kaldes med stien til skabelonerne som parameter, og derfor står der "." i eksemplet, hvilket betyder, at vores skabeloner ligger i samme mappe som scriptet.

Dernæst skal vi fortælle FastTemplate-objektet, hvad vi vil kalde vores skabeloner, og angive filnavnet på den tilhørende skabelon. Det gøres ved at oprette et associativt array (hashtabel), hvor "toplevel" peger på filen "html_skelet.tpl". Hvis associative arrays ikke lige er læserens kop te, er det helt i orden - de spiller ingen større rolle i forbindelse med FastTemplate, så det er nok blot at kunne mestre syntaksen.

I de næste to linier giver vi FastTemplate-variablen TITEL værdien "Min første skabelon", og INDHOLD værdien "<H1>Halløjsa!</H1><P>Det virker sørme.</P>".

I den næste linie beder vi FastTemplate-objektet om at parse, altså evaluere, den skabelon vi gav navnet "toplevel". Ja, foreløbig har vi jo kun en skabelon, så det skulle være til at holde styr på.

Til sidst udskriver vi den parsede skabelon med metoden FastPrint(), og:

Scriptet ovenfor kan deles op i fire trin: Først defineres sammenhængen mellem skabelonens FastTemplate-navn og den tilhørende fils navn. Dernæst tilskrives værdier til de variabler, som findes i skabelonen. Så parses - fortolkes - skabelonerne. Til sidst udskrives resultatet til browseren.

Indlejrede skabeloner

I eksemplet indgår der kun en enkelt skabelon, men når der er brug for flere, ser det sådan ud:

$tpl->define(array(
  "toplevel" => "html_skelet.tpl",
  "header" => "headerskabelon.tpl",
  "tabel" => "tabelskabelon.tpl"
));

Som nævnt får man mest ud af FastTemplate, hvis man opbygger sine sider af mange skabeloner. Lad os kigge på et eksempel, hvor vi skriver et udsnit af den lille tabel - altså den fra underskolen - ved hjælp af en tabel-skabelon.

En tabel består jo at et antal rækker, så vi har brug for en skabelon, som definerer en række og en skabelon, som definerer selve tabellen. Det ser sådan ud:

<TR>
  <TD>{TAL}</TD>
  <TD>{PRODUKT}</TD>
</TR>

Gem linierne i en fil med navnet raekke.tpl .

Dernæst tabel-kroppen:

<TABLE>
  <TR>
    <TD><B>Tallet</B></TD>
    <TD><B>Produktet</B></TD>
  </TR>
  {RAEKKER}
</TABLE>

Gem disse linier som tabel.tpl . Og så til tasterne.

<?php

include "class.FastTemplate.php";

$tpl = new FastTemplate(".");

$tpl->define(array(
  "tabel" => "tabel.tpl",
  "raekke" => "raekke.tpl"
  ));

$i = 1;
$produkt = $i*2;

$tpl->assign("TAL", $i);
$tpl->assign("PRODUKT", $produkt);

$tpl->parse("RAEKKER", "raekke");

for($i=2;$i<10;$i++) {
  $produkt = $i*2;
  $tpl->assign("TAL", $i);
  $tpl->assign("PRODUKT", $produkt);

  $tpl->parse("RAEKKER", ".raekke");
}

$tpl->parse("INDHOLD", "tabel");
$tpl->FastPrint();

?>

Her benytter vi en skabelon, raekke.tpl, som indlejres i en anden skabelon. Som før hægter vi vores skabelon-filer sammen med navne på skabelonerne.

Dernæst tilskriver vi FastTemplate-variablerne TAL og PRODUKT, og parser skabelonen "raekke". Nu introducerer vi en ny ting i forhold til det første eksempel. I den efterfølgende løkke akkumulerer vi "raekke" med hver enkelt række i tabellen. Det gøres ved at tilføje et punktum foran skabelon-navnet ("raekke") i linien

$tpl->parse("RAEKKER", ".raekke");

Det skal læses på samme måde som en kumuleret konkatenering i PHP-sætningen

streng .= " plus noget mere";

Efter løkken parser vi så skabelonen tabel, som indsætter de kumulerede rækker i tabel-skabelonen. Og så skriver vi det hele ud.

Eksemplet stopper her, men læseren kan forestille sig, hvorledes tabellen nu kunne indsættes i vores HTML-skelet fra første eksempel. På den måde kan store komplekse websites skabes ved hjælp af få ensartede skabeloner.

PHP-guruen med det imponerende navn Jesus Castagnetto har derudover skrevet en udvidelse til klassen, CachedFastTemplate, som benytter caching og dermed sætter ydelsen væsentligt i vejret. Den kan downloades fra Upperdesign.com.




Brancheguiden
Brancheguide logo
Opdateres dagligt:
Den største og
mest komplette
oversigt
over danske
it-virksomheder
Hvad kan de? Hvor store er de? Hvor bor de?
TIETOEVRY DENMARK A/S
Udvikler, sælger og implementerer software til ESDH, CRM og portaler. Fokus på detailhandel, bygge- og anlæg, energi og finans.

Nøgletal og mere info om virksomheden
Skal din virksomhed med i Guiden? Klik her

Kommende events
AI i det offentlige: Potentiale, erfaringer og krav

Hør erfaringerne med at anvende AI til at transformere og effektivisere processer i det offentlige – og med at sikre datakvalitet, governance og overholdelse af retningslinjer.

27. august 2025 | Læs mere


Computerworld Cloud & AI Festival 2025

Med den eksplosive udvikling indenfor cloud & AI er behovet for at følge med og vidensdeling større end nogensinde før. Glæd dig til to dage, hvor du kan netværke med over 2.400 it-professionelle, møde mere end 50 it-leverandører og høre indlæg fra +90 talere. Vi sætter fokus på emner som AI; infrastruktur, compliance, sikkerhed og løsninger for både private og offentlige organisationer.

17. september 2025 | Læs mere


IT og OT i harmoni: Sikring uden at gå på kompromis med effektiviteten

IT og OT smelter sammen – men med risiko for dyre fejl. Få metoder til sikker integration med ERP, kundesystemer og produktion. Tilmeld dig og få styr på forskellene og faldgruberne.

24. september 2025 | Læs mere