18 september 2014
Webdesign & <? php /* CSS
Studies
 
 
 
 
 
Hoe maak je een website ? 5. Zelf een CMS maken in PHP 18 april 2009

In dit artikel zal ik de basisprincipes proberen uit te leggen om zelf een CMS te maken en het een en ander bespreken aan redenen en achtergronden waarom je tot de keuze kan komen om zelf een CMS voor je website of organisatie te bouwen in PHP.

De basis voor deze studie is Deel 3: Een website maken met PHP

Redenen om zelf een CMS te maken

Ondanks dat er veel open source CMS systemen zijn besluiten mensen toch om zelf een CMS te maken in PHP om hun website mee te beheren. Hier kunnen verschillende redenen voor zijn:

  1. Het is leuk
    Als je toch al met PHP bezig bent durf je deze uitdaging misschien ook wel aan.
  2. Meer mogelijkheden
    Je kan je CMS geheel uitbouwen cq om je website heenbouwen met allerlei snufjes volgens je eigen wensen en bent niet afhankelijk van plugins of standaard mogelijkheden van een bestaand CMS.
  3. Bestaande CMS systemen voldoen niet
    Dit kan uiteraard ondanks dat er vele CMS systemen zijn en aanvullende plugins. De kern van een CMS is toch wel dat je informatie opslaat in een database en dat die beheerd kan worden en getoond kan worden op een website. Stel, even een heel specifiek voorbeeld. Je hebt een CMS nodig voor een dierentuin. Alle dieren moeten in de database komen met hun naam, natuurlijk oorsprong, dierengroep, specifieke uiterlijke kenmerken, leefgewoontes, gedrag, voedsel, eventuele medicijnen en andere verzorging en aanvullende informatie zoals afspraken over een dier met andere dierentuinen en bijzondere geberutenissen enz. Zie daar maar is een plugin voor de vinden bij een bestaand CMS. Voor al die kenmerken heb je apparte database velden nodig en de informatie moet door verzorgers en andere medewerkers van de dierentuin beheerd kunnen worden via een makkelijke interface en ook door hun en ander mederwerkers van de dierentuin intern bekeken kunnen worden. Aanvullend kun je een deel van die informatie uit diezelfde database ook publiekelijk maken op de algemene website. Zo kun je de site dus ook nog splitsen met een inlogsysteem en een deel van de informatie tonen over het intranet dus intern in het bedrijf en aan de andere zijde is er dan nog de publieke website die over het internet te benaderen is. De medewerkers moeten dus in kunnen loggen en er moet ook nog een beheerders gedeelte komen voor de echte hoofdbeheerder om de specifike CMS instellingen te beheren. Dit kan eventueel in een bedrijf nog gekoppeld kan worden met rechten aan hun Windows gebruikers account. Al met al is dit nogal wat en zul je dan dus met een bestaande CMS niet zomaar voor elkaar krigen. In zo'n geval is het dan dus verstandiger om zelf een CMS te ontwikkelen wat specifiek toegespitst is op de organisatie.
    Ook zijn er CMS systemen die niet op Open Source gebasserd zijn en soms ook niet op PHP maar op een andere programmeertaal. Voor bedrijven zijn er wel speciale betaalde zogenoemde Enterprise CMS systemen beschikbaar waarin je ook je personeelsadministratie kunt beheren en andere bedrijsfonderdelen met een intranet en een internet gedeelte. Natuurlijk kan in beide voorbeelden de informatie ook beheerd worden via  andere database software maar bij een CMS gaat het erom dat de informatie toonbaar wordt gemaakt op een intranet of internet pagina. Makkelijker is dan om het beheer van de gegevens via diezelfde pagina te doen en niet via apparte software natuurlijk.

CMS basics

Een CMS bestaat altijd uit 2 onderdelen. Een front-end (voorkant), de HTML uitvoer die je site creeert en een back-end (achterkant), het beheerders gedeelte en de technologie achter je website. Hoe geavanceerd en in meer of mindere mate gebruikersvriendelijk je CMS wordt hangt af van of je het CMS voor jezelf maakt of voor iemand anders of misschien wil je het zelfs lanceren als nieuw CMS.

Wat heb je nodig ?

  1. Kennis van PHP
    Je hebt voldoende basiskennis van PHP nodig om een basis contructie te kunnen maken met bestanden die goed met elkaar samenwerken en informatie uit je database kunnen lezen en er informatie in kunnen schrijven. Onder basis kennis versta ik dan, hoe de PHP syntax is opgebouwd, hoe je met functies werkt en met arrays, hoe formulieren werken en wat het verschil is tussen $_POST en $_GET etc, welke server variabelen je tot je beschikking hebt, hoe je een PHP adres maakt dus index.php?name=etc&id=id en hoe die informatie vervolgens te gebruiken en hoe je informatie in en uit een database leest.
  2. Kennis van MySql/PhpMyAdmin
    Je moet weten hoe je in PhpMyAdmin tabellen maakt en welke veld eigenschappen je moet toewijzen met welke lengte aan de verschillende velden.
  3. Kennis van webdesign
    Uiteraard moet je goed weten hoe je een website moet maken en alle basisprincipes onder de vingers hebben.
  4. Kennis van HTML en CSS
    Je hebt kennis van HTML nodig om formulieren te kunnen maken om de informatie op te slaan in je database en kennis van HTML en CSS om deze informatie vervolgens te tonen in een bepaalde layout/opmaak op je website. Dit gaat dus iets verder dan basiskennis webdesign.
  5. Kennis van JavaScript
    Natuurlijk moet je niet zelf JavaScript kunnen schrijven maar wel begrijpen wat je kan met JavaScript en hoe je kan linken naar een Js bestand om de JavaScript op je site te gebruiken. Zo kun je hiermee o.a. een editor inbouwen op je beheerders gedeelte.
  6. Inzicht
    Zonder inzicht ben je nergens. Je hebt een zekere mate van logisch denken nodig om bestanden in een bepaalde volgorde in te voegen en met elkaar samen te laten werken en dan ook echt te begrijpen wat er precies allemaal gebeurt. Ook zul je in het begin vaak tegen allerlei PHP foutmeldingen aanlopen door per ongelijke programmeer fouten zoals je vertypen, een comma vergeten of een ; of een } etc. De PHP foutmelding op je scherm geeft dan wel een regelnummer aan maar daar is de fout niet altijd te vinden.

Het framewerk van een CMS

De mininmale basis voor een CMS kan er als volgt uitzien:

  • Configuratie bestand
    In dit bestand staan je database gebruikersnaam en wachtwoord om verbinding te maken met je MySql database. Ook kun je in dit bestand gelijk verbinding maken met je database. Later als je je CMS uitbreid kun je ook anders instellingen kwijt in dit configuratie bestand. Het is aan te raden uit veiligheidsoverwegingen dit bestand altijd boven je www-root te plaatsen en relatief te linken.
  • Functie bestand
    In dit bestand staan al je functies die je meedere malen gaat gebruiken. De regel als het gaat om programeren in PHP is dat als je een stukje code meer dan 1 maal gebruikt in de code "moet" je het in een functie zetten. Die functie kun je dan altijd en overal gebruiken en je hoeft maar op 1 plek wijzigingen te maken.
  • Beheerders bestand
    In dit bestand bevinden zich formulieren om informatie in te voeren in je database. Dit bestand moet uiteraard beveiligd zijn en alleen voor jouw als beheerder toegankelijk worden. M.a.w. er moet eerst ingelogd worden. Dat kan op meerdere manieren en zal ik straks verder uitleggen.
  • Index bestand
    Dit is het bestand wat de informatie uitleest uit je database en in HTML vorm giet en toont op je website.
  • CSS bestand
    Dit voeg je uiteraard in in de HTML head sectie van je site voor de opmaak van de HTML uitvoer.

Nogmaals dit is minimaal, maar het vormt wel het framewerk wat je altijd verder kan uitbouwen later, want wat dacht je van een teller op je site en een pagina waar je dan de bezoeken ook weer kan terugkijken. Ook kun je een header en footer bestand maken om op die manier je HTML overzichtelijker te maken en mischien ook een menu bestand. Deze voeg je dan in je index samen tot 1 document. Ook kun je nog werken met taalbestanden en een template bestand, een rechtensysteem opzetten voor meerdere beheerders, een forum, weblog, gastenboek en dergelijke ontwikkelen ontwikkelen etc.

Overzichtelijk indelen

Als je dit om gaat zetten in een overzichtelijke mappenstructuur dan krijg je iets soortgelijks als dit. Let op dit zijn voorbeeld namen. Het mogen ook totaal andere namen zijn. Als het voor jezelf maar duidelijk is.

  • Map beheer of admin
  • Map css of stylesheets
  • Map phpbestanden (vaak includes genoemd maar hoeft zeker niet)
  • Map javascripts of scripts
  • Map images of afbeeldingen
  • index.php bestand

Code voorbeelden

Ik schrijf deze cursus "Hoe maak je een website" een beetje in verkeerde volgorde omdat dit deel 5 in de serie is. Deel 1 - De echte basisprincipes ! en Deel 2 - De Layout van een website zijn inmiddels geschreven. Deel 3 zal gaan over het maken van een website in PHP en deel 4 over het werken met een CMS. Ik denk dat ik de opbouw van het index bestand dan ook zal bespreken bij "het maken van een website in PHP". Als dat niet het geval zal zijn zal ik het alsnog hier verder schrijven.  Hoe je je beheerders gedeelte moet beveiligen en het werken met formulieren zal ik als losse code voorbeelden behandelen bij de Veel Gestelde Vragen.

Ideeën opdoen

  • Kijk technisch naar andere CMS systemen hoe ze zijn opgebouwd qua bestands en mappenstructuur en PHP code maar neem niet hun slechte gewoonten over.
  • Kijk technisch naar het beheerders gedeelte van andere CMS systemen. Misschien brengt het je nog op ideeën voor je eigen CMS. Zorg er uiteraard voor dat jouw CMS geen kopie of kloon wordt van een al bestaand CMS als je het wilt presenteren al nieuw CMS en neem ook niet zomaar code over van een ander CMS. Vaak is dit toch heel moeilijk omdat de code vaak helemaal op elkaar is afgestemd met variabelen die weer op een andere plaatst gecreeerd worden of de CMS code is zo gecompliceerd door jaren van ontwikkelen aan de code dat je er op het eerste gezicht toch de ballen niet meer van snap wat er nu eigenlijk gebeurt.
    Ik heb het meer over ideeën dus bijvoorbeeld: "he, dit CMS gebruikt URL rewriting, misschien kan ik ook wel gebruik maken van URL-rewriting voor mijn CMS" of bijvoorbeeld het inbouwen van een bepaalde Editor die ook in een ander CMS gebruikt wordt en fijn werkt. Die 2 ideeën heb ik bijvoorbeeld overgenomen van Drupal en Wiki CMS. We komen allemaal ergens vandaan en hebben soms al ervaring met andere CMS systemen en soms al jarenlange ervaring met "conventioneel webdesing" maar toch omdat het bestaande CMS niet doet wat je wilt of omdat je al de geavanceerde opties niet nodig hebt kies je er toch voor om uiteindelijk je eigen CMS te bouwen. Dit inspireerde mij tot het schrijven van Dutch CMS wat moest voldoen aan specifieke dingetjes die ik al jaren had ontwikkeld en uitgedacht voor mijn bestaande HTML websites die ik wilde overzetten naar PHP en ook wilde kunnen beheren op een CMS achtige manier. De bestaande websites waren dus de basis voor het ontwikkelen van het CMS en niet andersom dat de websites voortkwamen uit de layout van een bestaande CMS. En ik denk dat dat sowieso een goed excuus is om zelf een CMS te bouwen als je het echt leuk vindt om heel technisch met PHP code aan de slag te gaan.
    Wat je ook kan doen, als je het zo leuk vindt om met PHP bezig te zijn en veel ervaring hebt met 1 bepaald CMS, is om je aan te melden voor de community van dat CMS en te helpen met verdere ontwikkeling op het schrijven van plugins.

Tips

Sommige van onderstaande tips zulen niet van toepassing zijn als je een CMS maakt wat geheel voor jezelf is, maar toch is het handig om er kennis van te nemen.

  1. Beveiliging
    Zorg altijd dat je PHP website goed beveiligd is door alle mogelijke gebruikersinvoer (dus ook die via de adresbalk) altijd te controleren/filteren op verkeerde invoer. Een bezoeker kan altijd intikken in je adresbalk wat hij wilt en daarmee proberen het gedrag van je website te manipuleren. Ook alle invoer die via formulieren ingevoerd wordt in je database moet je controleren en filteren en natuurlijk ben je er dan nog niet. Lees daarom veel over PHP en beveiliging en schrijf je code op een slimme manier volgens de "best practice" methode zoals dat wel is genoemd wordt. Er zijn meerdere wegen naar Rome en zo is het ook met het schrijven in PHP. Als je een stukje code overneemt van een website met code voorbeelden kijk dan altijd kritisch naar die code en pas hem desnoods aan.
  2. Testen en laten testen
    Test je CMS tot je erbij neervalt. Wees er zeker van dat er geen fouten in de werking van het CMS zitten. Laat je CMS ook testen door andere mensen in je omgeving. Vaak lopen zij tegen problemen aan omdat ze anders met je CMS omgaan dan jij hebt bedoeld. Daar moet je dus op inspelen door het CMS te veranderen of voor specifieke problemen duidelijke documentatie te maken.
  3. Naamgeving
    Geef je CMS een pakkende naam die ook als als het kan naar jouw idee gelijk iets verteld over het CMS. Natuurlijk is dit niet verplicht. Let erop dat er niet al een CMS systeem is die dezelfde naam heeft of een ander softwarepakket of produkt met dezelfde naam. Dit kun je nagaan door verschillende schrijfwijzes van de naam in te voeren in Google en goed de resultaten te onderzoeken. Op de website van het BBIE kun je nagaan of een naam al als merknaam is geregistreerd. Dit is ook zeker aan te raden om te controleren om eventuele latere problemen te voorkomen.
  4. Versienummer
    Geef je CMS een versienummer. Meer over het geven van een versienummer kun je lezen op Wiki/Versienummer en de Engelse Wiki/Software versioning.
  5. Bronvermelding/credits
    Als je plugins van derden zoals bijvorbeeld een input filter of een editor in je CMS hebt geintegreerd vermeld deze er dan bij met een link naar de website van de ontwikkelaar. Ook als je stukjes code van een bepaalde PHP of HTML website hebt gebruikt vermeld dan het websiteadres en de naam van de persoon erbij die dat stukje code geschreven heeft. Ere wie ere toekomt.
  6. Documentatie
    Houd voor jezelf ook een duidelijke documentatie bij van waar je eventuele plugins of stukjes code voor je CMS vandaan hebt. Op die manier kun je later ook makkelijk naar die site terugkeren of eventueel contact opnemen met de schrijver/ontwikkelaar voor het geval er vragen of problemen zijn.
  7. Handleidingen
    Maak gebruikershandleidingen voor je CMS waarin je uitlegt hoe de dingen werken zoals inloggen, gegevens invoeren enz. Voor jouw is misschien alles duidelijk omdat je het zelf gemaakt hebt. Voor anderen is jouw CMS geheel nieuw en misschien nog onwennig.
  8. Feedback verzamelen
    Verzamel feedback van de gebruikers van je CMS en breng waar nodig verbeteringen aan. Zorg dat er een mogelijkheid is voor gebruikers om contact met je op te nemen voor vragen of hulp of het repporteren van fouten of problemen waar ze tegenaan lopen.
  9. Wijzigingen bijhouden
    Houd in je eigen documentatie ook de wijzigingen bij die je maakt in je CMS en verwerkt deze in een changelog als je overgaat op een nieuw versienummer. In een changelog kun je gerepareerde fouten, nieuwe onderdelen en verbeteringen op het gebied van functioneren documenteren. Ook hier vindt je informatie over op de Nederlandse en Engelse Wiki.
  10. Licentie
    Vermeld duidelijk onder welke soort licentie je je CMS verspreid. Als je CMS Open Source is zal het waarschijnlijk onder de GPL of LGPL zijn en voeg deze licentie ook toe aan je CMS.
  11. Exoneratieclausule
    Voeg een exoneratieclausule toe aan je CMS waarin je je vrijwaard van enige vorm van aansprakelijkheid bij geleden schade door gebruik of misbruik van het CMS. Natuurlijk doe jij er alles aan om je CMS 100% veilig te maken maar het is gewoon verstandig om jezelf hier mee in te dekken.

Heb je vragen over PHP of het maken van een CMS dan kun je die in het Forum stellen. Kijk ook bij de Veel Gestelde Vragen > Zelf een CMS systeem maken in PHP.

Denk je na het lezen van dit alles "ik maak liever toch maar niet een eigen CMS", kijk dan is of Dutch CMS wat voor je is om je website mee te bouwen !

Vriendelijke Groet,

A. L. / Webdesign, PHP en HTML

Deel 1 | Deel 2 | Deel 3