[PHP] Wat is een goede structuur van een site?

Pagina: 1
Acties:
  • 412 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • annuh
  • Registratie: Februari 2006
  • Laatst online: 16-09 05:42
Beste tweakers,
Deze vraag is al vaker gesteld, maar deze topics stammen uit 2001 etc. Enkele jaren geleden dus!

Inleiding:
Ik ben bezig met een site, waar gebruikers zelf muziek (de bladmuziek, dus de noten ;) kunnen toevoegen in de vorm van tabs en originele bladmuziek. Ik ben hier al een poosje mee bezig maar ben vastgelopen, omdat ik geen duidelijke structuur erin had.
Nu begin ik opnieuw en wil het nu in een keer goed doen! Dus met makkelijke urls (zoals tweakers.net) en makkelijke navigatie etc..

Eissen:
Er komen dus 5 verschillen subgedeelten:
  • Home (met contact enzo)
  • Tabs (onderverdeeld in instrumenten)
  • Bladmuziek (ook onderverdeeld in instrumenten)
  • Forum
  • Profiel (login, registratie, etc.)
Dit is niet zo moeilijk en helemaal niet met deze tutorial: http://www.naarvoren.nl/artikel/url.html
Het word dan site.nl/home of site.nl/tabs

Maar nu komt mijn probleem, hoe moet ik die pagina's opbouwen?

Allemaal volledige pagina's, die telkens het menu includen etc.
Of 1 index.php, die met behulp van case switch die juiste subpagina included eronder.
Of voor alle 5 de onderdelen een index.php

Ik stuit namelijk tegen 2 problemen aan:
1) Navigatie is lastig te maken (voor mijn gevoel) bijvoorbeeld: site.nl/tabs/drums/b/blof/mens/12345678 (waarbij 12345678 het id van de tab is).

2) Als ik NIET voor iedere pagina een aparte pagina maak, hoe kan ik dan een aparte titel laten weergeven? bv.
index.php
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<html>
<head>
<title>Welkom op de muziek pagina!</title>
</head>
<body>
<?php
//header
if ($pad[1] == 'tabs') {
     include(tabs/index.php);
}
//if else etc...(dit gebeurd normaal dan in case switch stijl, dit is ff een voorbeeld!)
//footer
?>
</body>
</head>


Hoe kan ik er nou voor zorgen dat de titel: "Dit is drum gedeelte van de tabs" wordt.
Ik had ergens iets gelezen over output buffering, maar dat lijkt me niet erg makkelijk.

Ik hoop dat jullie me een eind(je) op weg kunnen helpen!
Alvast bedankt!

Acties:
  • 0 Henk 'm!

  • Mr_gadget
  • Registratie: Juni 2004
  • Laatst online: 07:59

Mr_gadget

C8H10N4O2 powered

Zet het if gedeelte gewoon in de head en doe dan <title> <? echo ($pad); ?> </title>

[ Voor 2% gewijzigd door Mr_gadget op 07-01-2008 16:53 . Reden: typo ]


Acties:
  • 0 Henk 'm!

  • annuh
  • Registratie: Februari 2006
  • Laatst online: 16-09 05:42
Mr_gadget schreef op maandag 07 januari 2008 @ 15:35:
Zet het if gedeelte gewoon in de head en doe doe dan <title> <? echo ($pad); ?> </title>
Ja , dat inderdaad, maar dan zou ik 2x die hele if else (case switch) moeten doorlopen, 1 keer om de titel te bepalen en 1 keer om te kijken welk bestand geincluded moet worden.

Daarbij heb ik nog een probleem:
Stel de url is: site.nl/tabs/drum/a/
Dan wil ik graag dat de titel (bijvoorbeeld) wordt: Drumtabs: Letter A
Het makkelijkste zou in dit geval zijn om voor iedere pagina een andere volledig bestand aan te maken... Of denken jullie daar anders over? O-)

Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Kijk eens naar een template systeem zoals PHP Smarty. Hierbij kun je presentatie en functionaliteit gescheiden houden. In het php bestand kun je alle pagina onderdelen opbouwen (zoals title, meta description/keywords, maar ook array's of objecten met specifieke informatie over een item) en deze toekennen aan het template systeem.

Via de templates worden de informatie 'verzameld' in het PHP bestand naar HTML omgezet.

Wat betreft de leesbare navigatie. Meestal wordt gebruik gemaakt van url rewriting en kun je ook pas toepassen als de basis van je website staat. Daardoor kun je eenvoudig beginnen met url's als drum.php?letter=a.

Begin simpel. Vanzelf zul je daarna veranderingen doorvoeren om onderdelen te verbeteren. Aangezien ik er vanuit ga dat je geen complete requirement study hebt gemaakt lijkt mij dat de beste methode. Je ziet dan redelijk snel resultaat en dat maakt development dan ook direct leuk. Zeker als je vanaf scratch begint is dat lekker.

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

  • Raynman
  • Registratie: Augustus 2004
  • Laatst online: 23:59
annuh schreef op maandag 07 januari 2008 @ 15:47:
[...]


Ja , dat inderdaad, maar dan zou ik 2x die hele if else (case switch) moeten doorlopen, 1 keer om de titel te bepalen en 1 keer om te kijken welk bestand geincluded moet worden.
Je kunt toch in een keer de titel en het te includen bestand bepalen? Zet je in een variabele en die gebruik je waar je hem nodig hebt.
Daarbij heb ik nog een probleem:
Stel de url is: site.nl/tabs/drum/a/
Dan wil ik graag dat de titel (bijvoorbeeld) wordt: Drumtabs: Letter A
Het makkelijkste zou in dit geval zijn om voor iedere pagina een andere volledig bestand aan te maken... Of denken jullie daar anders over? O-)
Als je aan de hand van waardes die je via de url binnenkrijgt, kunt afleiden welke pagina je moet laten zien (dus hier alle drumtabs beginnend met een 'a') dan kun je toch ook makkelijk een string ($page_title o.i.d.) genereren waarin je dit verwerkt.

