Drupal 7 website met uitvaartkosten calculator module

Vergelijkbare documenten
Drupal 7 website met uitvaartkosten calculator module

Les 15 : updaten van gegevens in de database (deel2).

Kies File>New>Blank Page>PHP. Je kunt eventueel nog een stylesheet koppelen. Definieer nu eerst een site! Dat betekent: Site>New Site

Inhoudsopgave Disclaimer... 3 Voorwoord... 4 Inleiding... 5 Het downloaden van XAMPP... 7 Het installeren van XAMPP... 8 Joomla installeren op

Formulieren maken met Dreamweaver CS 4/CS 5

Drupal. Handleiding voor medewerkers. Wim Hambrouck V1.1 (januari 2011)

Formulieren maken met Dreamweaver CS 4

Inhoudsopgave... 1 Disclaimer... 3 Voorwoord... 3 Inleiding... 5 Het downloaden van XAMPP... 7 Het installeren van XAMPP... 8 Joomla installeren op

Een website maken met databasetoegang.

Beschrijving functioneel en technisch design van de website

Koppeling met een database

Test Joomla op je PC 1

Op de Virtual Appliance is MySQL voorgeïnstalleerd. MySQL is momenteel de meest gebruikte database op het internet.

DR3_fons_les_ _11_13 1

Toelichting release notes. 23 oktober 2014

De voordelen van Drupal

Handleiding Reinder.NET.Tasks.SQL versie 2

Drupal lokale installatie op Windows 7.

Installeer Apache2: Landstede februari 2009 versie 3 1 Bertil Hoentjen

Een ASP.NET applicatie opzetten. Beginsituatie:

icafe Project Joeri Verdeyen Stefaan De Spiegeleer Ben Naim Tanfous

Xampp Web Development omgeving opzetten onder Windows.

MEDIA NAV navigatiesysteem Handleiding voor het downloaden van content via internet

LES 11: VAN LOKAAL NAAR ONLINE. Lesoverzicht: Aan de slag Domeinnaam Web hosting FTP gegevens FTP programma s Database exporteren Samenvatting

Uitleg CMS Utrecht Your Way Button 1. Inloggen

Een website maken met Joomla!

Databases - Inleiding

Handleiding voor Zotero versie 2.0

Handleiding: Whitelabel Customersite

Technische nota AbiFire5 Rapporten maken via ODBC

LES 3: XAMPP OF MAMP. Lesoverzicht:

Een poging om de snelheid van de sites te verzekeren tijdens de lessen:

XAMPP Web Development omgeving opzetten onder Windows.

2. Ga naar Prestashop Admin > Modules en zoek naar Kassa Compleet.

Sophie van Solinge CMS32

Handleiding Magento - Asperion

Versie 0.2. Documentatie Onsweb Club plugin voor NHV verenigingen. Laatste wijziging: 10 mei 2013 Auteurs: Marien Dongstra, Sebastian Huisman

Subrapporten. 5.1 Inleiding

Technisch ontwerp. Projectteam 6. Project "Web Essentials" 02 april Versie 2.1.0

Handleiding Wordpress

HANDLEIDING DOIT BEHEER SYSTEEM

Handleiding Magento - Yuki

Handleiding CMS VOORKANT

Beginnen met Drupal 7. Voor beginners

Mywebshop configuratie. Versie 1.0 Februari Copyright 2010 Wikit BVBA, alle rechten voorbehouden

Inhoud. Pagina 2 van 13

WordPress Website. Bouw zelf je WordPress Website. Maarten Hendrix. Maarten Hendrix

Les 2 Inhoud toevoegen

Deel 5: Ontleding van een thema en subtheming. 20. YML-bestanden en subtheming

Drupal lokale installatie op Linux Mint 17.1 Cinnamon.

En hoe gaan ze dit allemaal terugvinden?

DHL KOPPELING GEBRUIKERSHANDLEIDING

Na bestudering van dit hoofdstuk, moet je tot het volgende in staat zijn:

DR3_fons_les_ _11_06 1

1 BUSINESS INTERNET SUPPORT

Installatie handleiding Packs Magento 1.9 extensie

CVO Crescendo. Download de laatste versie van Drupal (tar.gz) via én

DHL PARCEL INTRODUCTIE. *Bron: Metapack

Getting Started Guide

JOOMLA. Lokale installatie van Joomla met XAMPP. Naslagwerk over hoe men joomla installeert, zonder dat men webruimte huurt

Open SQL Server Management Studio en log in als Administator. Je ziet dan wat je in figuur 2.1 ziet.

Voor vragen: of mail naar

Databank - Basis 1. Inhoud. Computervaardigheden en Programmatie. Hoofdstuk 4 Databank - Basis. Terminologie. Navigeren door een Venster

Toegang deelnemers / Inloggen Account deelnemer Communicatiemateriaal Bijbestellen communicatiemateriaal.. 03

Webhosting Online Beginnen met Joomla v1.0

Handleiding RS Form! 1.0.4

Inhoudsopgave. versie 0.8

Installatiehandleiding

drupal 4 Fons les 07 - enitity reference view 2015_03_19 1

Easy Business Tools - Multi-user module

Forum Plugin. Het toevoegen en beschrijven van een nieuwe forum categorie, conferentie, thread en gebruikersgroep.

Quick start handleiding versie 1.0

Handleiding Site to Edit Module Kaart

Naam project Lost And Found Animals Lokaal gehost Percentage van het totaal geleverde werk 1 Cindy Jansen 50% 2 Eline Steyvers 50%

