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

    Annonce

    Forsvarsministeriets Materiel- og Indkøbsstyrelse

    Cyberdivisionen søger en IT-supporterelev til Lokal IT på Hjørring Kaserne

    Nordjylland

    KMD A/S

    Projektleder

    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.

    Digital transformation | Frederiksberg

    Roundtable: AI i drift – fra eksperimenter til ansvar, værdi og kontrol

    AI-initiativerne breder sig hurtigt, men skaleringen halter. Kun hver fjerde virksomhed har flyttet en større del af sine AI-eksperimenter i produktion. Computerworld samler en udvalgt kreds af CIO’er og digitale beslutningstagere til et...

    Sikkerhed | Online

    Det du glemmer i Azure - men aldrig on-prem: Sådan genfinder du kontrollen

    Undgå dyre fejl i Azure. Få styr på udfasede services, skjulte omkostninger og governance. Lær, hvordan Reserved Instances, Azure Hybrid Benefit og de rette styringsmekanismer giver mere værdi, lavere omkostninger og en mere robust Azure-platform....

    Se alle vores events inden for it

    Navnenyt fra it-Danmark

    Norriq Danmark A/S har pr. 2. marts 2026 ansat Sarah Strøyer Hove som Consultant ERP. Hun skal især beskæftige sig med de nyeste teknologiske muligheder sammen med forretningsprocesserne. Hun kommer fra en stilling som Business Controller hos NGI A/S. Hun er uddannet hos Professionshøjskolen UCN som markedsføringsøkonom og International Handel og Markedsføring. Hun har tidligere beskæftiget sig med lager og logistik. Nyt job

    Sarah Strøyer Hove

    Norriq Danmark A/S

    Netip A/S har pr. 1. august 2026 ansat Ronni Randrup som Seniorkonsulent ved netIP's kontor i Aalborg. Han kommer fra en stilling som Operations Consultant hos Complea. Nyt job

    Ronni Randrup

    Netip A/S

    Systematic A/S har pr. 1. august 2026 ansat Casper Voldstedlund, 52 år,  som Director, Products. Han skal især beskæftige sig med drive produktudvikling inden for national sikkerhed og kritisk infrastruktur (NSI). Han kommer fra en stilling som Senior Director hos Stibo Systems A/S. Nyt job

    Casper Voldstedlund

    Systematic A/S