U bevindt zich hier: Forum » Tutorials » [PHP] Include systeem voor menu's
   Actief Topic: [PHP] Include systeem voor menu's

Vorige ( 1 ) Volgende

vlerknozem
Admin
avatar
# Gepost op 05-08-2009 00:31


In deze tutorial ga ik uitleggen hoe je gemakkelijk een systeem kan maken zodat je steeds slechts een keer een link hoeft aan te passen als je bijvoorbeeld een pagina naam wilt aanpassen.

Indeling:
1) Basis uitleg van de include functie
2) Maar hoe koppel ik dit nu aan mijn menu?
3) Hoe maak ik het enigzins veilig
4) De include pagina's beveiligen
5) De boel SEO vriendelijk maken.

1) Basis uitleg van de include functie
De include functie is simpel. Hiermee koppel je bij wijze van spreken twee losse pagina's in een.
Hier een klein voorbeeld:
Plain | Plain new window | PHP code:
  1. <?php
  2. // Parent.php
  3. echo "Ik ben een pagina.";
  4. include("Child.php");
  5. ?>


Plain | Plain new window | PHP code:
  1. <?php
  2. // Child.php
  3. echo "Ik ben een kind van Parent.php";
  4. ?>


Wanneer je "Parent.php" opent, is de output "Ik ben een pagina.Ik ben een kind van Parent.php". Open je Child.php handmatig, dan zie je uiteraard alleen "Ik ben een kind van Parent.php". Hoe je kan controleren of Child.php wel ECHT een child is van Parent.php, zal ik later uitleggen.

2) Maar hoe koppel ik dit nu aan mijn menu?
Als eerste, wat is je menu? Hoe komen je links eruit te zien? Het menu maak ik nu met simpele links. Maak eerst maar een pagina aan genaamd "index.php". De code komt er nu zo uit te zien:
Plain | Plain new window | HTML code:
  1.     <title>Tutorial - Een include systeem voor menu's</title>
  2. </head>
  3.     <a href="index.php">Home</a> -
  4.     <a href="index.php?pagina=test">Test</a>
  5. </body>
  6. </html>


Zoals je ziet staat er in de tweede link "?pagina=test". Dit is een 'query'. De '?' geeft het begin aan van de query string, 'pagina' is de key, 'test' is de value. Het '=' teken spreekt voor zich. Om meerdere querys te gebruiken moet je de querys scheiden met een '&' teken. '?pagina=test&aap=noot'. Let op! In de HTML moet een '&'-teken als '&' worden geschreven.

Nu gaan we de php code maken. Om de querys op de vragen maken wij gebruik van superglobals. $_GET en $_POST zijn hier voorbeelden van. $_GET gaan wij nu gebruiken. Een simpel voorbeeld:
Plain | Plain new window | PHP code:
  1. <?php
  2. echo $_GET['pagina'];
  3. ?>

In dit voorbeeld wordt wanneer je op de link 'Test' klikt, de tekst 'test' weergeven. Maak nu maar eens een 'test.php' aan, en zet er iets leuks in, bijvoorbeeld wat leuke foto's van je vriendin :P. We gaan nu 'index.php' aanpassen:

Plain | Plain new window | PHP code:
  1. <html>
  2. <head>
  3.     <title>Tutorial - Een include systeem voor menu's</title>
  4. </head>
  5. <body>
  6.     <a href="index.php">Home</a> -
  7.     <a href="index.php?pagina=test">Test</a>
  8.     <div id="content">
  9.         <?php
  10.         include($_GET['pagina'].".php");
  11.         ?>
  12.     </div>
  13. </body>
  14. </html>


Simpel toch? Ja, maar we zijn er nog niet. Wat nu als men een link kiest van '?pagina=index.php'. Dan krijg je een lus, wat we niet willen. We moeten het dus veiliger maken. Dit doen we in de volgende stap.

3) Hoe maak ik het enigzins veilig
Om te beginnen willen we het zorgen dat men niet alle pagina's kan includen via de url. Daarnaast willen we niet dat men bestanden uit andere mappen kan includen.
In deze stap ga ik ook meteen uitleggen hoe je kan controleren of een pagina bestaat.
Laten we maar beginnen. Maak een map aan genaamd 'inc' (mag ook een andere naam zijn, maar daarmee moet je dan rekening houden in het script). Verplaats je 'test.php' maar naar die map.

We gaan nu gebruik maken van twee functies. basename() gaan we gebruiken om de pagina naam op te vragen. basename('../../pagina.php'); wordt gewoon 'pagina.php'. En we gaan controleren met 'file_exists('pagina.php')' of het bestand wel bestaat. Een simpele code:
Plain | Plain new window | PHP code:
  1. <?php
  2. $map = "inc/"; // De map waar de includes inkomen, (moet een slash achter).
  3. $pagina = $map.basename($_GET['pagina']).".php"; // De totale map en bestandnaam bepalen
  4. if(file_exists($pagina)) {
  5.      include($pagina);
  6. } else {
  7.      echo "Bestand bestaat niet.";
  8. }
  9. ?>


We gaan nu:
- de controle bovenaan doen (ivm de laatste stap)
- zorgen dat wanneer er niks is opgegeven, dat de homepagina weergeven.
- zorgen dat wanneer de pagina niet bestaat, dat een mooie 404 pagina wordt weergeven.

Maak nu twee pagina's aan. 'error404.php', en 'home.php'. Zet er wat leuks in, maakt niet zo uit wat. Zet deze ook in de map 'inc'.

