2010-10-28 02:10 #0 av: johan-ahlback

Php funktionen include är ett smart sätt att lägga till menyer eller annat som ska vara exakt likadant på alla sidor. Det är bättre än att använda frames.

Tänk dig det här scenariot:
Du har en hemsida som är byggd med html, du har en meny som ska visas på alla sidor. När du är klar med menyn och lagt till den på varje sida kommer du på att du ska lägga till en länk till. Hur går du tillväga då? går du in på alla sidor eller använder du sök och ersätt?

Styrkan med att länka in dokument.
Om man ska ha samma saker på flera sidor är det bättre att länka in det så slipper man gå in i varje sida och ändra. Ta css som ett exempel. Om du vill att alla länkar ska vara blå så behöver du bara ändra i css filen och sen är alla länkar blåa. Hade du däremot skrivit css i varje html fil eller använt inline style så hade det varit jobbigare. Så att länka in är ett mycket bättre sätt.

Vad är php?
Php är ett kodspråk som körs på servern innan sidan skickas till webbläsaren till skillnad från javascript som körs när sidan har laddats i webbläsaren. Så med php kan man göra saker som påverkar hur sidan ska visas innan den skickas. Om vi till exempel skulle skriva:

<?php echo "Foo" ?>

Så skulle det bara stå Foo på sidan och inte hela raden. Dock måste man ha en server för att se php. man kan inte bara öppna den som man kan med en html fil.

Måste jag kunna php för att använda include?
Nej. Många tror att man måste skriva allt i php när man har en php fil. Men så är det inte. En php fil är egentligen en html fil. Man har php ändelsen bara för att servern ska veta att det är php. Så om du har en html fil så byt filtyp till php så ser du att inget ändras.

Hur ska jag använda php include?
Skapa en php fil och gör din sida i den som vanligt med html. Sen skapar du en annan fil med ändelsen php eller html. Lägg in alla koder för menyn i det dokumentet. Sen skriver man:

<?php include("minfil.php") ?>

Så är det klart. Nu kan du gå in och ändra menyn för alla sidor på ett ställe.

Hur fungerar det?
När man använder php funktionen include så hämtar den filen och tar allt som finns där och placerar det i koden. Så har du en html lista så kommer listan läggas in i koden till skillnad från frames som bara visar den andra filen. Det betyder att du inte behöver ha en annan css fil för det som du länkar in.

En liten bonus:
Om jag vill visa vilken sida man är på genom att visa den länken annorlunda?
I vanliga fall använder man ett klassnamn men nu går inte det så istället kan man ge body ett klassnamn som är samma som namnet på sidan och sen använder man olika klassnamn på länkarna:

Så här ser min meny ut:

<ul id="menu">
<li class="hem"><a href="index.php">Hem</a></li>
<li class="ommig"><a href="ommig.php">Om mig</a></li>
<li class="kontakt"><a href="kontakt.php">Kontakt</a></li>
<li class="blogg"><a href="blogg.php">Blogg</a></li>
</ul>

Alltså vill jag att när jag klickat på om mig och kommit till den sidan så ska den länken visas annorlunda. Så nu får jag skriva lite php:

<body class="<?php echo basename($_SERVER['PHP_SELF'], ".php")?>">

Nu kommer body att få samma klass som filens namn fast utan utan .php.
Här kommer cssen:

body.index #menu li.hem,
body.ommig #menu li.ommig,
body.kontakt #menu li.kontakt,
body.blogg #menu li.blogg{
koden här.
}

Nu kommer den att visa den aktiva sidan länk annorlunda.