Javascript oefenblad 1

2 Pagina s binnen TYPO3

Midi PDF Bladmuziek lezer

LES 1: AAN DE SLAG MET WORDPRESS. Lesoverzicht: Aan de slag Wat is WordPress CMS Front-end Back-end Samenvatting. Tijd: 5 minuten

1 Fotomodule. Handleiding fotomodule Scherpenheuvel Zichem

SMART- Leerdoel Mathijs de Bok Emotion - RMM42

Installatie Solid Edge ST5

Installatiehandleiding 2.x

De Liemers Helpt Partner Handleiding v1.1. De Liemers Helpt. Partner handleiding

#Stap 1 Uw account activeren en inloggen

Zonnepanelen Hoe krijg je de data op je website?

Sparse columns in SQL server 2008

- Plan Zo kun je een. website bouwen!

Project verslag. Erwin Hannaart Sander Tegelaar

De Kleine WordPress Handleiding

JOOMLA! GEBRUIKSVRIENDELIJKHEID IN DE PRAKTIJK. Tips en hulpmiddelen voor gebruiksvriendelijkheid

Handleiding installatie Enecsys uitlezen op een Synology NAS

DRUPAL Dev Training, dag 1. Introductie

2. Je eerste Prezi Klik op new Prezi. Je komt op volgend scherm uit:

Magento 2 Koppeling installatiehandleiding

De WordPress 3.5 Beginners Handleiding

2. INLOGGEN INLOGGEN'

Micro Computer Service Center. Installatie

Transcriptie:

Scriptie ingediend tot het behalen van de graad van PROFESSIONELE BACHELOR IN DE ELEKTRONICA-ICT Drupal 7 website met uitvaartkosten calculator module Kenneth Dhoy Departement Wetenschappen en Techniek Opleiding Elektronica-ICT Academiejaar 2014-2015 Interne promotor: Tom Peeters Externe promotor: Michel Neven Versie: 10 juni 2015

Dankwoord Met dit dankwoord wil ik me richten naar allen die geholpen hebben bij het tot stand komen van deze scriptie. In de eerste plaats richt ik een dankwoord aan mijn interne promotor Tom Peeters. Niet alleen heeft hij mij geholpen met de testscriptie, dankzij zijn lessen over PHP had ik al een goede basis voor ik aan dit eindwerk begon. Ten tweede zou ik mijn externe promotor Michel Neven willen bedanken. Dankzij zijn behulpzaamheid en toegang tot alle nodige drupal boeken heb ik mij meteen kunnen verdiepen in mijn eindwerk. Tot slot zou ik de steun van het thuisfront willen vermelden. De hoeveelheid steun die uit deze hoek is gekomen valt moeilijk in woorden uit te drukken. Antwerpen, 10 juni 2015 Kenneth Dhoy i

Abstract Het doel van dit project was om een Drupal 7 website te maken met een uitvaartkosten calculator. Deze module berekent aan de hand van bepaalde vragen het totale kapitaal dat weer gebruikt kan worden om een geschikte verzekering te vinden voor de klant. Tevens is het mogelijk om de module te gebruiken voor andere verzekeringen. Deze module toont een vragenlijst die aangepast kan worden, zo kunnen vragen toegevoegd, aangepast en verwijderd worden. Alsook kunnen er extra vragen gecreëerd worden. Deze vragen worden getoond wanneer een bepaald antwoord gegeven wordt in een andere vraag. Dit is allemaal mogelijk in de admin pagina. Deze pagina laat alle vragen, antwoorden en extra vragen met hun antwoorden zien. Tevens is er ook een resultaten pagina die weergeeft wanneer er een formulier werd doorgestuurd, wat het totale kapitaal was en welke antwoorden er juist gegeven werden. ii

Inhoudsopgave Dankwoord Abstract i ii 1 Situering 1 2 Bespreking 2 2.1 Installeren Drupal 7............................... 3 2.2 Content toevoegen................................ 4 2.2.1 Filtered HTML.............................. 5 2.2.2 Full HTML................................ 5 2.2.3 Plain text................................ 5 2.3 Website design.................................. 6 2.3.1 Zen theme................................ 6 2.3.2 Compass................................. 7 2.3.3 Sass................................... 7 2.4 Custom module................................. 8 2.4.1 Hooks.................................. 8 2.5 Uitvaartkosten Calculator module........................ 10 2.5.1 Vragenlijst................................ 10 2.5.2 Database................................. 14 2.5.3 Admin pagina.............................. 16 2.5.4.install bestand.............................. 22 2.5.5 Insert default vragen........................... 23 2.5.6 Hoe de uitvaartkosten calculator module gebruiken........... 24 3 Resultaten 25 4 Besluit 26 iii

INHOUDSOPGAVE iv A Appendix 27 B Opmerkingen bij scripties 28

Lijst van figuren 2.1 Drupal logo.................................... 3 2.2 Start XAMPP.................................. 4 2.3 Content toevoegen................................ 5 2.4 Zen logo..................................... 6 2.5 Default Zen................................... 6 2.6 Vragenlijst voorbeeld............................... 10 2.7 Database schema................................ 14 2.8 Admin pagina.................................. 16 2.9 Vraag en antwoord toevoegen.......................... 17 2.10 Vraag en antwoord aanpassen.......................... 18 2.11 Resultaten pagina................................ 19 v

