Introduktion til templates i Instans CMS
En template (eller en skabelon, som det ofte kaldes på dansk) er en HTML/PHP-fil, der fastlægger struktur og layout for en side. Typisk består en template af følgende elementer, som er koblet sammen:
Selve templatefilen
Selve template-filen, som er en PHP-fil placeret i mappen /includes/templates/. Denne fil kan f.eks. hedde "defaultpage.template.php". Når man åbner en template-fil, vil den i det store hele ligne en almindelig HTML- eller XHTML-fil, dog med nogle af Instans CMS' template-PHP-funktioner placeret på relevante steder i HTML'en. Klik her for at læse mere om template-funktioner.
Stylesheets (CSS-filer)
Fra template-filen er der typisk linket til et stylesheet (med et <link rel="stylesheet "... /> tag), som ligger i mappen includes/css/. Det er ikke obligatorisk at linke til et stylesheet - man kan helt udelade det, hvis man ikke ønsker at CSS-style sit website, eller man kan lægge alle CSS-deklarationer i selve templaten (dette er dog ikke anbefalelsesværdigt, eftersom man ofte vil dele samme CSS-fil på tværs af flere templates).
Bemærk i øvrigt, at stort set alle "standard-elementer" i Instans CMS' frontend - elementer, som er bygget med diverse template-funktioner - kan styles efter behov, fordi de automatisk outputtes med class- eller id-attributter, som kan bruges som "håndtag" i CSS-filen. Dette gælder alt fra nyhedsarkiver til menuer, blogs, nyhedsbrev-tilmelding, formularer, etc. Den nemmeste måde at få overblik over disse classes og id'er er at kigge i kildekoden - "view source" - på den færdig-genererede side. En anden mulighed er at finde den pågældende funktion i enten /cms/frontend_common.inc.php, cms/sharedfunctions.inc.php eller /cms/modules/modulnavn/frontend/ og se, hvordan HTML'en bygges i funktionen.
Javascript
Fra templaten er der ligeledes (med et <script src="..."> tag) linket til de nødvendige javascript-filer, som ligger i mappen /includes/javascript. Nogle javascript-filer er obligatoriske. Det drejer sig om /includes/javascript/common.js, /includes/javascript/prototype.js og includes/javascript/scriptaculous.js. Disse filer er obligatoriske, fordi de indholder javascript-funktioner, der bruges af standard-funktioner i Instans CMS.
Obligatorisk PHP
Desuden indeholder en template en række obligatoriske PHP-includes. En obligatorisk linje PHP, som placeres i en templates <head> del, er:
<?php include ($_SERVER[DOCUMENT_ROOT]."/cms/frontend/frontend_headerJS.php"); ?>
Derudover...
Derudover er der frit slag, og kun fantasien sætter grænser (sådan da). Man kan benytte sig af en række standard-template-funktioner til at outputte dynamisk indhold i templaten. Man kan også skrive sine egne template-funktioner, som kan kaldes fra templaten. Hvis man skriver egen funktioner, kan man placere dem i filen /includes/custom_functions.php. Denne fil inkluderes automatisk, så funktionerne bliver gjort tilgængelige fra enhver template.
Alternativt er der ikke noget i vejen for at opfinde sin egen filstruktur, f.eks. kan man lave en fil, der hedder /includes/mine_templatefunktioner.php og inkludere denne fil i toppen af sin template. Og der er heller ikke noget i vejen for at skrive funktioner eller blokke af PHP direkte i selve templaten, altså at lave et <?php ... ?> afsnit, hvor det passer én. For overskuelighedens skyld, eller hvis man vil bruge samme funktioner i flere forskellige templates, bør man dog placere custom PHP-kode i separate filer.
Man behøver ikke at connecte til MySQL-databasen - dette sker automatisk i filen cms_config.inc.php, som er det allerførste, systemet indlæser, når siden bygges. Der er derfor altid "hul igennem" til databasen, når man er i en template.
Hvad med plugins?
Plugins behandles i et separat afsnit - læs mere om plugins her.
Hvad med sub-templates?
Instans CMS arbejder kun med templates i ét niveau, og der er derfor ingen formel mulighed for at benytte subtemplates (som man f.eks. kender det fra Smarty eller andre template-engines). Dette er en designbeslutning, som skal gøre det nemmere at arbejde med Instans CMS.
Hvis man ønsker det, er der dog intet i vejen for at definere sine egne subtemplates. Man kan f.eks. lave en sidefod i /includes/templates/min_sidefod.subtemplate.php og inkludere denne i bunden af sin hovedtemplate:
<?php include_once($_SERVER[DOCUMENT_ROOT]."/includes/templates/min_sidefod.subtemplate.php ") ?>
Hvis man benytter variabler i subtemplaten, som har fået tildelt en værdi i hovedtemplaten, skal man huske at gøre variablen global i subtemplaten:
<?php global $min_variabel; ?>