, en . 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 , en
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
2.3 2.3.1
6
Website design 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
2.3.2
7
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
2.4
8
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 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
/* * * I m p l e m e n t a t i e hook menu */ function uitvaartkostenCalculator menu () { $items = array ( ) ; $items [ ’ 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 ( ’ 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 ’ , ’ page c a l l b a c k ’ => ’ d r u p a l g e t f o r m ’ , ’ page a r g u m e n t s ’ => a r r a y ( ’ 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 ’ ) , ’ a c c e s s c a l l b a c k ’ => TRUE ); $ 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 ’ ] = a r r a y ( ’ t i t l e ’ => ’ C a l c u l a t o r admin p a g i n a ’ , ’ d e s c r i p t i o n ’ => ’ C o n f i g u r a t i e v o o r 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 ’ , ’ page c a l l b a c k ’ => ’ d r u p a l g e t f o r m ’ , ’ page a r g u m e n t s ’ => a r r a y ( ’ 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 ’ ) , ’ a c c e s s a r g u m e n t s ’ => a r r a y ( ’ 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 ’ ) , ’ t y p e ’ => MENU NORMAL ITEM, ); return $items ;
}
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
2.5
10
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 2 3 4 5 6 7 8 9 10 11
$ form = a r r a y ( ) ; $ v r a g e n = d b q u e r y ( ”SELECT * FROM v r a g e n o r d e r by ID ” ) ;
w h i l e ( $ row = $ v r a g e n −>f e t c h A s s o c ( ) ) { $ i d = $ row [ ” ID ” ] ; $ form [ ’ f i e l d s e t ’ . $ i d ] = a r r a y ( ’#t y p e ’ => ’ f i e l d s e t ’ , ’# t i t l e ’ => ’ Vraag ’ . $ i d , ’#c o l l a p s i b l e ’ => TRUE, ’#c o l l a p s e d ’ => FALSE , );
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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
$ a n t w o o r d e n = d b q u e r y ( ”SELECT * FROM a n t w o o r d e n WHERE ID = ’ $ i d ’ ” ) ; w h i l e ( $ row2 = $ antwoorden −>f e t c h A s s o c ( ) ) { $ o p t i o n s = a r r a y f i l t e r ( a r r a y ( $ row2 [ ”ANTWOORD 1” ] , $ row2 [ ”ANTWOORD 2” ] , $ row2 [ ”ANTWOORD 3” ] , $ row2 [ ”ANTWOORD 4” ] ) ) ; // f i l t e r ” ” , 0 , n u l l $ v a l u e s = a r r a y d i f f ( a r r a y ( $ row2 [ ”WAARDE ANTWOORD 1” ] , $ row2 [ ”WAARDE ANTWOORD 2” ] , $ row2 [ ”WAARDE ANTWOORD 3” ] , $ row2 [ ”WAARDE ANTWOORD 4” ] ) , a r r a y ( ’ ’ ) ) ; // f i l t e r n u l l $values options = array combine ( $values , $options ) ; $ form [ ’ f i e l d s e t ’ . $ i d ] [ ’ a n t w o o r d ’ . $ i d ] = a r r a y ( ’#t y p e ’ => ’ r a d i o s ’ , ’# t i t l e ’ => $ row [ ”VRAAG” ] , ’#o p t i o n s ’ => $ v a l u e s o p t i o n s , ’#r e q u i r e d ’ => TRUE, );
}
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 ´e´en 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¨eren 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 http://php.net/manual/en/function.array-diff.php 6 http://php.net/manual/en/function.array-combine.php 5
HOOFDSTUK 2. BESPREKING
13
Listing 2.4: vragenlijst extra vragen 1 2 3 4 5 6 7 8 9 10 11 12 13
$ form [ ’ f i e l d s e t ’ . $ i d ] [ ’ a n t w o o r d ’ . $ i d . ’− ’ . $ e x t r a i d ] = a r r a y ( ’#t y p e ’ => ’ r a d i o s ’ , ’# t i t l e ’ => $ row3 [ ”EXTRA VRAAG” ] , ’#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 , // ’# r e q u i r e d ’ => TRUE, ’#s t a t e s ’ => a r r a y ( ’ v i s i b l e ’ => a r r a y ( ’ i n p u t [ name=”a n t w o o r d ’ . $ i d . ’ ” ] ’ => a r r a y ( ’ v a l u e ’ => $ v a l u e s [ $ c o u n t e r ] ) , ), ), ); $ 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
2.5.2
14
Database
Figuur 2.7: Database schema De database bestaat uit vijf tabellen namelijk: vragen antwoorden extra vraag extra antwoorden resultaten
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
2.5.3
16
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 ´e´en 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 / * d b q u e r y ( ” INSERT INTO a n t w o o r d e n (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 ( ’ $ a n t w o o r d 1 ’ , ’ $ a n t w o o r d 2 ’ , ’ $ a n t w o o r d 3 ’ , ’ $ a n t w o o r d 4 ’ , 6 ’ $waarde antwoord1 ’ , ’ $waarde antwoord2 ’ , ’ $waarde antwoord3 ’ , 7 ’ $ w a a r d e a n t w o o r d 4 ’ , ’ $ 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 ( a r r a y ( 11 ’ANTWOORD 1 ’ => $ antwoord1 , 12 ’ANTWOORD 2 ’ => $ antwoord2 , 13 ’ANTWOORD 3 ’ => $ antwoord3 , 14 ’ANTWOORD 4 ’ => $ antwoord4 , 15 ’WAARDE ANTWOORD 1 ’ => $ w a a r d e a n t w o o r d 1 , 16 ’WAARDE ANTWOORD 2 ’ => $ w a a r d e a n t w o o r d 2 , 17 ’WAARDE ANTWOORD 3 ’ => $ w a a r d e a n t w o o r d 3 , 18 ’WAARDE ANTWOORD 4 ’ => $ w a a r d e a n t w o o r d 4 , 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 = d b q u e r y ( ”UPDATE a n t w o o r d e n 2 SET ANTWOORD 1=’ $ a n t w o o r d 1 ’ , ANTWOORD 2=’ $ a n t w o o r d 2 ’ , 3 ANTWOORD 3=’ $ a n t w o o r d 3 ’ , ANTWOORD 4=’ $ a n t w o o r d 4 ’ , 4 WAARDE ANTWOORD 1=’ $ w a a r d e a n t w o o r d 1 ’ , 5 WAARDE ANTWOORD 2=’ $ w a a r d e a n t w o o r d 2 ’ , 6 WAARDE ANTWOORD 3=’ $ w a a r d e a n t w o o r d 3 ’ , 7 WAARDE ANTWOORD 4=’ $ w a a r d e a n t w o o r d 4 ’ 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 ( a r r a y ( 12 ’ANTWOORD 1 ’ => $ antwoord1 , 13 ’ANTWOORD 2 ’ => $ antwoord2 , 14 ’ANTWOORD 3 ’ => $ antwoord3 , 15 ’ANTWOORD 4 ’ => $ antwoord4 , 16 ’WAARDE ANTWOORD 1 ’ => $ w a a r d e a n t w o o r d 1 , 17 ’WAARDE ANTWOORD 2 ’ => $ w a a r d e a n t w o o r d 2 , 18 ’WAARDE ANTWOORD 3 ’ => $ w a a r d e a n t w o o r d 3 , 19 ’WAARDE ANTWOORD 4 ’ => $ w a a r d e a n t w o o r d 4 , 20 )) 21 −>c o n d i t i o n ( ’ ID ’ , $ i d , ’= ’ ) 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 2 3 4 5 6 7 8 9 10 11 12
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 ) { $vraag verwijderen arr = array filter ( $form state [ ’ values ’ ] [ ’ vragen tabel ’ ] ) ; 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 ) { // $ s q l d e l e t e = d b q u e r y ( ”DELETE FROM v r a g e n WHERE ID = ’ $ v a l u e i d ’ ” ) ; $ s q l d e l e t e v r a a g = db delete ( ’ vragen ’ ) −>c o n d i t i o n ( ’ ID ’ , $ v a l u e i d ) −>e x e c u t e ( ) ; $ 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 ’ ) −>c o n d i t i o n ( ’ ID ’ , $ v a l u e i d ) −>e x e c u t e ( ) ; } }
Hierboven zien we een simpele delete query. Hier worden de geselecteerde vragen met bijhorende antwoorden verwijderd.
HOOFDSTUK 2. BESPREKING
2.5.4
22
.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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
function uitvaartkostenCalculator schema () { $ schema [ ’ v r a g e n ’ ] = a r r a y ( ’ f i e l d s ’ => a r r a y ( ’ ID ’ => a r r a y ( ’ t y p e ’ => ’ i n t ’ , ’ u n s i g n e d ’ => TRUE, ’ n o t n u l l ’ => TRUE, ), ’VRAAG ’ => a r r a y ( ’ t y p e ’ => ’ v a r c h a r ’ , ’ l e n g t h ’ => 5 0 0 , ’ n o t n u l l ’ => TRUE, ), ), ’ p r i m a r y k e y ’ => a r r a y ( ’ ID ’ ) , ); }
In codevoorbeeld 2.8 zien we hoe de vragen tabel wordt ge¨ınstalleerd. Dit gebeurt in de uitvaartkostenCalculator schema() hook. 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
2.5.5
23
Insert default vragen Listing 2.9: installeren default vragen
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
i f ( d b t a b l e e x i s t s (” vragen ” )) { $vragen = array ( a r r a y ( ’ ID ’ => 1 , ’VRAAG ’ => ’ Wenst u t e worden b e g r a v e n o f g e c r e m e e r d ? ’ ) , a r r a y ( ’ ID ’ => 2 , ’VRAAG ’ => ’ Wat v o o r t y p e k i s t w e n s t u ? ’ ) , a r r a y ( ’ ID ’ => 3 , ’VRAAG ’ => ’ Waar w e n s t u de r o u w d i e n s t ? ’ ) , a r r a y ( ’ ID ’ => 4 , ’VRAAG ’ => ’ H o e v e e l v o l g w a g e n s w e n s t u ? ’ ) , a r r a y ( ’ ID ’ => 5 , ’VRAAG ’ => ’ Type c o n s u m p t i e ’ ) , a r r a y ( ’ ID ’ => 6 , ’VRAAG ’ => ’ Wenst u r o u w b r i e v e n ? ’ ) , a r r a y ( ’ ID ’ => 7 , ’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 ) ’ ) , a r r a y ( ’ ID ’ => 8 , ’VRAAG ’ => ’ H e e f t u g r a a g een r o u w a d v e r t e n t i e i n de k r a n t ? ’ ) , a r r a y ( ’ ID ’ => 9 , ’VRAAG ’ => ’ H e e f t u g r a a g een r o u w k r a n s ? ’ ) , a r r a y ( ’ ID ’ => 1 0 , ’VRAAG ’ => ’ Wenst u een g r a f s t e e n ? ’ ) , ); $ 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 ( ’ v r a g e n ’)−> f i e l d s ( a r r a y ( ’ ID ’ , ’VRAAG ’ ) ) ; foreach ( $vragen as $vraag ) { $ i n s e r t v r a g e n q u e r y −>v a l u e s ( $ v r a a g ) ; } $ i n s e r t v r a g e n q u e r y −>e x e c u t e ( ) ; } else drupal set message ( ’ 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 . ’ , ’ error ’ );
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
2.5.6
24
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.
Hoofdstuk
3
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 IDE1 . 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
Hoofdstuk
4
Besluit De uitvaartkosten calculator module zal vooral gebruikt worden om de uitvaartkosten te berekenen. De module kan ook aangepast worden zodat deze gebruikt kan worden voor andere verzekeringen. Met drupal 7 kan je knappe sites maken zonder echt veel te programmeren. Dit is een voordeel als het vooral draait om het design van de site. Helaas ben ik ook heel wat beperkingen tegengekomen, vooral met het programmeren van de module en het installeren van de database. Zoals in de .install file kan je een primary key aanduiden maar geen foreign key. Dit vindt ik teleurstellend. Tevens is de documentatie voor bepaalde onderwerpen zeer uitgebreid en duidelijk en over andere onderwerpen is zeer weinig terug te vinden. Sommige documentatie is ook te veel gekoppeld aan drupal 6.
26
Bijlage
A
Appendix
27
Bijlage
B
Opmerkingen bij scripties
28
Bibliografie
[1] John Albin. Zen. https://www.drupal.org/project/zen. [Online; laatst bezocht 10-Juni2015]. [2] Drupal community. Form API Reference. https://api.drupal.org/api/drupal/developer! topics!forms api reference.html/7. [Online; laatst bezocht 10-Juni-2015]. [3] Drupal community. Database API. https://www.drupal.org/developing/api/database, 2008. [Online; laatst bezocht 10-Juni-2015]. [4] Todd Tomlinson en John K. VanDyk. Pro Drupal 7 Development. Apress, 2010. [5] Christopher M. Eppstein. Getting started with Compass. http://compass-style.org/help/. [Online; laatst bezocht 10-Juni-2015]. [6] Chris Eppstein Hampton Catlin, Natalie Weizenbaum and numerous contributors. Sass Basics. http://sass-lang.com/guide. [Online; laatst bezocht 10-Juni-2015]. [7] Matt Farina Larry Garfield Ken Rickard John Albin Wilkins Matt Butcher, Greg Dunlap. Drupal 7 Module Development. packt, 2010. [8] David Mercer. Drupal 7. packt, 2010.
29