Hoofdstuk1 Situering Toen ik de lijst met eindwerkvoorstellen zag van alle mogelijke bedrijven viel mij op dat er veel vraag was naar een Drupal 7 developer. Dit wekte mijn interesse en ik wou weten waarom Drupal zo populair is. Omdat de meeste van deze stageplaatsen maar één Drupal developer nodig hadden werk ik alleen aan mijn project. Er werd mij gevraagd om een Drupal 7 website met een custom uitvaarkosten calculator module te maken. Deze module zal een vragenlijst aan de klant laten zien en aan de hand van de antwoorden van de klant kunnen we te weten komen wat de uitvaarkosten zijn, zo kan verder bepaald worden welke verzekering het best bij de klant past. De module moet ook een admin pagina hebben die het mogelijk maakt om vragen en antwoorden toe te voegen, aan te passen of te verwijderen. 1

Hoofdstuk2 Bespreking Drupal 7 Drupal is een gratis open source framework geschreven in PHP. Het werd uitgegeven onder de GNU GPL wat wil zeggen dat het gratis mag gebruikt en aangepast worden door de gebruiker. De oprichter van Drupal is Dries Buytaert, een belgische softwareontwikkelaar. Het standaard pakket dat je krijgt als je Drupal download wordt de Drupal core genoemd, deze heeft een aantal basis modules die je kan gebruiken zoals: ˆ Blog ˆ Forum ˆ Poll ˆ Gebruikersprofielen ˆ RSS De Drupal core wordt geschreven door een vast team, alle andere modules en thema s worden geschreven door de Drupal community. 2

HOOFDSTUK 2. BESPREKING 3 Figuur 2.1: Drupal logo 2.1 Installeren Drupal 7 Het installeren van Drupal is zeer gemakkelijk en goed gedocumenteerd. Ik ben begonnen met het downloaden van de Drupal 7 core, deze is terug te vinden op de Drupal website 1. Omdat je voor Drupal een server of localhost nodig hebt om je website weer te geven heb ik gekozen voor XAMPP 2. XAMPP is een gratis open source softwarepakket met een apache webserver, MySQL database en maakt het mogelijk om een scripttaal te lezen zoals PHP. Vervolgens moet je de Drupal 7 core folder plaatsen in de htdocs folder van je XAMPP folder. Omdat Drupal zijn instellingen opslaagd in de database is het noodzakelijk dat bij het XAMPP panel Apache en MySQL gestart wordt. 1 https://www.drupal.org/project/drupal 2 https://www.apachefriends.org/index.html

HOOFDSTUK 2. BESPREKING 4 Figuur 2.2: Start XAMPP Voor het aanmaken van deze lokale database heb ik phpmyadmin gebruikt, dit krijg je automatisch als je op de admin button klikt in de MySQL sectie. Zoals vermeld werkt Drupal 7 met een database, dus moet er nu een database aangemaakt worden die Drupal kan gebruiken. Tijdens de installatie van Drupal 7 wordt er gevraagd om de gegevens van deze database in te vullen. Het is aan te raden de installatie gids van Drupal te volgen 3. 2.2 Content toevoegen Om content toe te voegen in Drupal 7 kan je gewoon op de knop of link add content klikken. Vervolgens kan je kiezen of je een artikel of een pagina wil toevoegen, voor dit project heb ik altijd een pagina gekozen. Daarna kan je de titel van de pagina en de tekst die op de pagina moet komen invullen. Hier kan je kiezen uit drie soorten teksten namelijk: ˆ Filtered HTML ˆ Full HTML ˆ Plain text 3 https://www.drupal.org/documentation/install

HOOFDSTUK 2. BESPREKING 5 Figuur 2.3: Content toevoegen 2.2.1 Filtered HTML Filtered HTML laat URL s en e-mailadressen direct omzetten naar links. Het laat ook bepaalde HTML tags toe zoals <a>, <em>, <strong>, <cite>, <blockquote>, <code> en <ul>. Zinnen en paragrafen krijgen automatisch een break. 2.2.2 Full HTML Heeft alles wat de gefilterde HTML optie ook heeft maar het laat alle HTML tags toe. Deze optie heb ik vaak gebruikt om mijn pagina s te maken om zo <h1>, <h2> en <p>tags toe te voegen. 2.2.3 Plain text Heeft alles wat de gefilterde HTML optie ook heeft maar laat geen HTML tags toe.

HOOFDSTUK 2. BESPREKING 6 2.3 Website design 2.3.1 Zen theme Figuur 2.4: Zen logo Het Zen theme is een zeer populair thema in Drupal, het staat bekend om zijn zeer goede documentatie. Zen gebruikt HTML 5 en is ook responsive wat wil zeggen dat het zich aanpast op tablets en smartphones. Het ondersteund ook Sass en Compass maar dit is niet verplicht, je kan ook CSS gebruiken. Om Zen te gebruiken moet je het eerst downloaden van de Drupal website, dit bestand moet geplaatst worden in Drupal7/sites/all/themes. Dit is zeer belangrijk omdat er ook een themes map is in Drupal7/themes. Hier vind je alle basis themes terug die standaard in de Drupal core worden meegegeven. Als je je custom Zen theme hier installeert en aanpast, zullen bij de volgende update al je aanpassingen overschreven worden. In de Zen folder zit een starterkit folder die je moet gebruiken om je eigen thema te maken. Het is dus niet de bedoeling dat je de Zen core folder begint aan te passen. Deze starterkit wordt ook een subtheme genoemd. Er zijn verschillende readme files terug te vinden die belangrijk zijn om je eigen theme te maken. Om je eigen thema te kiezen in Drupal 7 moet je bij appearance je eigen thema op enable en set default zetten. Figuur 2.5: Default Zen

