content loader, goed of fout?
Ik heb een vraag over het inladen van content D.M.V PHP.
Laatst heb ik een content loader geschreven, maar weet niet of dit de juiste aanpak/manier is. Het werkt wel prima maar vergt ook veel onderhoud, omdat je steeds een pagina aan het script moet toevoegen als je een nieuwe pagina aanmaakt.
dit is de code die ik heb gemaakt:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php
$navigatie = "";
if (isset($_GET["content"])) {
if ( $_GET["content"] == "home")
{
$navigatie = "home.php";
}
elseif ( $_GET["content"] == "nieuws")
{
$navigatie = "nieuws.php";
}
elseif ( $_GET["content"] == "nieuws_create_item")
{
$navigatie = "nieuws_create_item.php";
}
elseif ( $_GET["content"] == "nieuws_details")
{
$navigatie = "nieuws_details.php";
}
elseif ( $_GET["content"] == "nieuws_delete")
{
$navigatie = "nieuws_delete.php";
}
elseif ( $_GET["content"] == "logout")
{
$navigatie = "logout.php";
}
else
{
$navigatie="home.php";
}
}
else {
$navigatie="home.php";
}
?>
$navigatie = "";
if (isset($_GET["content"])) {
if ( $_GET["content"] == "home")
{
$navigatie = "home.php";
}
elseif ( $_GET["content"] == "nieuws")
{
$navigatie = "nieuws.php";
}
elseif ( $_GET["content"] == "nieuws_create_item")
{
$navigatie = "nieuws_create_item.php";
}
elseif ( $_GET["content"] == "nieuws_details")
{
$navigatie = "nieuws_details.php";
}
elseif ( $_GET["content"] == "nieuws_delete")
{
$navigatie = "nieuws_delete.php";
}
elseif ( $_GET["content"] == "logout")
{
$navigatie = "logout.php";
}
else
{
$navigatie="home.php";
}
}
else {
$navigatie="home.php";
}
?>
Ik include dit script op de index, en roep $navigatie aan in de content div.
mijn vraag is dus: Is dit de juiste manier om het aan te pakken? zo nee hoe kan ik het beter doen? Ook zou ik het graag OOP willen maken (ik ben op dit gebied best nieuw), maar weet niet echt hoe ik dat het beste aan kan pakken.
In ieder geval, hartstikke bedankt alvast.
Gewijzigd op 01/08/2012 00:18:01 door Henk de Vries
switch kunnen gebruiken. Het werkt precies hetzelfde maar is een stuk korter.
Deze aanpak is prima. Om het nog korter te maken zou je de alternatieve manier Deze voorbeeld is gemaakt door Wouter J van het forum:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
// werken met constants is altijd handig
define('ROOT', dirname(__FILE__).DIRECTORY_SEPARATOR);
// haal alle pagina's op uit %root%/pages/
// die eindigen met .php
$pages = glob(ROOT.'pages'.DIRECTORY_SEPARATOR.'*.php');
if (!isset($_GET['p'])) {
$_GET['p'] = 'home';
}
// haal het path weg (bijv. C:/path/to/some/pages/foo.php => foo.php)
$pages = array_map('basename', $pages);
// addslashes functie is niet nodig, omdat je NOOIT
// andere tekens als letters of cijfers mag gebruiken
// in een url
if (in_array($_GET['p'].'.php', $pages)) {
// include het bestand
require ROOT.'pages'.DIRECTORY_SEPARATOR.$_GET['p'].'.php';
} else {
// include de 404 error pagina
require ROOT.'error'.DIRECTORY_SEPARATOR.'404.php';
}
?>
// werken met constants is altijd handig
define('ROOT', dirname(__FILE__).DIRECTORY_SEPARATOR);
// haal alle pagina's op uit %root%/pages/
// die eindigen met .php
$pages = glob(ROOT.'pages'.DIRECTORY_SEPARATOR.'*.php');
if (!isset($_GET['p'])) {
$_GET['p'] = 'home';
}
// haal het path weg (bijv. C:/path/to/some/pages/foo.php => foo.php)
$pages = array_map('basename', $pages);
// addslashes functie is niet nodig, omdat je NOOIT
// andere tekens als letters of cijfers mag gebruiken
// in een url
if (in_array($_GET['p'].'.php', $pages)) {
// include het bestand
require ROOT.'pages'.DIRECTORY_SEPARATOR.$_GET['p'].'.php';
} else {
// include de 404 error pagina
require ROOT.'error'.DIRECTORY_SEPARATOR.'404.php';
}
?>
maar mijn volgende vraag is: hoe kan ik dat script (bijv die van Wouter J) het beste implementeren, zodat het OOP is? kan ik het gewoon in een klasse zetten onder een functie, en deze inladen? of is dat niet nodig.
bedankt alvast