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.

Annonce

Netcompany A/S

IT Consultant

Nordjylland

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Cyberdivisionen søger sektionschef til Systemafdelingen i Hvidovre

Københavnsområdet

KMD A/S

Senior Mainframe and .NET Developer

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

ERP Insights 2026

Webinaret giver et samlet overblik over, hvordan ERP-landskabet ændrer sig, og hvilke arkitekturvalg der får direkte betydning for forretningens evne til at tilpasse sig.

Sikkerhed | København

Cyber Security Festival 2026

Mød Danmarks skrappeste it-sikkerhedseksperter og bliv klar til at planlægge og eksekvere en operationel og effektiv cybersikkerhedsstrategi, når vi åbner dørene for +1.700 it-professionelle. Du kan glæde dig til oplæg fra mere end 80 talere og...

It-løsninger | København

Dynamics 365 FO: Næste niveau for data, AI og forretning

Få overblik over vejen fra Dynamics AX til Finance & Operations – eller løft værdien af Dynamics FO. Hør praksisnære cases om strategi, migration og optimering. Vælg spor, få dyb faglig indsigt, styrk beslutningerne. Tilmeld dig konferencen i...

Se alle vores events inden for it

Navnenyt fra it-Danmark

Softwarevirksomheden Idura, som udvikler løsninger til digital identifikation og autentifikation, har pr. 1. august 2026 ansat Maria Binger, 44 år,  som CFO. Hun skal især beskæftige sig med den finansielle styring i takt med Iduras vækst i Danmark og internationalt med fokus på blandt andet forecasting. Hun kommer fra en stilling som Director Business Finance hos Danelec. Hun er uddannet cand.merc.aud. fra Copenhagen Business School. Hun har tidligere beskæftiget sig med finance hos Agillic, Cobham SATCOM og Saxo Bank. Nyt job

Maria Binger

Softwarevirksomheden Idura, som udvikler løsninger til digital identifikation og autentifikation,

Genetec har pr. 1. august 2026 ansat Jan Julin som Channel Account Executive. Han skal især beskæftige sig med styrke samarbejdet med partnere og kunder i Danmark, Finland og Baltikum. Han kommer fra en stilling som Senior Business Development Manager hos Dahua Technology. Han har tidligere beskæftiget sig med videoovervågning, adgangskontrol, sikkerhedsteknologi, salg og forretningsudvikling. Nyt job

Jan Julin

Genetec

IFS Danmark A/S har pr. 1. september 2026 ansat Gustav Olsen som Business Development Representative. Gustav skal især beskæftige sig med forretningsudvikling & identificering af muligheder med fokus på AI, automatisering og optimering af forretningsprocesser. Gustav kommer fra en stilling som Business Development Specialist hos SAP Danmark A/S. Gustav er uddannet Cand.merc Sales Management. Gustav har tidligere beskæftiget sig med forretningsudvikling og salgsstrategi inden for ERP-teknologi. Nyt job

Gustav Olsen

IFS Danmark A/S

Arctic Wolfs Network har pr. 1. september 2026 ansat Victor Dohlmann som Sales Director for Nordics. Nyt job

Victor Dohlmann

Arctic Wolfs Network