HOOFDSTUK 2. BESPREKING 7 2.3.2 Compass Compass is een open-source framework dat gebruik maakt van Sass. Je kan Compass op twee manieren gebruiken, met of zonder een command line. Voor dit project heb ik de command line gebruikt. De enige twee commando s die ik heb gebruik zijn cd C:/XAMPP/htdocs/vergelijkdirect/sites/all/themes/vergelijkdirect theme en compass watch. Compass zal deze folder controleren op veranderingen en de Sass terug omzetten naar CSS in een andere stylesheet. 2.3.3 Sass Sass staat voor Syntactically Awesome StyleSheets. Sass is een uitbreiding op CSS (Cascading Style Sheets), en heeft een paar handige extra s zoals: ˆ Het gebruik van variabelen ˆ Nesten ˆ Overerving Variabelen Het gebruik van variabelen in Sass werkt hetzelfde als bij PHP, je kan bijvoorbeeld een kleurcode toewijzen aan een duidelijke naam: $hoofdkleur goud: #ffd700 dit zorgt ervoor dat je een beter overzicht krijgt van je code. Nesten Met CSS moest je telkens nav li {}, nav ul {} hergebruiken, met sass kan je dit nesten: nav { li{} ul{} } (haakjes zijn niet nodig). dit zorgt weer voor een beter overzicht van je code. Overerving Met het gebruik van extend kan je classen overerven.

HOOFDSTUK 2. BESPREKING 8 2.4 Custom module Een module bestaat uit twee belangerijke bestanden namelijk: ˆ.info bestand ˆ.module bestand In het info bestand staat alle informatie over de module zoals: ˆ De versie (core) waarvoor de module geschreven is ˆ Naam van de module ˆ Beschrijving van de module ˆ De naam van het pakket waar de module terug te vinden is ˆ Link naar eventuele toegevoegde javascript bestanden ˆ Link naar eventuele toegevoegde configuratiepagina Het.info bestand is verplicht omdat het de aanwezigheid van de module laat zien, zonder het.info bestand is er geen module. In het.module bestand staat alle code. Drupal maakt hiervoor gebruik van hooks. 2.4.1 Hooks Als je een eigen module wil maken zal je hooks moeten gebruiken. Een hook is een PHP functie die herkent wordt door Drupal. Hier zijn enkele voorbeelden van belangerijke hooks. ˆ hook help() ˆ hook init() ˆ hook menu() ˆ hook form() ˆ hook install() ˆ hook uninstall Om een hook te laten samenwerken met je eigen module moet je hook vervangen door de naam van je module. Het is zeer belangrijk dat de naam van de custom module hetzelfde is als de naam van de hook. Anders zal de module deze niet herkennen en zo zal de hook niet uitgevoerd worden.

HOOFDSTUK 2. BESPREKING 9 Listing 2.1: hook menu voorbeeld 1 /* * 2 * I m p l e m e n t a t i e hook menu 3 */ 4 f u n c t i o n u i t v a a r t k o s t e n C a l c u l a t o r m e n u ( ) { 5 $ i t e m s = array ( ) ; 6 $ i t e m s [ u i t v a a r t k o s t e n C a l c u l a t o r ] = array ( 7 t i t l e => U i t v a a r t k o s t e n C a l c u l a t o r, 8 page c a l l b a c k => d r u p a l g e t f o r m, 9 page arguments => array ( u i t v a a r t k o s t e n C a l c u l a t o r f o r m ), 10 a c c e s s c a l l b a c k => TRUE 11 ) ; 12 13 $ i t e m s [ admin / c o n f i g / c o n t e n t / c a l c u l a t o r / s e t t i n g s ] = array ( 14 t i t l e => C a l c u l a t o r admin pagina, 15 d e s c r i p t i o n => C o n f i g u r a t i e voor de U i t v a a r t k o s t e n c a l c u l a t o r module, 16 page c a l l b a c k => d r u p a l g e t f o r m, 17 page arguments => array ( u i t v a a r t k o s t e n C a l c u l a t o r a d m i n f o r m ), 18 a c c e s s arguments => array ( a d m i n i s t e r s i t e c o n f i g u r a t i o n ), 19 type => MENU NORMAL ITEM, 20 ) ; 21 r e t u r n $ i t e m s ; 22 } Hierboven zien we dat de hook menu() wordt vervangen door uitvaartkostencalculator menu(). Dit is omdat de naam van mijn module uitvaartkostencalculator is.

HOOFDSTUK 2. BESPREKING 10 2.5 Uitvaartkosten Calculator module De uitvaartkosten calculator module bestaat uit twee delen namelijk: de vragenlijst en de admin pagina. 2.5.1 Vragenlijst Front-end Elke vraag wordt getoond met de daarbij horende mogelijke antwoorden. Deze worden uit de database gehaald en kunnen aangepast worden via de admin pagina. Per vraag wordt er een fieldset gegenereerd, deze is collapsible. Alsook moet elke vraag beantwoordt worden omdat de radio buttons required zijn. Dit kan je zien aan de * die bij elke vraag staat. Tevens zijn er ook extra vragen, dit zijn vragen die verbonden zijn met een bepaalde vraag en verschijnen als een bepaald antwoord van deze vraag gekozen wordt. Deze extra vragen worden in dezelfde fieldset getoond als de vraag waarmee ze verbonden zijn, maar deze vragen zijn niet required. Figuur 2.6: Vragenlijst voorbeeld