De code
Plain | Plain new window | PHP code:
  1. <?php
  2. // Index.php
  3. $map = "inc/"; // De map waar de includes inkomen, (moet een slash achter).
  4. $pagina404 = $map."error404.php"; // de 404 pagina
  5. $paginahome = $map."home.php"; // De home pagina
  6.  
  7. // staat ?pagina=iets in de url?
  8. if(isset($_GET['pagina'])) {
  9.    $pagina = $map.basename($_GET['pagina']).".php"; // De totale map en bestandnaam bepalen
  10.    if(!file_exists($pagina)) {
  11.        $pagina = $pagina404;
  12.    }
  13. }  else {
  14.    $pagina = $paginahome;
  15. }
  16. ?>
  17. <html>
  18. <head>
  19.     <title>Tutorial - Een include systeem voor menu's</title>
  20. </head>
  21. <body>
  22.     <a href="index.php">Home</a> -
  23.     <a href="index.php?pagina=test">Test</a>
  24.     <div id="content">
  25.         <?php
  26.         include($pagina);
  27.         ?>
  28.     </div>
  29. </body>
  30. </html>

Nu heb je als het goed is, een goed werkend systeem.

4) De include pagina's beveiligen
Bij grotere systemen kan een include pagina soms niet zonder parent pagina. Bijvoorbeeld vanwege een database connectie. Zo controlleer je dat:
Plain | Plain new window | PHP code:
  1. <?php
  2. // test.php
  3.  
  4. if(basename($_SERVER['REQUEST_URI']) != 'test.php') {
  5.     die("Foei!"); // Weg halen als je een header redirect wilt gebruiken
  6.     header("Location: ../test.html");  // Als je een header redirect wilt gebruiken, verander dit eventueel. nu verwijst het naar de zelfde pagina,
  7.     // maar dan via die is toegestaan
  8. }
  9. ?>
  10. Hier de rest van je pagina.


5) De boel SEO vriendelijk maken.
We gaan nu;
- Zorgen dat je geen ?pagina=iets ziet, maar /iets.html.
- Zorgen voor een gepaste titel die per pagina veranderd wordt
- De links aanpassen.

Oke. Eerst maar eens de titel. Ze helemaal onderaan de php code de volgende code:
Plain | Plain new window | PHP code:
  1.  
  2. $paginanaam = str_replace('.php', '', basename($pagina));
  3. $title = "Tutorial - ". ucfirst($paginanaam);
  4. // ucfirst is een functie om van de eerste letter een hoofdletter te maken, de rest klein letters.
  5.  


De titel wordt dan:
Plain | Plain new window | PHP code:
  1. <title><?php echo $title; ?></title>

Let op! Voor mooie titels, is het handig om passende pagina namen te maken!

Nu passen we de urls aan:
Plain | Plain new window | HTML code:
  1. <a title="Home pagina" href="home.html">Home</a> -
  2. <a title="Test pagina" href="test.html">Test</a>


En om het werkend te maken. Maak een bestand genaam '.htaccess'. Deze komt in dezelfde map als 'index.php'. Hierin komt het volgende:
  1. RewriteEngine on
  2. RewriteRule ^([a-zA-Z0-9\-_]+)\.html$   index.php?pagina=$1 [L]

Pagina's mogen nu alle gewone letters (a tot z en A tot Z) , getallen, en '-', '_'- tekens bevatten.

Een opmerking over htaccess! Waarschijnlijk kloppen je stylesheets, images etc niet meer. Gebruik daarvoor een volledige link zoals "http://www.site.nl/css/style.css". Hoewel, ik heb het nu even getest bij mij, en het lijkt goed te werken.

Nog even de totale pagina voor de copy/pasters:
Plain | Plain new window | PHP code:
  1. <?php
  2. // Index.php
  3. $map = "inc/"; // De map waar de includes inkomen, (moet een slash achter).
  4. $pagina404 = $map."error404.php"; // de 404 pagina
  5. $paginahome = $map."home.php"; // De home pagina
  6.  
  7. // staat ?pagina=iets in de url?
  8. if(isset($_GET['pagina'])) {
  9.    $pagina = $map.basename($_GET['pagina']).".php"; // De totale map en bestandnaam bepalen
  10.    if(!file_exists($pagina)) {
  11.        $pagina = $pagina404;
  12.    }
  13. }  else {
  14.    $pagina = $paginahome;
  15. }
  16. $paginanaam = str_replace('.php', '', basename($pagina));
  17. $title = "Tutorial - ". ucfirst($paginanaam);
  18. // ucfirst is een functie om van de eerste letter een hoofdletter te maken, de rest klein letters.
  19. ?>
  20. <html>
  21. <head>
  22.     <title><?php echo $title; ?></title>
  23. </head>
  24. <body>
  25.     <a title="Home pagina" href="home.html">Home</a> -
  26.     <a title="Test pagina" href="test.html">Test</a>
  27.     <div id="content">
  28.         <?php
  29.         include($pagina);
  30.         ?>
  31.     </div>
  32. </body>
  33. </html>



Tot slot
Ik hoop dat het duidelijk is voor de beginners. Anders kunnen er altijd nog vragen worden gesteld.
Je kan een voorbeeld zien op:
http://vidiqatch.org/koenux/tutorial/menu-met-pagina-include/

Lees de forum regels

Vorige ( 1 ) Volgende

U moet aangemeld zijn om een reactie te kunnen plaatsen.

Indien u nog geen account heeft kunt u zich hier registreren.



© copyright 2009/2010 WebProjects 1.02 - Template van Sebastaan Franken