Edellisessä osassa tarkastelimme sitä, miten saamme kevennettyä ylläpidon taakkaa yksinkertaisesti php:n erän ominaisuuden avulla. Tällä kertaa syynissä on vaihtoehto sijoittaa kaikki tarvittava yhteen tiedostoon. Edellisessä osassa erotimme sisällön ja ulkoasun eri tiedostoihin. Nyt siis sijoitamme kaiken sisällön ja ulkoasun samaan tiedostoon. Huomaathan myös oppaan loppuun tehdyn lisäosan!
Takaisin "Oppaat ja esimerkit" -osion etusivulle
Otetaanpa tähän esimerkkitiedosto. Tyypillinen html-sivu? Kyllä. Mutta haluamme myös muiden vastaavien sivujen sisällöt tuohon. Emme halua kuitenkaan nähdä kaikkea sisältö kerralla, haluamme nähdä vain sen sisällön mitä yhdelle sivulle kuuluisi.
<html> <head> <title>veer is tö manki</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <link rel="stylesheet" href="apina.css" type="text/css" /> </head> <body> <div id="valikko"> <a href="index.php" target="_top">Index</a><br /> <a href="apina.php" target="_top">Apina</a><br /> <a href="arkistot.php" target="_top">Arkisto</a><br /> <a href="tarinat.php" target="_top">Tarinat</a><br /> <a href="kirjat.php" target="_top">Kirjat</a><br /> <a href="musiikki.php" target="_top">Musiikki</a><br /> </div> <div id="sisin"> <!-- SISÄLTÖ ALKAA --> <div class="otsikkoteksti">Apina</div> <p>Muinaisten viikinkien lyhytkarvakissojen ja ristiretkeläisten mukana Norjaan kulkeutuneiden pitkäkarvakissojen arvellaan olevan alkuna norjalaiselle metsäkissarodulle. Norjalainen metsäkissa on kehittynyt luonnollisen valinnan seurauksena Norjan ankarassa ilmastossa, jossa vain terveimmät ja voimakkaimmat yksilöt ovat selviytyneet jatkamaan sukua.</p> <!-- SISÄLTÖ LOPPUU --> </div> </body> </html>
Syvenymme nyt siis noiden sisältö-kommenttien väliin, jonne haluaisimme sijoittaa muutakin kuin mitä edellä näemme.
On olemassa kätevä keino ottaa selville mitä sivuston selaaja haluaa. Voimme linkin avulla ottaa talteen muuttujan arvon. Seuraava linkki kertoo meille, että muuttuja $sivu saa arvokseen 1.
<a href="index.php?sivu=1">jonnekin</a>
Saamme kaapattua tuon arvon seuraavasti:
$sivu = intval($_GET["sivu"]);
Voimme siis muuttaa tiedostomme linkit muotoon:
<div id="valikko"> <a href="index.php" target="_top">Index</a><br /> <a href="index.php?sivu=1" target="_top">Apina</a><br /> <a href="index.php?sivu=2" target="_top">Arkisto</a><br /> <a href="index.php?sivu=3" target="_top">Tarinat</a><br /> <a href="index.php?sivu=4" target="_top">Kirjat</a><br /> <a href="index.php?sivu=5" target="_top">Musiikki</a><br /> </div>
Seuraavalla rakenteella voimme valita käyttäjälle näytettävän sisällön:
if (!empty($_GET["sivu"])) {
$sivu = intval($_GET["sivu"]);
} else {
$sivu = 0;
}
if ($sivu == 1) {
...sisältö yksi....
} elseif ($sivu == 2) {
...sisältö kaksi...
} ...
.
.
} else {
Index-sivu...
}
Alimpana oleva else-haara on sitä varten, että jos yritetän saavuttaa sivua, jota ei ole (vaikkapa index.php?sivu=2343), niin käyttäjälle näytetän Index-sivu "automaattisesti". Ensimmäinen if tarkistaa onko sivulle tultu linkin index.php?sivu=jotain kautta, ja jos ei, niin näytetän Index-sivu (menemällä tuohon viimeiseen else-haaraan), muutoin näytetän $sivu:n mukainen sivu.
Lopuksi kokoamme kaiken yhteen tiedostoon:
<html>
<head>
<title>veer is tö manki</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" href="apina.css" type="text/css" />
</head>
<body>
<div id="valikko">
<a href="index.php" target="_top">Index</a><br />
<a href="index.php?sivu=1" target="_top">Apina</a><br />
<a href="index.php?sivu=2" target="_top">Arkisto</a><br />
<a href="index.php?sivu=3" target="_top">Tarinat</a><br />
<a href="index.php?sivu=4" target="_top">Kirjat</a><br />
<a href="index.php?sivu=5" target="_top">Musiikki</a><br />
</div>
<div id="sisin">
<!-- SISÄLTÖ ALKAA -->
<?php
if (!empty($_GET["sivu"])) {
$sivu = intval($_GET["sivu"]);
} else {
$sivu = 0;
}
if ($sivu == 1) { ?>
<div class="otsikkoteksti">Apina</div>
<p>Muinaisten viikinkien lyhytkarvakissojen ja ristiretkeläisten
mukana Norjaan kulkeutuneiden pitkäkarvakissojen arvellaan olevan alkuna
norjalaiselle metsäkissarodulle. Norjalainen metsäkissa on kehittynyt
luonnollisen valinnan seurauksena Norjan ankarassa ilmastossa, jossa vain
terveimmät ja voimakkaimmat yksilöt ovat selviytyneet jatkamaan sukua.</p>
<?php } elseif ($sivu == 2) { ?>
<div class="otsikkoteksti">Arkisto</div>
<p>Arkistotädin likaiset päiväunet.</p>
<?php } elseif ($sivu == 3) { ?>
<div class="otsikkoteksti">Tarinat</div>
<p>Jotakin kummaa.</p>
<?php } elseif ($sivu == 4) { ?>
<div class="otsikkoteksti">Kirjat</div>
<p>Jotakin kummaa.</p>
<?php } elseif ($sivu == 5) { ?>
<div class="otsikkoteksti">Musiikki</div>
<p>Jotakin kummaa.</p>
<?php } else { ?>
<div class="otsikkoteksti">Index</div>
<p>Tere tulemast.</p>
<?php } ?>
<!-- SISÄLTÖ LOPPUU -->
</div>
</body>
</html>
Muista tallentaa tiedosto nimellä index.php.
Tämän oppaan ensimmäisen osan ideat voi myös pienellä vaivalla yhdistää tässä osassa kuvattuihin. Vaikkapa seuraavanlainen index.php saattaisi miellyttää rakentelijaa:
<?php
// Otetaan sivu talteen.
if (!empty($_GET['sivu'])) {
$sivu = preg_replace("/([^a-zA-Z0-9])/", "", $_GET['sivu']);
} else {
header("Location: http://domain.tld/?sivu=Etusivu");
exit();
}
require_once("alku.php"); // Sivun alkuosa (katso oppaan ensimmäinen osa).
// Valitaan näytettävä sivu.
if ($sivu == 'Etusivu') {
require_once("etusivu.php");
}
elseif ($sivu == 'Minusta') {
require_once("minusta.php");
}
elseif ($sivu == 'Heeh') {
require_once("heeh.php");
}
// $sivu:n arvona olikin jotakin muuta kuin validi sivun nimi.
else {
header("Location: http://domain.tld/?sivu=Etusivu");
exit();
}
require_once("loppu.php"); // Sivun loppuosa (katso oppaan ensimmäinen osa).
?>
Tämän oppaan on kirjoittanut Havusiipi. Saatavilla myös pdf-versiona.
Katso myös oppaan ensimmäinen osa.