Acties:
  • 0 Henk 'm!

  • nipro
  • Registratie: Juni 2007
  • Laatst online: 18-09 13:09
Je zou iets als CakePHP kunnen overwegen, erg mooi framework en voldoet prima aan je eisen: routing en templates. Ik zou een framework als deze serieus overwegen, vooral als je site straks gaat groeien. :)

Hoempapaaa Holladiejeej.


Acties:
  • 0 Henk 'm!

  • Mud
  • Registratie: Februari 2007
  • Laatst online: 17-09 21:35

Mud

nipro schreef op maandag 07 januari 2008 @ 16:52:
Je zou iets als CakePHP kunnen overwegen, erg mooi framework en voldoet prima aan je eisen: routing en templates. Ik zou een framework als deze serieus overwegen, vooral als je site straks gaat groeien. :)
Zend Framework _/-\o_

Vind ik altijd nog het fijnste + zijn hele goeie tuts voor ;)

Acties:
  • 0 Henk 'm!

  • nipro
  • Registratie: Juni 2007
  • Laatst online: 18-09 13:09
Mud schreef op maandag 07 januari 2008 @ 17:23:
[...]


Zend Framework _/-\o_

Vind ik altijd nog het fijnste + zijn hele goeie tuts voor ;)
Ik gooi gewoon even een balletje op, TS mag zelf beslissen welk framework hij wilt gaan gebruiken (als hij dat überhaupt al wilt). Ik ga geen framework of wat dan ook verdedigen. ;)

Hoempapaaa Holladiejeej.


Acties:
  • 0 Henk 'm!

Verwijderd

Volgens mij wat de TS vooral wil is 'fancy url's'.

Dit word over het algemeen gedaan door het rewriten van url (oftewel het pad dat je in de url balk ziet is niet daadwerkelijk het pad naar de file, maar google is hiervoor je vriend).

Over de structuur van de website kan ik alleen zeggen dat als je weinig ervaring ermee hebt, ik gewoon hetgeen zou gebruiken wat voor jou logisch is. Een template systeem is echter wel aan te raden.

(overigens is het misschien een idee om de website gewoon middels een open source CMS te maken zoals bijvoorbeeld Joomla: alle componenten van de website die jij beschreven hebt zijn uitstekend te realiseren in Joomla)

Acties:
  • 0 Henk 'm!

  • jvdmeer
  • Registratie: April 2000
  • Laatst online: 06:53
Ik zelf zou het als volgt doen:
index.php:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
if ($pad[1] == 'tabs') {
     include(tabs.php);
}

?>
<html>
<head>
<title><?php echo titel(); ?></title>
</head>
<body>
<?php echo inhoud(); ?>
</body>
</head>


tabs.php:
PHP:
1
2
3
4
5
6
7
8
9
10
<?php
function titel() {
return "Dit is de TABS pagina";
}

function inhoud() {
return "Dit is de INHOUD";
}

?>


Eventueel (nog beter) is om hier een class voor te gebruiken, met als properties titel en inhoud o.i.d..

index.php:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
if ($pad[1] == 'tabs') {
     include(tabs.php);
}
?>
<html>
<head>
<title><?php echo titel(); ?></title>
</head>
<body>
<?php echo inhoud(); ?>
</body>
</head>


tabs.php:
PHP:
1
2
3
4
5
6
7
8
9
10
<?php
function titel() {
return "Dit is de TABS pagina";
}

function inhoud() {
return "Dit is de INHOUD";
}

?>


Eventueel zou je ook nog classes kunnen gebruiken:
index.php:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
if ($pad[1] == 'tabs') {
    include(tabs.php);
    $object=new tab();
}
?>
<html>
<head>
<title><?php echo $object->titel(); ?></title>
</head>
<body>
<?php echo $object->inhoud(); ?>
</body>
</head>


tabs.php:
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
<?php
class basis {
  function titel() {
    $result = 'DEZE TITEL IS NOG NIET GEVULD';
    return $result;
  }

  function inhoud() {
    $result='DEZE PAGINA IS NOG NIET GEVULD';
    return $result;
  }
}

class tab extends basis {
  function titel() {
    $result = 'Dit is de TAB-pagina';
    return $result;
  }

  function inhoud() {
    $result='Dit is de inhoud';
    return $result;
  }
}
?>


Op die manier kan je tenminste ook pagina's stukken laten overerven van de basis (of tussenliggende classes).

Maar hoe dan ook kan je ook kijken naar de genmoemde template-machines.
Pagina: 1