Lav dit eget CMS - del 1 27. sep 2010

For de fleste mennesker er gentagelser en rar ting – nogle spiser den samme ret hver søndag, nogle tager på ferie samme sted år efter år, de fleste børn elsker at høre den samme historie igen og igen, og alle går i seng hver aften og står op hver morgen. Men for programmører er gentagelser som regel grund til bekymring – ikke fordi de tror at der er tale om ”a glitch in the Matrix”, men fordi det dels er spild af tid at skrive det samme program to gange, og dels er der en risiko for at fejl der bliver opdaget det ene sted, ikke kommer med det andet sted. Jeg er overbevist om at der findes en slags ”programmør-gen” i selv ikke-programmører, der gør at man helst undgår at gentage og kopiere tidligere arbejde, men hellere vil bygge videre på sine succeser. Denne her artikelserie er til dig der måske ikke er programmør, men alligevel har genet, og måske for nylig opdaget det i forbindelse med dit arbejde med websider.

På et website er det ofte væsentligt at der er gentagelser fra side til side – for eksempel skal der være den samme menu, det samme logo, etc. på hver eneste side. Og enhver med bare en smule programmør-gen bliver lynhurtigt frustreret over for eksempel at skulle redigere menuen på hver eneste side ved selv den mindste ændring. Derfor kaster så mange webdesignere med programmeringsevner sig over at lave et CMS – et Content Management System der skal hjælpe med vedligeholde websiderne.

Jeg har selv arbejdet på mit eget CMS, Paginata, i efterhånden mange år, og har samlet en masse erfaringer som jeg gerne vil give videre. Allerhelst så jeg selvfølgelig at andre programmører bare begyndte at benytte Paginata, men argumentationen imod at sætte sig ind i et stort system, er sjovt nok den samme som min egen oprindelige argumentation for at lave Paginata: ”Det skal bare være noget simpelt.”

Så jeg vil beskrive hvordan du kan lave dit eget enkle CMS, med kun de få features du har brug for. Samtidig giver jeg dig den nødvendige viden til at programmere i PHP, og forhåbentlig får du lyst og evner til selv at opsøge mere viden og udbygge dine egne features. Som en lille ekstra gave fortæller jeg om nogle af de overvejelser jeg har haft med Paginata, og hvordan det adskiller sig fra andre CMS'er på markedet.

Den simple side der vokser

Du har sikkert allerede selv oplevet det, og hvis ikke, så har du forhåbentlig let ved at sætte dig ind i situationen: Du har lavet en webside – måske til dig selv, måske til en nær ven eller et familiemedlem – websiden har hele tiden skullet være simpel. ”Bare en enkelt side, ikke noget fancy,” har du sikkert sagt til dig selv. Og nu er den enkelte side blevet til to, tre, fire sider, og der er flere på vej.

Alle siderne har den samme opbygning, bestående af et sidehoved øverst, en menu med links til de andre sider, og en sidefod nederst – det eneste der adskiller sig er selve indholdet på hver side. Fordi du er så internationalt mindet kalder du ikke delene for sidehoved, indhold og sidefod, men header, content og footer, og du har lavet en grundlæggende html-struktur der går igen for alle siderne.

<html>
<head><title>sidens navn</title></head>
<body>
<div id="header">logo</div>
<div id="menu"><ul>
<li><a href="forside.html">forsiden</a></li>
<li><a href="om.html">Om os</a></li>
<li><a href="produkter.html">Produkter</a></li>
<li><a href="kontakt.html">Kontakt</a></li>
</ul>
</div>
<div id="content">sidens indhold</div>
<div id="footer">© copyright 2010</div>
</body>
</html>

