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.

Læses lige nu

    Red Barnet

    IT Infrastructure Architect

    Københavnsområdet

    Netcompany A/S

    Data Management Consultant

    Midtjylland

    Statens IT

    IT-projektleder hos Statens It

    Københavnsområdet

    Computerworld Events

    Vi samler hvert år mere end 6.000 deltagere på mere end 70 events for it-professionelle.

    Ekspertindsigt – Lyt til førende specialister og virksomheder, der deler viden om den nyeste teknologi og de bedste løsninger.
    Netværk – Mød beslutningstagere, kolleger og samarbejdspartnere på tværs af brancher.
    Praktisk viden – Få konkrete cases, værktøjer og inspiration, som du kan tage direkte med hjem i organisationen.
    Aktuelle tendenser – Bliv opdateret på de vigtigste dagsordener inden for cloud, sikkerhed, data, AI og digital forretning.

    It-løsninger | Online

    Kod smartere med GitHub Copilot

    Få styr på GitHub Copilot og skriv bedre kode hurtigere. Se hvordan Copilot løser opgaver, sparrer på fejl og løfter komplekse workflows. Oplev live demo og lær hvordan du kommer i gang med licenser og opsætning.

    Sikkerhed | København

    Cyber Threats

    Få teknisk indsigt og konkrete løsninger til at modstå moderne cyberangreb. Lær af fejl, stop angreb i tide og byg systemer med ægte resiliens. Fokus på lavniveau-detektion, netværksovervågning og hurtig gendannelse. Deltag i Cyber Threats fra...

    It-løsninger | København V

    Platform X 2026: Forretning, teknologi og transformation

    Mød verdens stærkeste og mest effektive platforme der driver den digitale transformation samlet i København - og dyk ned i den nyeste teknologi.

    Se alle vores events inden for it

    Navnenyt fra it-Danmark

    Trafikstyrelsen har pr. 1. maj 2026 ansat Nihad Hodzic som IT og Digitaliseringschef. Han skal især beskæftige sig med med IT-projekter og digital transformation, herunder især det strategiske løft af Trafikstyrelsens digitale niveau. Han kommer fra en stilling som Kontorchef hos Udviklings og Forenklingsstyrelsen. Han er uddannet i statskundskab og har en lederuddannelse fra MIT Sloan, samt en igangværende Master i IT-Ledelse. Han har tidligere beskæftiget sig med IT-udvikling og større projekter på momsområdet, hvor han har ledet et projekt- og udviklingskontor. Nyt job

    Nihad Hodzic

    Trafikstyrelsen

    Netip A/S har pr. 1. april 2026 ansat Claus Berg som Account Manager ved netIP's kontor i Esbjerg. Han kommer fra en stilling som Client Manager hos itm8. Nyt job

    Claus Berg

    Netip A/S

    Pinksky ApS har pr. 1. maj 2026 ansat Jeppe Spanggaard, 29 år,  som Rådgivende konsulent, Partner. Han skal især beskæftige sig med Digitalisering med Microsoft-platformen. Han kommer fra en stilling som Microsoft 365 & SharePoint Specialist hos Evobis ApS. Nyt job

    Jeppe Spanggaard

    Pinksky ApS

    Comsystem A/S har pr. 15. april 2026 ansat Iver Jakobsen som Technical Key Account Manager. Han skal især beskæftige sig med teknisk løsningssalg. Iver Jakobsen har 25 års erfaring fra TelCo-branchen. Han kommer fra en stilling som Key Account Manager hos E.ON Drive ApS. Han har tidligere beskæftiget sig med rådgivning og løsningssalg. Nyt job

    Iver Jakobsen

    Comsystem A/S