Voorstel voor modulaire doch uniforme opbouw van php

advertisement
Voorstel voor modulaire doch uniforme opbouw van
php-sites
Folder en filestructuur
Een eenduidige structuur voor alle sites zal moeilijk te vinden zijn. Hierom deel ik de sites in een aantal
soorten in die elk een gedeeltelijk eigen protocol hebben. De database sites en de statische sites
representeren de meest extreme varianten, mengvormen zullen vaak voorkomen.
Database driven sites (DbD)
De pagina’s van deze sites worden vanuit een database dynamisch aangemaakt. De ‘echte’ html-structuur
van de site zal tamelijk beknopt zijn.
Statische PHP-sites (sPHP)
Hier wordt PHP voornamelijk gebruikt om de site van templates te voorzien. De structuur van de site is die
van een normale site waarbij de html bestanden nu de basis PHP bestanden zijn.
Diederik’s systeem (DS)
Werkt met een bestand waarin de noodzakelijk parameters voor een site zijn opgeslagen en een bak
databestanden. Is een soort van bestandsmatige database.
Foldermatrix
Foldernaam
/backup/
/includes/
/templates/
/javascript/
/forms/
/database/
/images/
/site/
/modules/
/content/
/admin/
/styles/
/docs/
Beschrijving
Backup folder.
Alle functionele includes die door de hele site heen gebruikt
worden. Voornamelijk globals en functies.
Alle includes die voor de lay-out van de site nodig zijn.
Bevat de javascripts die door de hele site gebruikt worden.
Voor alle forms. Kunnen zowel html als php formulieren
zijn.
Als de site door een database wordt gegenereerd staan hier
de noodzakelijk scripts.
Alle images die voor de layout en initiele opzet van de site
nodig zijn.
Hier komt de sitestructuur afgezien van de root index in te
zitten.
Modules zijn stukken code die in het content vlak van een
pagina gehangen kunnen worden zonder dat de pagina
aanmaker iets van de code van de module zelf hoeft af te
weten.
Hier komt de content van de pagina’s als losse
tekstbestanden in te staan, eventueel aangevuld met
plaatjes.
Bevat alle scripts die nodig zijn om online wijzigingen aan
te berengen. Beveiligen met htaccess.
Hier komen de stylesheets terecht
Beschrijvingen, handleidingen, etc.
DbD
x
x
sPHP
x
x
DS
x
x
x
x
x
x
x
x
x
x
-
x
-
-
x
x
x
x
-
-
x
-
?
-
x
x
x
-
?
x
x
x
x
x
x
Bestandsnaamgeving
Extensie
*.tpl.php
*.inc.php
*.frm.php
*.frm.html
*.db.php
x_y_z.txt
x/module.php
Beschrijving
Template include bestand. Bevat delen html code die samen
met andere template includes de opmaak van de pagina
vormen.
Deze bestanden bevatten de functionele includes. De
belangrijkste zijn globals.inc.php en functions.inc.php.
Bestanden die nodig zijn voor het tonen en verwerken van
formulieren.
Bestanden die database interactie regelen.
Bestand dat als content in een pagina geplakt wordt. De
naam geeft het pad aan naar de omvattende php pagina
site/x/y/z.php.
Het bestand dat de rest van de module aanstuurt en als
content op de omvattende php pagina moet komen.
Folders
/templates/
/includes/
/forms/
/database/
/content/
/modules/x/
Modules
Een module is een map die alle bestanden bevat die je nodig hebt voor een bepaalde functionaliteit. Het
bestand module.php dient als het frontend en wordt bijv. als een include in het content gedeelte van een
pagina gehangen. Ik denk dat het het beste is dat de settings ook per module worden geregeld, hoewel een
centrale aanstuur functie per module wel handig zou kunnen zijn. Voorbeeld van functie in
functions.inc.php:
//Includes the emailform module and sends the requested variables
function module_emailform($Address,$Etc){
Include $File_Root."modules/emailform/module.php";
}
Zo’n constructie maakt het invoegen van de module makkelijker maar heeft als nadeel dat je voor elke
module weer een functiedefinitie moet maken in functions.inc.php. Wellicht kunnen we een standaard versie
van dit bestand maken waar alle bekende module functies als commentaar zijn opgenomen.
Uitgangspunten
1. Een site moet een uniforme uitstraling hebben
2. Een site moet snel met al beschikbare materialen gebouwd moeten worden
3. Inhoud dient zoveel mogelijk geisoleerd te worden
Hoe gaan we dat doen?
1. De pagina's worden via een beperkt aantal templates opgebouwd. Stylesheets worden gebruikt en
bijbehorende classes rucksichtlos doorgevoerd.
2. We gaan de meeste onderdelen zo opbouwen dat ze via een paar externe variabelen aan te sturen zijn.
Identieke elemente worden waar mogelijk geisoleerd in een include bestand. deze constructie dient snel
inzetbaar te zijn en dus doorzichtig te zijn. Een blackbox principe, zeg maar.
3. Het maken van de inhoud van veel educatieve pagina's kost veel tijd. Laten we dus zorgen dat het
makkelijk is om alle wezelijke info los van de menustructuren, banners en andere rommel te beheren. laten
we deze info dus zoveel mogelijk in losse txt of html files opslaan, of in een database.
Voorbeeld van een pagina definitie
Dit is een vrij dom voorbeeld, maar daardoor juist extra illustratief.
<?PHP
//---------------------------------------------initialisatie
include "settings.inc.php";
$PageTitle="titel";
$Tabel="_CoachThuis_School";
$Option_Form_Action='Nieuw';
$Option_Form_Mail='off';
$Option_Form_Debug='on';
//---------------------------------------------paginaopbouw
include "top.inc";
include "tekst/geo/inleiding.inc";
include "geo/forms/form4.inc";
include "bottom.inc";
?>
Ik neem aan dat we hier niet mee wegkomen, maar het zou mooi zijn als paginabouwen zo gemakkelijk zou
worden, toch?
Beschrijving vaste onderdelen
settings.inc bevat een aantal belangrijke globale variabelen. Deze variabelen kan je per pagina nog altijd
veranderen.
Print "<!-- Start Inc/Settings.inc //-->";
$Root="http://www.science.uva.nl/onderwijs/nieuw/test/";
$ClearPixel ="<IMG SRC='../../pics/clearpixel.gif' WIDTH=20 HEIGHT=2>";
$Studiegidsen="http://www.science.uva.nl/onderwijs/nieuw/studiegidsen/";
$Blackboard= "http://blackboard.ic.uva.nl/";
Print "<!-- End Inc/Settings.inc //-->";
Definities op de pagina zelf sturen in dit geval bijvoorbeeld het formulier aan. Het beste lijkt me om daar
een logische structuur voor te vinden ipv compleet verschillende variabelen per object. Ik gebruik hier het
suffix 'Option_' maar dat kan natuurlijk ook wel wat anders wezen. Ook voor de top en bottom van de
pagina kan je hier gedefinieerde variabelen inzetten, zoals $PageTitle in 'top.inc'.
top.inc bestaat uit het <HEAD> gedeelte van de pagina, inclusief alle META tags, die waarschijnlijk voor
een deel met globale variabelen aangestuurt kunnen worden. Ook de bovenkant van de <BODY> en de
menu's van de pagina moeten hierin een plaatsje vinden. We hebben al ervaring met een getrapte menu
include structuur, wellicht kunnen we die nog wat uitwerken.
bottom.inc sluit de pagina af wat html betreft. Tussen top en bottom komt alle content te staan.
Modules
Peter's Formulierformule maakt dynamisch formulieren van/voor een database tabel. Het lijkt mij een goed
idee om een aantal variabelen in het definitie gedeelte van de pagina te zetten. Meestal wil je toch alleen
maar onderhoud plegen op een pagina en niet ook nog eens een nieuw ding toevoegen.
Hier een lijstje mogelijke variabelen.
$Option_Form_Action='Nieuw'/'Onderhoud'/'Overzicht';
$Option_Form_Permissions='Add|Delete|Change|ViewAll'/'ViewSelf'/'All';
$Option_Form_Mail='off'/'self'/'client'/'both';
$Option_Form_Hide='Item1|Item2|Item3|Item4';
$Option_Form_Debug='on'/'off';
Wolter's Mededelingenmenger voegt informatie uit diverse databases samen op een pagina. Een uitgeklede
versie zouden we als passieve module aanbieden. De gebruiker kan niets kiezen (ik geloof dat je dan met
frames moet gaan werken) maar je kan wel per pagina definieren welke data getoond moet worden. Ik denk
dat hier een mix van globale en plaatselijke variabelen het best zou werken. Je geeft globaal een aantal
databases op waaruit gekozen kan worden (met de bijbehorende inlog functies etc) en geeft per module aan
welke uit deze serie gekozen wordt samen met de benodigde info om de juiste informatie te vinden. Wat mij
betreft kan je meer modules per pagina tonen...
$Option_Communication_Database='CMS';
$Option_Communication_Show='Title|Date|Description';
$Option_Communication_SearchString="'Studierichting=Chem'";
Diederik's Uberupload kan op dezelfde wijze worden geconfigureerd. Wat mag wel en wat mag niet worden
geupload, laat je het erna zien, moet het in een pagina komen.
Besluit
Dit lijkt me wel genoeg voor een kleine discussie... 't Is kwart voor zeven, ik vind het mooi geweest.
Toevoegingen
Scripts in header
We kunnen in top.inc een script variabele zetten. Die moet dan testen of er een script ingevoegd moet
worden (via een in de pagina gedefinieerde variabele) en of dat script er daadwerkelijk is. Op deze manier
kunnen we de complete kop isoleren (denk ik).
Stylesheets
We kunnen een treetraps stylesheet invoeren om te voorkomen dat we een kilometerslange stylesheet
krijgen met alle opties voor de hele site. Je kan dan per pagina aangeven of je naast de standaard stylesheet
een extra overrule sheetje wil toevoegen.
Ook in de stylesheets lijkt standaardisatie me een groot goed.
P.Header1
P.Header2
P.BodyText
P.MainMenu
P.SubMenu
Een set als deze kan altijd gebruikt worden. Maakt kopieren en migratie een eitje. Ik geef de voorkeur aan P
boven DIV omdat Netscape nog wel eens moeilijk doet over DIV en tabellen. het modificeren van
bestaande opmaak tags lijkt me ook niet zo'n goed plan. Nu weet je zeker dat een pagina er goed uitziet als
je onze tags maar gebruikt.
Taal
Alle code, commentaar, etc in Her Imperial Majesty's Own Language, bitte.
Folderstructuur
Wellicht is het een goed plan om een vaste nomenclatuur en opbouw aan te houden. Mijn voorstel:
/code/
/bits/
/text/
/docs/
/back/
/html/
/edit/
/form/
functionele includes zoals functies, globals, etc
opmaak includes zoals top en bottom
content includes
documentatie
backup
eventuele losse html bestanden
gebruik ik zelf voor site edit formulieren en rechten
voor Peter?
/site/ eventueel de plek voor de hele sitestructuur na index.php
/pics/ centraal gebruikte plaatjes
/style/ klote. vijf letters.
Ja, het is waar, ik heb een 'alle mappen vier letters' tik. We kunnen de PHP gerelateerde folders ook in een
map PHP samenvatten. Maakt het copy/pasten naar een nieuwe site wel makkelijker.
Extra opties
Ik kom al werkend op een aantal extra opties uit. Hier zijn ze.
$Option_Form_Subscript='form/subscript1.txt';
//text below form
Vaste bestandsnamen
Als de folders vastliggen dan kan je ook vaste bestanden maken.
/code/variables.inc.php
server root, globals, vaste links
/code/functions.inc.php
functies die je overal gebruikt
/form/functions.inc.php
functies die je alleen voor forms gebruikt
/style/style.css
algemene stylesheet
/style/style_form.css
uitzonderingen voor forms
Download