Når du skal lave nye sider, så kopierer du en af de eksisterende, og ændrer i indholdet – det er dejligt nemt. Menuen får en ekstra linje med et link til den nye side, og der holder det nemme og det dejlige op, for den nye menu skal nu kopieres til samtlige eksisterende sider. Det begynder efterhånden at føles som irriterende ekstra-arbejde, især når du glemmer at opdatere alle siderne, så menuen ændrer sig fra side til side. Dit programmør-gen slår til, og du ønsker at der var en eller anden måde at lave menuen én gang, som en fælles komponent der kunne bruges af samtlige sider!

PHP og include

Med html-sider er der ikke umiddelbart nogen måde at definere ”komponenter” der kan bruges fra flere sider, men din webserver har også mulighed for at køre PHP, et programmeringssprog til hjemmesider. Måske kan det forekomme lidt overdrevent at involvere et helt programmeringssprog, bare for at kunne genbruge en menukomponent, men heldigvis er PHP et meget løst struktureret sprog, der ikke kræver at man skriver hele programmer – en enkelt linje hist og her kan sagtens blive udført alene. Du behøver stort set heller ikke at kunne programmere, men ender sikkert med at lære det alligevel i løbet af denne artikelserie.

Hvis en fil hedder .php frem for .html, så kigger webserveren efter afsnit der er indkapslet i mellem <?php og ?>, og forsøger at udføre det indkapslede PHP-program, før det samlede resultat sendes ud som en færdig webside.

Indtil videre har du kun brug for en enkelt PHP-funktion for at kunne inkludere én og samme menu-komponent på alle dine sider, nemlig funktionen include.

Lav den grundlæggende html om, så hele <div id="menu"></div> blokken erstattes med en <?php include("menu.php";) ?> blok – nu du er i gang, så gør det samme for header og footer, så din grundlæggende side kommer til at se således ud:

<html>
<head><title>sidens navn</title></head>
<body>
<?php include("header.php") ?>
<?php include("menu.php") ?>
<div id="content">sidens indhold</div>
<?php include("footer.php") ?>
</body>
</html>

Du skal selvfølgelig også lave de tre filer: header.php, menu.php og footer.php– de skal ikke indeholde noget PHP-kode, men bare den smule html som include-linjerne erstattede.

header.php

<div id="header">logo</div>

menu.php

<div id="menu"><ul>
<li><a href="forside.php">forsiden</a></li>
<li><a href="om.php">Om os</a></li>
<li><a href="produkter.php">Produkter</a></li>
<li><a href="kontakt.php">Kontakt</a></li>
</ul>
</div>

footer.php

<div id="footer">© copyright 2010</div>

Den væsentligste ændring er at alle dine sider nu hedder noget med .php– da de jo alle skal kunne køre den smule PHP-kode der skal til for at inkludere menuen.

Der er ikke noget teknisk krav om at menu.phphedder .php – og når den slet ikke indeholder noget PHP-kode, forekommer det måske lidt unødvendigt. Selv hvis filen indeholdt PHP-kode, så ville det alligevel blive udført, fordi filen er inkluderet af et andet PHP-program. Derfor er det ikke absolut nødvendigt med .php navnet, men det er alligevel en god ide.
Hvis en inkluderet fil indeholder PHP-kode, men ikke hedder .php, så vil en besøgende nemlig kunne komme til at åbne filen direkte, og derved få adgang til at læse din PHP-kode, der måske kan indeholde passwords og lignende der ikke lige skal ud i offentligheden.

Husk at menu.php ikke skal være en komplet html-side – der må ikke være <html>, <head> og <body> tags rundt om indholdet, der skal kun være den <div> der omkranser selve menuen.

Nu har du taget det første væsentlige skridt til et CMS, nemlig genbrug af komponenter og ensartet udseende af sider uden ekstra-arbejde. Næste skridt er så at gøre komponenterne lidt smartere.

Glæd dig til næste artikel i serien.

Kommentarer

Claus Abraham 14. juni 2011 kl. 14:57
Hvad bruger du som editor ?

Flot og brugbar hjemmeside generelt.

MVH
Claus

Tilføj kommentar

www.peterlind.dk

Nyeste blog-indlæg