HOOFDSTUK 2. BESPREKING 11 Back-end Listing 2.2: vragenlijst fieldset 1 $form = array ( ) ; 2 $vragen = d b q u e r y ( SELECT * FROM vragen o r d e r by ID ) ; 3 4 while ( $row = $vragen >f e t c h A s s o c ( ) ) { 5 $ i d = $row [ ID ] ; 6 $form [ f i e l d s e t. $ i d ] = array ( 7 #type => f i e l d s e t, 8 #t i t l e => Vraag. $id, 9 #c o l l a p s i b l e => TRUE, 10 #c o l l a p s e d => FALSE, 11 ) ; Hierboven staat de code die gebruikt wordt om de fieldset te genereren, hier kan je kiezen of de fieldset collapsible is. Elke fieldset wordt verbonden met de id van de vraag. Listing 2.3: vragenlijst vragen en antwoorden 1 $antwoorden = d b q u ery ( SELECT * FROM antwoorden WHERE ID = $ i d ) ; 2 while ( $row2 = $antwoorden >f e t c h A s s o c ( ) ) { 3 $ o p t i o n s = a r r a y f i l t e r ( array ( $row2 [ ANTWOORD 1 ], $row2 [ ANTWOORD 2 ], 4 $row2 [ ANTWOORD 3 ], $row2 [ ANTWOORD 4 ] ) ) ; 5 // f i l t e r, 0, n u l l 6 7 $ v a l u e s = a r r a y d i f f ( array ( $row2 [ WAARDE ANTWOORD 1 ], 8 $row2 [ WAARDE ANTWOORD 2 ], 9 $row2 [ WAARDE ANTWOORD 3 ], 10 $row2 [ WAARDE ANTWOORD 4 ] ), array ( ) ) ; 11 // f i l t e r n u l l 12 13 $ v a l u e s o p t i o n s = a r r a y c o m b i n e ( $ v a l u e s, $ o p t i o n s ) ; 14 15 $form [ f i e l d s e t. $ i d ] [ antwoord. $ i d ] = array ( 16 #type => r a d i o s, 17 #t i t l e => $row [ VRAAG ], 18 #o p t i o n s => $ v a l u e s o p t i o n s, 19 #r e q u i r e d => TRUE, 20 ) ; 21 } Vervolgens wordt elke vraag met bijhorende antwoorden uit de database gehaald. Elk antwoord wordt gelinkd aan een waarde, deze waarde wordt gebruikt om het totale kapitaal te berekenen. Er kunnen maximum vier antwoorden per vraag gegenereerd worden, het is mogelijk om minder antwoorden te genereren. Daarom worden de arrays met antwoorden en waardes gefilterd.

HOOFDSTUK 2. BESPREKING 12 Hiervoor maken we gebruik van de PHP functies array filter() 4 en array diff(). 5 Array filter() zal ervoor zorgen dat wanneer een antwoord een lege string, de waarde 0 of null heeft om deze uit de array te halen. De andere waardes worden in een nieuwe array gestoken. De manier waarop array diff() gebruikt wordt werkt het gelijkaardig als array filter() met dat verschil dat de waarde 0 wel toegelaten wordt. Dit is noodzakelijk omdat we de waarde 0 nodig hebben in het berekenen van het totale kapitaal. Er zullen twee arrays met elkaar vergeleken worden, de eerste array is degene met de waardes in, de andere is een lege array. Dit wil zeggen dat alle lege strings of null waardes eruit gehaald worden. De waardes die doorgelaten worden zullen in een nieuwe array gestoken worden. Omdat drupal de sleutels van een array gebruikt als de waardes van de radio buttons maak ik gebruik van de PHP functie array combine(). 6 Dit zal ervoor zorgen dat in plaats van [0] Begraven, [1] Cremeren de waardes van het antwoord de sleutel vervangen zodat de array er zo uitziet: [1000] Begraven, [500] Cremeren. Array combine() zal twee arrays combineren tot één array, de eerste array bevat de sleutels en de tweede de waardes. Deze array wordt doorgegeven om de radio buttons te genereren. Om deze radio buttons te creëren moet je het type meegeven, in dit geval radios. Ook de titel en opties worden meegegeven, dit zijn de gegevens die uit de database gehaald worden namelijk de vraag en antwoorden met de waarden. Vervolgens maken we deze vraag required wat wil zeggen dat drupal zal controleren of deze vraag beantwoord is bij het verzenden. Als dit niet het geval is zal er een error optreden en zal het formulier niet doorgestuurd worden. Is dit wel het geval dan wordt de totale kost berekent. Dit is mogelijk omdat bij het verzenden van het formulier we alle waarden kunnen bemachtigen via $form state[ values ]. 4 http://php.net/manual/en/function.array-filter.php 5 http://php.net/manual/en/function.array-diff.php 6 http://php.net/manual/en/function.array-combine.php

HOOFDSTUK 2. BESPREKING 13 Listing 2.4: vragenlijst extra vragen 1 $form [ f i e l d s e t. $ i d ] [ antwoord. $ i d.. $ e x t r a i d ] = array ( 2 #type => r a d i o s, 3 #t i t l e => $row3 [ EXTRA VRAAG ], 4 #o p t i o n s => $ v a l u e s o p t i o n s e x t r a, 5 // # r e q u i r e d => TRUE, 6 #s t a t e s => array ( 7 v i s i b l e => array ( 8 i n p u t [ name= antwoord. $ i d. ] => 9 array ( v a l u e => $ v a l u e s [ $ c o u n t e r ] ), 10 ), 11 ), 12 ) ; 13 $ c o u n t e r++; Tot slot worden er ook extra vragen gegenereerd, dit zijn vragen die getoond worden wanneer het passende antwoord gegeven wordt bij een hoofdvraag. Drupal s form API heeft een attribuut genaamd states. Deze maakt het mogelijk om de extra vragen te tonen wanneer een bepaald antwoord gegeven wordt. De states attribuut heeft de naam van de radio button groep nodig en de waarde van de radio button. Als de radio button met dezelfde waarde in de juiste groep geselecteerd wordt zal de extra vraag verschijnen.

HOOFDSTUK 2. BESPREKING 14 2.5.2 Database De database bestaat uit vijf tabellen namelijk: ˆ vragen ˆ antwoorden ˆ extra vraag ˆ extra antwoorden ˆ resultaten Figuur 2.7: Database schema De vragen tabel bestaat uit een id en een vraag, dit id is gekoppeld aan de antwoorden tabel. Deze bevat maximum vier antwoorden met zijn waarden. De extra vraag tabel is gelijkaardig aan de vragen tabel met dat verschil dat er een extra id verbonden is met het id van de vragen tabel. Dit is noodzakelijk omdat de extra vraag afhankelijk is van de hoofdvraag. De extra antwoorden tabel blijft hetzelfde als de antwoorden tabel. Als het formulier wordt doorgestuurd zullen alle antwoorden opgeslagen worden in de resultaten tabel. Deze heeft een auto increment id en slaagt de datum, het totale kapitaal en alle antwoorden op. Dit schema verschilt een klein beetje met het originele schema omdat de database wordt aangemaakt met een.install bestand. In Drupal 7 is het niet mogelijk om foreign keys aan

HOOFDSTUK 2. BESPREKING 15 te maken in een.install bestand. Daarom zijn er geen foreign keys als de module geïnstalleerd wordt.

HOOFDSTUK 2. BESPREKING 16 2.5.3 Admin pagina Front-end Figuur 2.8: Admin pagina De admin pagina bestaat uit twee tabs namelijk de default admin pagina en de resultaten pagina. De default admin pagina toont de vier database tabellen. Hier kunnen vragen en antwoorden toegevoegd, aangepast of verwijderd worden. Voor de extra vragen en extra antwoorden is de werking juist hetzelfde. Extra vragen en antwoorden kunnen ook toegevoegd, aangepast en verwijderd worden. Het enige verschil is dat een extra vraag gekoppeld moet worden aan een bestaande hoofdvraag.

HOOFDSTUK 2. BESPREKING 17 Vraag en antwoord toevoegen Figuur 2.9: Vraag en antwoord toevoegen Als er een vraag en zijn antwoorden toegevoegd worden wordt er minstens één vraag en twee antwoorden met hun waarden verwacht. Deze velden zijn required en zijn dus verplicht in te vullen. Antwoord drie en vier en hun waarden zijn optioneel. De textbox voor de waarde verwacht een integer.

HOOFDSTUK 2. BESPREKING 18 Vraag en antwoord aanpassen Figuur 2.10: Vraag en antwoord aanpassen Om een vraag met zijn antwoorden aan te passen moet je een vraag kiezen uit de tabel. Vervolgens wordt er een formulier geladen met de vraag en zijn huidige antwoorden en waarden ingevuld. Hier kan alles aangepast worden, zowel vraag als antwoorden en het is mogelijk om een vraag met twee antwoorden uit te breiden naar drie of vier antwoorden. Vraag en antwoord verwijderen Het is mogelijk om een vraag en zijn antwoorden te verwijderen. De admin kan zoveel vragen selecteren als hij wil, de vragen en bijhorende antwoorden zullen verwijderd worden.

HOOFDSTUK 2. BESPREKING 19 Resultaten Figuur 2.11: Resultaten pagina De resultaten pagina laat alle resultaten van de resultaten tabel in de database zien. Hier kan je de datum, het totale kapitaal en alle geselecteerde antwoorden terugvinden. Het is niet mogelijk om de resultaten aan te passen of te verwijderen via de admin of resultaten pagina.

HOOFDSTUK 2. BESPREKING 20 Back-end Om vragen en antwoorden toe te voegen, aan te passen en te verwijderen maken we gebruik van drie verschillende queries namelijk: ˆ insert ˆ update ˆ delete In de codevoorbeelden 2.5, 2.6 en 2.7 die hieronder terug te vinden zijn zien we bovenaan in commentaar een drupal 6 query. Deze is gelijkaardig aan een gewone PHP query met dat verschil dat in plaats van de PHP functie mysqli query de drupal functie db query gebruikt wordt. Het wordt aangeraden om de db query() functie niet meer te gebruiken in drupal 7 uit veiligheidsoverwegingen. Dit is vooral bij de insert en update queries. In drupal 6 was er de functie db escape string() die apart gebruikt moest worden. In drupal 7 gebeurt dit automatisch wanneer de db insert() en db update() query uitgevoerd worden. Vraag en antwoord toevoegen Listing 2.5: code vraag en antwoord toevoegen 1 /* db q u e r y ( INSERT INTO antwoorden (ANTWOORD 1, ANTWOORD 2, 2 ANTWOORD 3, ANTWOORD 4, 3 WAARDE ANTWOORD 1, WAARDE ANTWOORD 2, 4 WAARDE ANTWOORD 3, WAARDE ANTWOORD 4, ID ) 5 VALUES ( $antwoord1, $antwoord2, $antwoord3, $antwoord4, 6 $waarde antwoord1, $waarde antwoord2, $waarde antwoord3, 7 $waarde antwoord4, $ v o l g e n d e i d ) ) ; */ 8 9 $ i n s e r t a n t w o o r d e n 1 2 3 4 = d b i n s e r t ( antwoorden ) 10 > f i e l d s ( array ( 11 ANTWOORD 1 => $antwoord1, 12 ANTWOORD 2 => $antwoord2, 13 ANTWOORD 3 => $antwoord3, 14 ANTWOORD 4 => $antwoord4, 15 WAARDE ANTWOORD 1 => $waarde antwoord1, 16 WAARDE ANTWOORD 2 => $waarde antwoord2, 17 WAARDE ANTWOORD 3 => $waarde antwoord3, 18 WAARDE ANTWOORD 4 => $waarde antwoord4, 19 ID => $ v o l g e n d e i d, 20 ) ) 21 >e x e c u t e ( ) ; De eerste zeven regels zijn een drupal 6 insert query. Daaronder vind je de drupal 7 insert query terug, deze is identiek aan de drupal 6 query.

HOOFDSTUK 2. BESPREKING 21 Vraag en antwoord aanpassen Listing 2.6: code vraag en antwoord aanpassen 1 /* $ s q l a n t w o o r d e n a a n p a s s e n = db query ( UPDATE antwoorden 2 SET ANTWOORD 1= $ antwoord1, ANTWOORD 2= $ antwoord2, 3 ANTWOORD 3= $ antwoord3, ANTWOORD 4= $ antwoord4, 4 WAARDE ANTWOORD 1= $waarde antwoord1, 5 WAARDE ANTWOORD 2= $waarde antwoord2, 6 WAARDE ANTWOORD 3= $waarde antwoord3, 7 WAARDE ANTWOORD 4= $waarde antwoord4 8 WHERE ID = $ i d ) ; */ 9 10 $ s q l a n t w o o r d e n a a n p a s s e n = db update ( antwoorden ) 11 > f i e l d s ( array ( 12 ANTWOORD 1 => $antwoord1, 13 ANTWOORD 2 => $antwoord2, 14 ANTWOORD 3 => $antwoord3, 15 ANTWOORD 4 => $antwoord4, 16 WAARDE ANTWOORD 1 => $waarde antwoord1, 17 WAARDE ANTWOORD 2 => $waarde antwoord2, 18 WAARDE ANTWOORD 3 => $waarde antwoord3, 19 WAARDE ANTWOORD 4 => $waarde antwoord4, 20 ) ) 21 >c o n d i t i o n ( ID, $id, = ) 22 >e x e c u t e ( ) ; De eerste acht regels zijn een voorbeeld van een drupal 6 update query. Gevolgd door een drupal 7 update query met een voorwaarde. Vraag en antwoord verwijderen Listing 2.7: code vraag en antwoord verwijderen 1 f u n c t i o n u i t v a a r t k o s t e n C a l c u l a t o r a d m i n f o r m v r a a g v e r w i j d e r e n ( $form, &$ f o r m s t a t e ){ 2 $ v r a a g v e r w i j d e r e n a r r = a r r a y f i l t e r ( $ f o r m s t a t e [ v a l u e s ] [ v r a g e n t a b e l ] ) ; 3 foreach ( $ v r a a g v e r w i j d e r e n a r r as $ v a l u e i d ) { 4 // $ s q l d e l e t e = d b query ( DELETE FROM vragen WHERE ID = $ v a l u e i d ) ; 5 $ s q l d e l e t e v r a a g = d b d e l e t e ( vragen ) 6 >c o n d i t i o n ( ID, $ v a l u e i d ) 7 >e x e c u t e ( ) ; 8 $ s q l d e l e t e a n t w o o r d = d b d e l e t e ( antwoorden ) 9 >c o n d i t i o n ( ID, $ v a l u e i d ) 10 >e x e c u t e ( ) ; 11 } 12 } Hierboven zien we een simpele delete query. Hier worden de geselecteerde vragen met bijhorende antwoorden verwijderd.

HOOFDSTUK 2. BESPREKING 22 2.5.4.install bestand Een.install bestand zal ervoor zorgen dat wanneer een module voor de eerste keer geïnstalleerd wordt de nodige database tabellen en velden aangemaakt worden. Dit is de voornaamste reden waarom een.install bestand gebruikt wordt. Het.install bestand wordt net zoals een.info en.module bestand gebruikt. Het wordt ook in dezelfde map geplaatst. Dit wil zeggen dat eerst de naam van de module komt gevolgd door een.install: uitvaartkostencalculator.install. Listing 2.8: installeren van de vragen tabel 1 f u n c t i o n u i t v a a r t k o s t e n C a l c u l a t o r s c h e m a ( ) { 2 $schema [ vragen ] = array ( 3 f i e l d s => array ( 4 ID => array ( 5 type => i n t, 6 u n s i g n e d => TRUE, 7 not n u l l => TRUE, 8 ), 9 VRAAG => array ( 10 type => v a r c h a r, 11 l e n g t h => 500, 12 not n u l l => TRUE, 13 ), 14 ), 15 p r i m a r y key => array ( ID ), 16 ) ; 17 } In codevoorbeeld 2.8 zien we hoe de vragen tabel wordt geïnstalleerd. uitvaartkostencalculator schema() hook. Dit gebeurt in de Elke tabel komt in de $schema array gevolgd door desbetreffende velden, hun type en optionele parameters. Het voordeel van hook schema() is dat deze wordt aangeroepen als de module wordt geïnstalleerd en als deze wordt verwijderd. De module moet niet verwijderd worden uit de drupal folder, het enige dat de admin moet doen is de module uitschakelen (disable) en vervolgens op de uninstall tab klikken. Ten slotte kan je uninstall aanvinken in de uninstall tab en zo worden ook alle tabellen uit de database verwijderd.

HOOFDSTUK 2. BESPREKING 23 2.5.5 Insert default vragen Listing 2.9: installeren default vragen 1 i f ( d b t a b l e e x i s t s ( vragen ) ) { 2 $vragen = array ( 3 array ( ID => 1, 4 VRAAG => Wenst u t e worden begraven o f gecremeerd? ), 5 array ( ID => 2, 6 VRAAG => Wat voor type k i s t wenst u? ), 7 array ( ID => 3, 8 VRAAG => Waar wenst u de r o u w d i e n s t? ), 9 array ( ID => 4, 10 VRAAG => Hoeveel volgwagens wenst u? ), 11 array ( ID => 5, 12 VRAAG => Type consumptie ), 13 array ( ID => 6, 14 VRAAG => Wenst u r o u w b r i e v e n? ), 15 array ( ID => 7, 16 VRAAG => Wenst u b i d p r e n t j e s? ( g e d a c h t e n p r e n t j e s ) ), 17 array ( ID => 8, 18 VRAAG => Heeft u graag een r o u w a d v e r t e n t i e i n de k r a n t? ), 19 array ( ID => 9, 20 VRAAG => Heeft u graag een rouwkrans? ), 21 array ( ID => 10, 22 VRAAG => Wenst u een g r a f s t e e n? ), 23 ) ; 24 $ i n s e r t v r a g e n q u e r y = d b i n s e r t ( vragen ) > f i e l d s ( array ( ID, VRAAG ) ) ; 25 foreach ( $vragen as $vraag ) { 26 $ i n s e r t v r a g e n q u e r y >v a l u e s ( $vraag ) ; 27 } 28 $ i n s e r t v r a g e n q u e r y >e x e c u t e ( ) ; 29 } 30 e l s e d r u p a l s e t m e s s a g e ( 31 Vragen t a b e l b e s t a a t n i e t, i n s t a l l e e r de module opnieuw., 32 e r r o r ) ; Onderaan de admin pagina kan je de insert default vragen button terugvinden. Deze actie zal alle vragen, extra vragen met hun antwoorden en extra antwoorden in de database plaatsen. Om alle vragen en antwoorden te verwijderen moet de module verwijderd worden. Het is niet mogelijk om bestaande vragen te overschrijven. Tevens is er een controle of de database tabellen zijn geïnstalleerd in de database. Is dit niet het geval dan wordt er een error weergegeven die aanraadt om de module opnieuw te intstalleren.

HOOFDSTUK 2. BESPREKING 24 2.5.6 Hoe de uitvaartkosten calculator module gebruiken Stap 1 Als u de module voor een nieuwe site wil gebruiken: Plaats de uitvaartkostencalculator folder in sites/all/modules/custom folder. Het wordt aangeraden om een custom folder zelf aan te maken om custom modules in te plaatsen. Stap 2 De administrator moet ingelogd zijn op zijn site. Dit kun je doen via http://localhost/vergelijkdirect/user/login of uwsite.be/user/login. Als u bent ingelogd krijgt u bovenaan de pagina een navigatiebalk te zien, kies hier voor modules. Vervolgens krijg je een lijst met alle modules. Onderaan de pagina onder verzekeringen zou de uitvaartkosten calculator module zichtbaar moeten zijn. Natuurlijk moet deze module enabled worden. Stap 3 Als de module enabled is zouden de database tabellen al geïnstalleerd moeten zijn. Alsook zou er naast de module een Help en Configure link zichtbaar moeten zijn. De configure link leidt naar de admin pagina waar u kunt starten. Stap 4 Als u de uitvaartkosten vragen en antwoorden wilt toevoegen kan u onderaan de pagina op insert default vragen klikken. Wilt u opnieuw beginnen dan kan u bovenaan beginnen met vragen en extra vragen en antwoorden toe te voegen.

Hoofdstuk3 Resultaten Het was de bedoeling om een custom module te maken die ook voor andere verzekeringen gebruikt kan worden. De basis hiervoor is gelegd, maar er moeten nog aanpassingen gebeuren om de module te gebruiken voor een andere verzekering. Eerst moet de module naam verandert worden, als deze wordt verandert moet ook de.info en.module bestanden aangepast worden. Dit wil zeggen dat ook de hooks aangepast moeten worden, dit kan eenvoudig gedaan worden met een goede IDE 1. Deze hebben een goede zoekfunctie waarmee je alle namen kan veranderen door namen die gekozen wordt voor de nieuwe module. Tot slot kan de database nog aangepast worden om niet alleen op id s te vertrouwen. Een mogelijkheid hiervoor is om een extra rij toe te voegen met vraagnummer. 1 http://en.wikipedia.org/wiki/integrated development environment 25