Nieuwe BellewaerdeFun bijna online. Of toch niet?
ik heb enkele jaren terug een website ontwikkeld waarin ik m'n interesse aan Bellewaerde Park naar buiten probeer te brengen: www.bellewaerdefun.be
Apetrots was ik toen ik dit ontwerp aan de buitenwereld kon tonen, maar een goede twee jaar later vond ik er helemaal niets meer aan. Ondertussen ben ik volop bezig met de ontwikkeling van een nieuwe versie. Van het ontwerp ben ik best wel tevreden: beta.bellewaerdefun.be.
Zoals jullie kunnen zien heb ik al heel wat pagina's voor deze website gemaakt. Ik zit echter nog met een knagend gevoel over mijn manier van werken tot nu toe, en dat is meteen de reden waarom ik jullie hulp in probeer te roepen.
Ik probeer het zo goed mogelijk voor jullie uit te leggen!
1) Hoe de opbouw van de meeste menu pagina's van de beta website in elkaar zit
Ik heb alle pagina's die je in het menu te zien krijgt, in een kleine (tot nu toe nutteloze) tabel gestopt:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
--------------------------------------------------------------------------------------------------
-----id----title--------parent--------weight-----active-----link-----keywords-----description-----
--------------------------------------------------------------------------------------------------
-----1-----Home---------0-------------1----------1------------------------------------------------
-----2-----Nieuws-------0-------------2----------1------------------------------------------------
-----3-----Het park-----0-------------3----------1------------------------------------------------
-----4-----Info---------0-------------4----------1------------------------------------------------
-----5-----Media--------0-------------5----------1------------------------------------------------
-----6-----Forum--------0-------------6----------1------------------------------------------------
-----7-----Links--------0-------------7----------1------------------------------------------------
-----8-----About us-----0-------------8----------1------------------------------------------------
-----9-----Contact------0-------------9----------1------------------------------------------------
--------------------------------------------------------------------------------------------------
-----id----title--------parent--------weight-----active-----link-----keywords-----description-----
--------------------------------------------------------------------------------------------------
-----1-----Home---------0-------------1----------1------------------------------------------------
-----2-----Nieuws-------0-------------2----------1------------------------------------------------
-----3-----Het park-----0-------------3----------1------------------------------------------------
-----4-----Info---------0-------------4----------1------------------------------------------------
-----5-----Media--------0-------------5----------1------------------------------------------------
-----6-----Forum--------0-------------6----------1------------------------------------------------
-----7-----Links--------0-------------7----------1------------------------------------------------
-----8-----About us-----0-------------8----------1------------------------------------------------
-----9-----Contact------0-------------9----------1------------------------------------------------
--------------------------------------------------------------------------------------------------
Bovenstaande pagina's worden via mysqli en php opgeroepen zodat ik m'n menu bovenaan de website krijg:
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
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
<?php
$menu = new mysqli(MYSQL_SERVER,MYSQL_USER,MYSQL_PASS,MYSQL_DB);
$sql = "SELECT id, title, parent, weight, active, link, keywords, description FROM pages WHERE active = 1 ORDER BY weight ASC";
if(!$result = $menu->query($sql)){
trigger_error('Fout in query:' . $menu->error);
}else{
$i = 1;
while($row = $result->fetch_assoc()){
// Spaties in de URL vervangen door koppeltekens
$title = str_replace(' ', '-', $row['title']);
// URL omzetten naar kleine letters
$title = strtolower($title);
// Pagina actief?
if(strstr($page, $title)){
echo '<li class="active"><a href="/' . $title . '" title="' . $row['title'] . '">' . $row['title'] . '</a></li>' . "\n";
}else{
if($title == 'forum'){
echo '<li><a class="forumPopup" href="http://www.bellewaerdefun.be/forum" title="">' . $row['title'] . '</a></li>' . "\n";
}else{
echo '<li><a href="/' . $title . '" title="' . $row['title'] . '">' . $row['title'] . '</a></li>' . "\n";
}
}
$i++;
}
}
$menu->close();
?>
$menu = new mysqli(MYSQL_SERVER,MYSQL_USER,MYSQL_PASS,MYSQL_DB);
$sql = "SELECT id, title, parent, weight, active, link, keywords, description FROM pages WHERE active = 1 ORDER BY weight ASC";
if(!$result = $menu->query($sql)){
trigger_error('Fout in query:' . $menu->error);
}else{
$i = 1;
while($row = $result->fetch_assoc()){
// Spaties in de URL vervangen door koppeltekens
$title = str_replace(' ', '-', $row['title']);
// URL omzetten naar kleine letters
$title = strtolower($title);
// Pagina actief?
if(strstr($page, $title)){
echo '<li class="active"><a href="/' . $title . '" title="' . $row['title'] . '">' . $row['title'] . '</a></li>' . "\n";
}else{
if($title == 'forum'){
echo '<li><a class="forumPopup" href="http://www.bellewaerdefun.be/forum" title="">' . $row['title'] . '</a></li>' . "\n";
}else{
echo '<li><a href="/' . $title . '" title="' . $row['title'] . '">' . $row['title'] . '</a></li>' . "\n";
}
}
$i++;
}
}
$menu->close();
?>
De waardes voor de kolom "link", "keywords" en "description" zijn momenteel leeg, in het derde onderdeel probeer ik dit verder uit te leggen.
Mijn FTP/bestandenstructuur ziet er als volgt uit:
css
-----> bellewaerdefun.css
-----> content.css
-----> ...
images
-----> ...
includes
-----> config.inc.php
-----> foot.inc.php
-----> head.inc.php
-----> highlights.inc.php
-----> right.inc.php
js
-----> bellewaerdefun.js
-----> jquery-1.5.1.min.js
-----> ...
libs
-----> class.phpmailer.php
-----> class.weather.php
-----> class.xmlParser.php
.htaccess
about-us.php ------> (/about-us)
attracties.php ----> (/het-park/attracties)
contact.php -------> (/contact)
diensten.php ------> (/diensten)
dieren.php --------> (/het-park/dieren)
disclaimer.php ----> (/disclaimer)
diensten.php ------> (/info/diensten)
evenementen.php ---> (/het-park/evenementen)
geschiedenis.php --> (/het-park/geschiedenis)
het-park.php ------> (/het-park)
index.php ---------> (/ of /home)
info.php ----------> (/info)
kalender.php ------> (/info/kalender)
ligging.php -------> (/info/ligging)
links.php ---------> (/links)
media.php ---------> (/media)
nieuws.php --------> (/nieuws)
parkplan.php ------> (/info/parkplan)
shows.php ---------> (/het-park/shows)
tarieven.php ------> (/info/tarieven)
De file index.php en alle andere pagina's in de root map worden via eenzelfde stramien opgebouwd: include eerst head.inc.php, plaats daarna de content en include vervolgens right.inc.php en foot.inc.php. In de file head.inc.php wordt overigens de config file geïncluded (config.inc). Dit bestand bevat onder andere de databasegegevens, de __autoload functie en een tweetal andere functies.
Het .htaccess bestand ziet er als volgt uit:
Quote:
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule ^home$ index.php
RewriteRule ^forum$ forum/index.php
RewriteRule ^([^/\.]+)$ $1.php
RewriteRule ^nieuws/([^/\.]+)/([0-9]+)/([0-9]+)/([^/\.]+)$ nieuws.php?y=$1&m=$2&d=$3
RewriteRule ^het-park/attracties/([^/\.]+)$ attracties.php?attractie=$1
RewriteRule ^het-park/dieren/([^/\.]+)$ dieren.php?dier=$1
RewriteRule ^het-park/geschiedenis$ geschiedenis.php
RewriteRule ^het-park/shows$ shows.php
RewriteRule ^info/ligging$ ligging.php
RewriteRule ^info/parkplan$ parkplan.php
RewriteRule ^info/tarieven$ tarieven.php
RewriteRule ^info/diensten$ diensten.php
RewriteEngine On
RewriteBase /
RewriteRule ^home$ index.php
RewriteRule ^forum$ forum/index.php
RewriteRule ^([^/\.]+)$ $1.php
RewriteRule ^nieuws/([^/\.]+)/([0-9]+)/([0-9]+)/([^/\.]+)$ nieuws.php?y=$1&m=$2&d=$3
RewriteRule ^het-park/attracties/([^/\.]+)$ attracties.php?attractie=$1
RewriteRule ^het-park/dieren/([^/\.]+)$ dieren.php?dier=$1
RewriteRule ^het-park/geschiedenis$ geschiedenis.php
RewriteRule ^het-park/shows$ shows.php
RewriteRule ^info/ligging$ ligging.php
RewriteRule ^info/parkplan$ parkplan.php
RewriteRule ^info/tarieven$ tarieven.php
RewriteRule ^info/diensten$ diensten.php
2) Hoe de opbouw van de "item pagina's" van de beta website in elkaar zit
Met item pagina's bedoel ik: pagina's die uitgebreide informatie geven nadat je op een "lees meer" geklikt hebt in een overzichtspagina. In mijn voorbeeld zijn dat bijvoorbeeld de pagina's "attracties.php" en "dieren.php". Ik check bovenaan de pagina of er op de "lees meer" knop geklikt werd. Indien "ja", dan toon ik de info over de betreffende keuze. Indien "nee", dan toon ik een overzichtslijst. Hier zijn de tabellen die betrekking hebben tot de attracties:
Tabel "attractions"
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
------------------------------------------------------------------------
-----id----name------------intro--------extra-----active-----detail-----
------------------------------------------------------------------------
-----1-----Boomerang------------------------------1----------1----------
-----2-----Los Piratas----------------------------1----------1----------
-----3-----4D cinema------------------------------1----------1----------
-----4-----El Toro--------------------------------1----------1----------
-----5-----El Volador-----------------------------1----------1----------
-----...---...------------------------------------...--------...--------
------------------------------------------------------------------------
-----id----name------------intro--------extra-----active-----detail-----
------------------------------------------------------------------------
-----1-----Boomerang------------------------------1----------1----------
-----2-----Los Piratas----------------------------1----------1----------
-----3-----4D cinema------------------------------1----------1----------
-----4-----El Toro--------------------------------1----------1----------
-----5-----El Volador-----------------------------1----------1----------
-----...---...------------------------------------...--------...--------
------------------------------------------------------------------------
Tabel "attraction-property-types"
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
-------------------------------
-----id----type----------------
-------------------------------
-----1-----Type----------------
-----2-----Subtype-------------
-----3-----Constructeur--------
-----4-----Decorateur----------
-----5-----Constructiejaar-----
-----...---...-----------------
-------------------------------
-----id----type----------------
-------------------------------
-----1-----Type----------------
-----2-----Subtype-------------
-----3-----Constructeur--------
-----4-----Decorateur----------
-----5-----Constructiejaar-----
-----...---...-----------------
-------------------------------
Tabel "attraction-properties"
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
----------------------------------------------------------------------
-----id----attraction_id-----property_id-----value--------------------
----------------------------------------------------------------------
-----1-----1-----------------1---------------Rollercoaster------------
-----2-----1-----------------2---------------boomerang----------------
-----3-----1-----------------3---------------Vekoma-------------------
-----4-----1-----------------5---------------1984---------------------
-----5-----1-----------------9---------------760 personen per uur-----
-----...---...---------------...-------------...----------------------
----------------------------------------------------------------------
-----id----attraction_id-----property_id-----value--------------------
----------------------------------------------------------------------
-----1-----1-----------------1---------------Rollercoaster------------
-----2-----1-----------------2---------------boomerang----------------
-----3-----1-----------------3---------------Vekoma-------------------
-----4-----1-----------------5---------------1984---------------------
-----5-----1-----------------9---------------760 personen per uur-----
-----...---...---------------...-------------...----------------------
----------------------------------------------------------------------
En hier is de code van de pagina om de attracties te tonen:
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<?php
if(isset($_GET['attractie'])){
$id = $_GET['attractie'];
$attraction = new mysqli(MYSQL_SERVER,MYSQL_USER,MYSQL_PASS,MYSQL_DB);
if(mysqli_connect_errno()){
trigger_error('Fout bij verbinding: ' . $attraction->error);
}
$sql = "SELECT attractions.name,
attractions.intro,
attractions.extra
FROM attractions
WHERE attractions.id = '" . $id . "
'";
if(!$result = $attraction->query($sql)){
trigger_error('Fout in query: ' . $attraction->error);
}else{
$row = $result->fetch_assoc();
$attractieKort = urlNotatie($row['name']);
echo '<h2>' . $row['name'] . '</h2>';
echo '<p>' . $row['intro'] . '</p>';
$dir = 0;
$files = 0;
$dirname = 'images/attracties/thumbs/' . $attractieKort . '';
if($handle = opendir($dirname)){
while(false !== ($file = readdir($handle))){
if($file != '.' AND $file != '..'){
if(is_dir($dirname."/".$file))
$dir++;
else
$files++;
}
}
}
closedir($handle);
//echo $files." files, en ".$dir." mappen in: ".$dirname;
$teller = 0;
if($files > 0){
echo '<h3>Foto album</h3>';
echo '<p id="grotere-fotos">Klik op de foto\'s voor een groter formaat</p>';
echo '<ul class="foto-album overflow">';
for($teller = 1; $teller <= $files; $teller++){
echo '<li><a rel="' . $attractieKort . '" href="/images/attracties/photos/' . $attractieKort . '/' . $teller . '.jpg" title="' . $row['name'] . ' Bellewaerde Park"><img class="foto_attractie" src="/images/attracties/thumbs/' . $attractieKort . '/' . $teller . '.jpg" alt="' . $row['name'] . ' Bellewaerde Park" title="' . $row['name'] . ' Bellewaerde Park" /></a></li>';
}
echo '</ul>';
}
echo '<h3>Technische fiche</h3>';
?>
if(isset($_GET['attractie'])){
$id = $_GET['attractie'];
$attraction = new mysqli(MYSQL_SERVER,MYSQL_USER,MYSQL_PASS,MYSQL_DB);
if(mysqli_connect_errno()){
trigger_error('Fout bij verbinding: ' . $attraction->error);
}
$sql = "SELECT attractions.name,
attractions.intro,
attractions.extra
FROM attractions
WHERE attractions.id = '" . $id . "
'";
if(!$result = $attraction->query($sql)){
trigger_error('Fout in query: ' . $attraction->error);
}else{
$row = $result->fetch_assoc();
$attractieKort = urlNotatie($row['name']);
echo '<h2>' . $row['name'] . '</h2>';
echo '<p>' . $row['intro'] . '</p>';
$dir = 0;
$files = 0;
$dirname = 'images/attracties/thumbs/' . $attractieKort . '';
if($handle = opendir($dirname)){
while(false !== ($file = readdir($handle))){
if($file != '.' AND $file != '..'){
if(is_dir($dirname."/".$file))
$dir++;
else
$files++;
}
}
}
closedir($handle);
//echo $files." files, en ".$dir." mappen in: ".$dirname;
$teller = 0;
if($files > 0){
echo '<h3>Foto album</h3>';
echo '<p id="grotere-fotos">Klik op de foto\'s voor een groter formaat</p>';
echo '<ul class="foto-album overflow">';
for($teller = 1; $teller <= $files; $teller++){
echo '<li><a rel="' . $attractieKort . '" href="/images/attracties/photos/' . $attractieKort . '/' . $teller . '.jpg" title="' . $row['name'] . ' Bellewaerde Park"><img class="foto_attractie" src="/images/attracties/thumbs/' . $attractieKort . '/' . $teller . '.jpg" alt="' . $row['name'] . ' Bellewaerde Park" title="' . $row['name'] . ' Bellewaerde Park" /></a></li>';
}
echo '</ul>';
}
echo '<h3>Technische fiche</h3>';
?>
<ul class="technische-fiche">
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
$sql = "SELECT attraction_properties.property_id,
attraction_property_types.type,
attraction_properties.value
FROM attractions
LEFT JOIN attraction_properties ON attractions.id = attraction_properties.attraction_id
LEFT JOIN attraction_property_types ON attraction_properties.property_id = attraction_property_types.id
WHERE attractions.id = '" . $id . "'
ORDER BY attraction_properties.property_id
";
if(!$result = $attraction->query($sql)){
trigger_error('Fout in query: ' . $attraction->error);
}else{
$teller = 0;
while($kenmerk = $result->fetch_assoc()){
echo '<li><dfn>' . $kenmerk['type'] . '</dfn><span>' . $kenmerk['value'] . '</span></li>';
}
}
?>
$sql = "SELECT attraction_properties.property_id,
attraction_property_types.type,
attraction_properties.value
FROM attractions
LEFT JOIN attraction_properties ON attractions.id = attraction_properties.attraction_id
LEFT JOIN attraction_property_types ON attraction_properties.property_id = attraction_property_types.id
WHERE attractions.id = '" . $id . "'
ORDER BY attraction_properties.property_id
";
if(!$result = $attraction->query($sql)){
trigger_error('Fout in query: ' . $attraction->error);
}else{
$teller = 0;
while($kenmerk = $result->fetch_assoc()){
echo '<li><dfn>' . $kenmerk['type'] . '</dfn><span>' . $kenmerk['value'] . '</span></li>';
}
}
?>
</ul>
Code (php)
<p><a class="vorige" href="/het-park/attracties#" title="Attracties Bellewaerde Park">Ga naar het attractie overzicht</a></p>
<h2>Attracties Bellewaerde Park</h2>
<div class="overflow">
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?php
$attracties = new mysqli(MYSQL_SERVER,MYSQL_USER,MYSQL_PASS,MYSQL_DB);
if(mysqli_connect_errno()){
trigger_error('Fout bij verbinding: ' . $attracties->error);
}
$sql = "SELECT attractions.id,
attractions.name,
attractions.intro,
attractions.active,
attractions.detail
FROM attractions
ORDER BY attractions.id
ASC
";
if(!$result = $attracties->query($sql)){
trigger_error('Fout in query: ' . $attracties->error);
}else{
$teller = 0;
while($row = $result->fetch_assoc()){
$attractie = urlNotatie($row['name']);
if($teller % 2 == 0){
echo '<div class="park-item"><a name="' . $attractie . '"></a>' . "\n";
}else{
echo '<div class="park-item last"><a name="' . $attractie . '"></a>' . "\n";
}
if($row['active'] != 1){
echo '<a href="/het-park/attracties/' . $attractie . '" title="' . $row['name'] . ' Bellewaerde Park"><img class="demolished" src="/images/demolished.png" alt="' . $row['name'] . ' Bellewaerde Park" title="' . $row['name'] . ' Bellewaerde Park" /></a>' . "\n";
}
if($row['detail'] == 1){
echo '<a href="/het-park/attracties/' . $attractie . '" title="' . $row['name'] . ' Bellewaerde Park"><img src="/images/attracties/' . $attractie . '.png" alt="' . $row['name'] . ' Bellewaerde Park" title="' . $row['name'] . ' Bellewaerde Park" /></a>' . "\n";
}else{
echo '<img src="/images/attracties/' . $attractie . '.png" alt="' . $row['name'] . ' Bellewaerde Park" title="' . $row['name'] . ' Bellewaerde Park" />' . "\n";
}
echo '<h3>' . $row['name'] . '</h3>' . "\n";
echo '<p>' . $row['intro'] . '</p>' . "\n";
if($row['detail'] == 1){
echo '<p><a class="lees-meer" href="/het-park/attracties/' . $attractie . '" title="' . $row['name'] . ' Bellewaerde Park">Lees meer</a></p>' . "\n";
}
echo '</div>' . "\n";
$teller += 1;
}
}
$attracties->close();
?>
$attracties = new mysqli(MYSQL_SERVER,MYSQL_USER,MYSQL_PASS,MYSQL_DB);
if(mysqli_connect_errno()){
trigger_error('Fout bij verbinding: ' . $attracties->error);
}
$sql = "SELECT attractions.id,
attractions.name,
attractions.intro,
attractions.active,
attractions.detail
FROM attractions
ORDER BY attractions.id
ASC
";
if(!$result = $attracties->query($sql)){
trigger_error('Fout in query: ' . $attracties->error);
}else{
$teller = 0;
while($row = $result->fetch_assoc()){
$attractie = urlNotatie($row['name']);
if($teller % 2 == 0){
echo '<div class="park-item"><a name="' . $attractie . '"></a>' . "\n";
}else{
echo '<div class="park-item last"><a name="' . $attractie . '"></a>' . "\n";
}
if($row['active'] != 1){
echo '<a href="/het-park/attracties/' . $attractie . '" title="' . $row['name'] . ' Bellewaerde Park"><img class="demolished" src="/images/demolished.png" alt="' . $row['name'] . ' Bellewaerde Park" title="' . $row['name'] . ' Bellewaerde Park" /></a>' . "\n";
}
if($row['detail'] == 1){
echo '<a href="/het-park/attracties/' . $attractie . '" title="' . $row['name'] . ' Bellewaerde Park"><img src="/images/attracties/' . $attractie . '.png" alt="' . $row['name'] . ' Bellewaerde Park" title="' . $row['name'] . ' Bellewaerde Park" /></a>' . "\n";
}else{
echo '<img src="/images/attracties/' . $attractie . '.png" alt="' . $row['name'] . ' Bellewaerde Park" title="' . $row['name'] . ' Bellewaerde Park" />' . "\n";
}
echo '<h3>' . $row['name'] . '</h3>' . "\n";
echo '<p>' . $row['intro'] . '</p>' . "\n";
if($row['detail'] == 1){
echo '<p><a class="lees-meer" href="/het-park/attracties/' . $attractie . '" title="' . $row['name'] . ' Bellewaerde Park">Lees meer</a></p>' . "\n";
}
echo '</div>' . "\n";
$teller += 1;
}
}
$attracties->close();
?>
</div>
Alle andere pagina's met items (bijvoorbeeld de pagina "dieren") hebben een soortgelijke opbouw zoals de attracties. 3 tabellen waaruit de gegevens komen dus. Ik hoop dat ik jullie voldoende geïnformeerd heb over hoe deze website opgebouwd werd. Nu komt het moeilijkste punt er aan ;)
3) Wat ik anders en beter wil en wat ik wil bereiken
Zoals jullie in de php code hierboven kunnen zien, heb ik mijn php code gemixed in mijn HTML code. Hoewel ik ervan bewust ben dat dit niet goed is, leek ik niet meteen een andere keuze te hebben gezien mijn kennis niet verder reikt om dit op een andere manier te doen.
Wat ik nu écht wil bereiken is het volgende: ik had graag dat de title, meta keywords en meta description allemaal uit de database komen. Het principe voor de gewone pagina's lijkt eenvoudig: in head.inc.php een connectie leggen met de database, een sql runnen en de gegevens uit de tabel "menu" te halen. Voor de "item" pagina's ligt het echter anders. Deze zijn helemaal niet terug te vinden in de tabel "menu", maar wél in de tabel "attractions".
Ik had dus graag bij het laden van de pagina een array gekregen met alle pagina info er in: pagina naam, titel, keywords, description, ... Volgens mij is de beste oplossing om OOP te combineren met Smarty ofzo. Ik zocht ondertussen heel wat websites af om een goede manier van werken te vinden, maar nergens (echt nergens) wordt dit eens uitgebreid uitgelegd. Ik hoop dat ik dit via deze manier misschien wat uitgelegd kan worden!
Tips over de website juich ik met mijn volle 100% motivatie toe! Ik hoor dus graag kritische opmerkingen over mijn opbouw, want ik wil het écht gaan verbeteren. Ik wil jullie alvast bedanken voor het lezen van deze super lange post en voor jullie eventuele reacties, écht waar!
Gewijzigd op 16/06/2011 08:44:25 door Sam Clauw
Hierdoor heb je maar één rewriterule nodig in je htaccess bestand en gebruik je php om de url's te parsen.
Een voorbeeld:
.htaccess:
Code (php)
1
2
3
4
2
3
4
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* /index.php?%{QUERY_STRING}
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* /index.php?%{QUERY_STRING}
Hiermee sluis je alles door naar index.php, waarbij je in dit bestand de bootstrapper laat en middels onderstaand (simpistisch) voorbeeld de url parsed:
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
$pathinfo = parse_url($_SERVER['REQUEST_URI']);
if($pathinfo) {
$pathinfo['path'] = strtolower ( trim ( $pathinfo['path'] , '/' ) );
$parts = explode ( '/', $pathinfo['path']);
$path = array();
$path['controller'] = ( current ( $parts ) ) ? array_shift ( $parts ) : 'home';
$path['action'] = (current ( $parts ) ) ? array_shift ( $parts ) : 'index';
$path['id'] = (current ( $parts ) ) ? array_shift ( $parts ) : '0';
if(isset($pathinfo['query'])) {
parse_str($pathinfo['query'], $querystring);
if(is_array($querystring))
$path['query'] = $querystring;
}
print_r($path);
}
?>
$pathinfo = parse_url($_SERVER['REQUEST_URI']);
if($pathinfo) {
$pathinfo['path'] = strtolower ( trim ( $pathinfo['path'] , '/' ) );
$parts = explode ( '/', $pathinfo['path']);
$path = array();
$path['controller'] = ( current ( $parts ) ) ? array_shift ( $parts ) : 'home';
$path['action'] = (current ( $parts ) ) ? array_shift ( $parts ) : 'index';
$path['id'] = (current ( $parts ) ) ? array_shift ( $parts ) : '0';
if(isset($pathinfo['query'])) {
parse_str($pathinfo['query'], $querystring);
if(is_array($querystring))
$path['query'] = $querystring;
}
print_r($path);
}
?>
Dit is een versimpelde weergave van het geheel, maar het gaat om het principe. Deze kan je dan in bootstrapper class gebruiken en de nodige gegevens ophalen.
De controller is het bestand dat wordt geïnclude. Met deze controller zou je ook eventueel gegevens uit de database kunnen halen. De action geeft aan wat je wilt doen (bekijken, wijzigen, verwijderen, etc.) en de eventuele id geeft uiteraard aan om welk item het gaat.
Op deze manier heb je een overzichtelijke structuur (naar mijn inziens).
Voor een dergelijke website als die van jou kan je volgens mij goed uit de voeten met smarty (client side en server side gescheiden!). Smarty levert vooral veel op bij grotere, complexere websites, aangezien Smarty zelf ook redelijk uitgebreid is.
En inderdaad is OOP een goede manier om gestructureerd te werk te gaan, maar let wel op dat het enige tijd duurt voordat je echt OOP kunt programmeren. Maar deze website is hiervoor wellicht een goede opstap. Het belangrijkste is om overzicht te houden en gestructureerd te werk te gaan!
Succes!
Gewijzigd op 16/06/2011 11:38:23 door Arjan -
als ik het goed begrijp, dan is de opbouw van mijn huidige .htaccess de oorzaak van m'n probleem? Ik ben alvast wat online cursussen aan't zoeken om het voorgestelde script te kunnen snappen (tot nu toe zitten er nog heel wat onduidelijkheden in). Ik wil je nu al héél erg bedanken voor je uitgebreide reactie op mijn uitgebreide topic. Ik hou je vast en zeker op de hoogte als het gelukt is, dan kan ik hopelijk verder gaan met de volgende stap(pen)!
P.S.: Arjan, volg jij m'n topic wat op? Ik wil absoluut NIET pushen, maar op deze manier weet ik of ik met m'n andere subproblemen al dan niet een nieuw topic in de andere onderwerpen moet plaatsen ;)
En jouw htaccess is niet zo zeer hét probleem, maar bij een logische structuur hoort wel een andere invulling van jouw htaccess inderdaad.
Gewijzigd op 16/06/2011 17:28:33 door Arjan -
Ik ben volledig overtuigd dat ik op deze manier wil werken, alleen... Het vinden van goede tutorials is een hele opgave! Deze tut ging in de goede richting, maar jammer genoeg is men niet verder dan 2 hoofdstukken geraakt: http://devzone.zend.com/node/view/id/119
Ik heb in ieder geval begrepen dat je het best een bepaalde structuur aanhoudt om je files in te stoppen. Ik pas de boomstructuur van in de bovenvermelde url zo goed mogelijk toe op mijn situatie:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
/
|-- private
| |-- app
| | |-- php
| | | |-- classes
| | | +-- scripts
| | |-- settings
| | +-- sql
| +-- lib
| +-- ZendFramework-HEAD
+-- httpdocs
|-- css
|-- images
|-- js
|-- private
| |-- app
| | |-- php
| | | |-- classes
| | | +-- scripts
| | |-- settings
| | +-- sql
| +-- lib
| +-- ZendFramework-HEAD
+-- httpdocs
|-- css
|-- images
|-- js
Hetgeen in de httpdocs map moet is overduidelijk, maar welke files je in welke mappen van de private map stopt, dát is andere koek!
- Stop ik mijn config.inc.php file in private/app/setting?
- Stop ik de smarty map in private/lib?
- Wat stop ik in private/app/php/scripts?
- Private/app/sql... waarom?
- En belangrijk: waar komt mijn index.php file en de .htaccess file te staan???
Phoeh, da's alvast een hele brok heb ik de indruk. Jammer dat zoiets niet uitgelegd word in een 800 pagina tellend "Beginning PHP and PostgreSQL 8" boek :(
Alvast dank aan de mensen die mij verder op weg willen helpen!