Drupal 7 Vervolmaking - Beta Vzw

Transcription

Drupal 7 vervolmakingβeta VZW(versie 2016.7.51-beta)Dit werk is gelicenseerd onder de licentie Creative Commons Naamsvermelding-GelijkDelen 4.0Internationaal. Ga naar http://creativecommons.org/licenses/by-sa/4.0/ om een kopie van de licentiete kunnen lezen.

InhoudHoofdstuk 1. Drupal beheertools . 51. Inleiding . 52. Drush . 53. Drupal Installeren via Drush . 64. Modules beheren via Drush . 75. Update van modules en van Drupal core via Drush. 96. Password management via Drush . 117. Drush clear cache . 11Hoofdstuk 2. Eigen modules schrijven . 121. Vooraf: het hook-systeem . 122. Afhandeling van een request . 122. A. De bootstrap fase . 132. B. menu execute active handler() . 153. De structuur van een Drupal module . 16Hoofdstuk 3. Werken met menu’s en hooks . 20Hoofdstuk 4. De data abstraction laag . 251. Inleiding . 252. De query builder . 263. DBTNG (DB: The Next Generation) . 274. De schema API . 284. A. Tekstvelden . 284. B. Numerieke velden . 294. C. Andere velden. 305. Databank upgrades . 316. Hook uninstall . 31Hoofdstuk 5. De render array . 32Hoofdstuk 6. De Form API . 371. Inleiding . 372. Een bestaande form aanpassen . 393. Form API elementen. 413. A. Tekstvelden . 413. B. Paswoordvelden . 423. C. Tekstveld over meerdere lijnen . 423. D. Selectveld . 42

3. E. Radiobuttons. 433. F. Checkboxen . 433. G. Value. 443. H. Hidden . 443. I. Date. 443. J. Weight . 443. K. File upload . 453. L. Fieldset . 453. M. Submit . 453. N. Button. 453. O. Image Button . 463. P. Markup. 464. Form API properties . 46Hoofdstuk 7. Drupal theming. 481. Inleiding . 482. Structuur van een theme . 483. Template bestanden . 514. Theme functies . 535. Registratie van functies en templates . 546. Preprocess functies . 567. Theme hook suggesties . 578. Een theme afgeleid van Bootstrap . 588. A. Inleiding . 588. B. Starterkit . 598. C. Instellingen voor het eigen bootstrap theme. 608. D. Eigen template bestanden . 618. E. Preprocess functies gebruiken voor aanpassingen . 62Hoofdstuk 8. Uitwisseling van configuratie en data . 641. Een beetje achtergrond . 642. De features module . 643. De feeds module . 69Hoofdstuk 9. Caching . 741. Inleiding . 742. Caching in Drupal core . 752. A. Menu . 76

2. B. Gefilterde tekst . 762. C. Variabelen en module-instellingen . 762. D. Blocks. 77Hoofdstuk 10. Installation profiles . 78Hoofdstuk 11. Meertalige Drupalsite . 811. Inleiding . 812. Een bijkomende taal installeren en selecteren . 823. Vertalen van de inhoud . 854. De internationalization module (i18n) . 86Hoofdstuk 12. Webservices . 871. Inleiding . 872. Webservices/api . 873. De services module . 894. Ophalen van een node . 915. Session Authentication . 926. Services definitie . 94Hoofdstuk 13. Veilige code . 961. Tekst . 962. Databank input . 973. Bestanden. 98Bibliografie . 99

Drupal 7 GevorderdHoofdstuk 1. Drupal beheertools1. InleidingIn de inleidende cursus hebben we gezien hoe we Drupal kunnen beheren via dewebinterface. Die grafische interface maakt het gemakkelijk om Drupal te beheren voormensen die minder ervaring hebben in het werken met Drupal. De interface is erop gerichtom het beheer van de website zo gemakkelijk mogelijk te maken. Het gebruik ervan isechter niet zo efficiënt. Iedereen die al eens een module met dependencies heeft proberente installeren zal dat beamen: je installeert een module, probeert ze te activeren (enable),merkt dat dit niet lukt, ziet dat de module afhankelijk is van een andere module, downloaddie module en wanneer je geluk hebt, is die module niet afhankelijk van een andere module.Anders kun je nog een module downloaden. Het is ook bijvoorbeeld niet mogelijk om Drupalcore te updaten via de webinterface. Kortom, wanneer men een tijdje met Drupal bezig is,merkt men dat beheer via de webinterface beperkingen heeft. Daarom is er ook eenmogelijkheid om Drupal te beheren via de command prompt. Deze methode is meestalminder populair bij beginnende Drupal beheerders, maar eenmaal dat men de kracht vaneen command prompt omgeving heeft ervaren, is men meestal wel overtuigd van devoordelen.Tegenwoordig zijn er twee CLI (Command line Interface) beheertools voor Drupal:1. Drush of de DRUpal SHell: de oudste beheertool die zowel voor Drupal 7 als voorDrupal 8 kan gebruikt worden2. Drupal Console: de nieuwere beheertool die alleen voor Drupal 8 kan gebruiktworden.Omdat deze tekst over Drupal 7 gaat, zullen we in dit hoofdstuk voornamelijkDrush behandelen.2. DrushDe installatieprocudure van drush wordt beschreven op de installatiepagina van Drush.Windows gebruikers hebben het hier wat moeilijker dan Linux/OSX gebruikers. Zij hebbenéén of andere Linux shell nodig. Onder WIndows 10 is men bezig met een Ubuntu shell teintegreren in WIndows.Eénmaal dat men Drush heeft geïnstalleerd kan men beginnen met Drush te gebruiken Heteenvoudigste commando is waarschijnlijk het opvragen van de versie:# drush versionDrush Version : 8.1.3βeta VZW (www.betavzw.org)Pagina 5

Drupal 7 GevorderdHet volgende commando geeft je wat meer informatie over de drush installatie:# drush statusPHP executable : php.exePHP configuration : C:\xampp5.6.21\php\php.iniPHP OS : WINNTDrush script : rush version : 8.1.2Drush temp directory : C:\Users\\AppData\Local\TempDrush configuration :Drush alias files : C:\Users/.drush/pantheon.aliases.drushrc.phpMaar de echte kracht van Drush komt pas naar voor wanneer we een drupal installatiebeheren.3. Drupal Installeren via DrushDe klassieke manier om Drupal te installeren is:1. download het installatiebestand en pak het uit2. maak de databank aan (in Drupal 7)3. Surf naar het install.php bestandWe kunnen al deze stappen ook uitvoeren via drush. Om drupal te downloaden kunnen wehet pm-download commando gebruiken.De afgekorte versie van dit commando is dl.Standaard worden de Drupal bestanden uitgepakt in een subdirectory "/drupal". Via deoptie --drupal-project-rename kunnen we een andere directory meegeven:# drush dl drupal-7 --drupal-project-rename drupaldrushThe directory drupaldrush does not exist.Would you like to create it? (y/n): yProject drupal \(7.50\) downloaded ct drupal contains:[success]- 3 profiles: testing, standard, minimal- 4 themes: stark, seven, garland, bartik- 47 modules: drupal system listing incompatible test,drupal system listing compatible test, user, update, trigger,translation, tracker, toolbar, taxonomy, system, syslog, statistics,simpletest, shortcut, search, rdf, profile, poll, php, path, overlay,openid, node, menu, locale, image, help, forum, filter, file,field ui, text, options, number, list, field sql storage, field,dblog, dashboard, contextual, contact, comment, color, book, blog,block, aggregatorAangezien de directory nog niet bestaat, wordt er gevraagd of die gemaakt moet worden.Vervolgens wordt het drupal-7 bestand gedownload en uitgepakt in die directory. Doordrupal-7 te downloaden, zorgen we ervoor dat we de laatste stabiele versie van de 7-releasedownloaden. Door drupal-7.x te kiezen zouden we de allerlaatste versie downloaden. Dat ismeestal een development versie.βeta VZW (www.betavzw.org)Pagina 6

Drupal 7 GevorderdWanneer we met Drush werken is het belangrijk om te beseffen dat Drush moet weten metwelke Drupal installatie er moet gewerkt worden. Daarom moeten de meeste Drushcommando's worden uitgevoerd in een Drupal directory. Het downloaden van een Drupalversie (of van een module/theme/profile) is daarop een uitzondering.Maar aangezien we vanaf nu Drush commando's willen uitvoeren op de gedownloadeDrupal installatie, moeten we vanaf nu in een Drupal directory staan. Wanneer dat niet hetgeval is, krijgen we een foutmelding:# drush siCommand site-install needs a higher bootstrap level to run - you willneed to invoke drush from a more functional Drupal environment to runthis command.The drush command 'si' could not be executed.[error][error]Het volgende commando dat we zullen uitvoeren (in de Drupal directory) is het site-installcommando:# drush si standard install configure form.site default country BEinstall configure form.date default timezone Europe/Brussels --account-mail admin@local.loc -account-pass admin --db-url mysql://root:root@localhost/drupaldrush --sitemail admin@local.loc --site-name ”Drupal Drush”You are about to create a ttings.php fileand CREATE the 'drupaldrush' database. Do you want to continue? (y/n): yStarting Drupal installation. This takes a while. Consider using the --notify [ok] globaloption. Installation complete. User name: admin User password: admin [ok]Met behulp van de opties kunnen we extra waarden meegeven die gebruikt worden tijdensde installatie: --account-name is de naam van user1 (standaard is dit "admin" vandaar dat de optieniet is meegegeven)--account-mail is het e-mail adres van user1--account-pass is het paswoord van user1--site-mail is het system e-mail adres--db-url is de connectiestring voor de databank. Tussen http:// en de naam van dedatabank server vullen we de gebruikersnaam en het paswoord in. Wanneer we eenaccountnaam meegeven die het recht heeft om databanken aan te maken zal Drushde databank voor ons aanmaken. Wanneer de databank al bestand, zal ze eerstleeggemaakt worden.Aangezien er tijdens de isntallatieprocedure geen vragen meer moeten worden gesteld, zaleen installatie van Drupal nu veel sneller kunnen verlopen dan via de webinterface.4. Modules beheren via DrushEén van de vervelende taken bij het beheer van een Drupal is het installeren van modulesvia de webinterface. Via Drush kunnen we die installaties veel gestroomlijnder latenverlopen.Als voorbeeld zullen we de views-module downloaden en views ui activeren. Omde contributed modules te scheiden van de eigen modules kiezen sommige beheerderservoor om een aparte directory "contrib" te maken in sites/all/modules. Wanneer dieβeta VZW (www.betavzw.org)Pagina 7

Drupal 7 Gevorderddirectory bestaat, zal Drush die directory gebruiken om de contributed modules in tedownloaden:# drush dl viewsProject views (7.x-3.14) downloaded les/contrib/views.Project views contains 2 modules: views, views ui.[success]We krijgen na het downloaden meteen informatie over de inhoud van de views module.Zoals we al wisten bestaat die uit twee submodules, namelijk views en views ui. Om deviews ui module te activeren (enable), zal de views module ook geactiveerd moeten zijn.Maar de views module is ook nog afhankelijkvan ctools. Wanneer we views ui activeren zalautomatisch views worden geactiveerd. En omdat views de module ctools nodig heeft, zalctools worden gedownload en geactiveerd worden. Voor het activeren en eventueeldownloaden van de extra modules zal Drush toestemming vragen. We kunnen onsantwoord (yes) automatisch meegeven via de schakeloptie "-y":# drush en views ui -yThe following projects have unmet dependencies:[ok]views ui requires ctoolsWould you like to download them? (y/n): yProject ctools (7.x-1.10) downloaded /all/modules/contrib/ctools.Project ctools contains 10 modules: views content, term depth, stylizer, page manager,ctools plugin example, ctools custom content, ctools ajax sample, ctools access ruleset,bulk export, ctools.The following extensions will be enabled: views ui, ctools, viewsDo you really want to continue? (y/n): yctools was enabled successfully.[ok]ctools defines the following permissions: use ctools importviews ui was enabled successfully.[ok]views was enabled successfully.[ok]views defines the following permissions: administer views, access all viewsHet en commando is de afkorting voor pm-enable. "PM" staat hier voor project manager enis het onderdeel van Drush dat Drupal projecten (of modules en themes) beheert. inprincipe moeten we de module zelfs niet eerst downloaden. We kunnenmeteen het enablecmmando gebruiken, maar alleen op voorwaarde dat de naam van de module hetzelfde isals de naam van het project. In ons voorbeeld zou drush en views meteen ook viewsdownloaden. Maar drush en views ui zou niet werken omdat drush niet weet dat viewsmoet worden gedownload om views ui te kunnen enablen.Een module deactiveren(disable) in Drupal 7 is voor sommige gebruikers verwarrend. Erkunnen immers twee stappen worden gezet:1. disable de module: de module kan niet meer gebruikt worden, maar de data van demodule blijven aanwezig in de databank2. uninstall de module: de data van de module worden verwijderd uit de databank(maar de bestanden blijven staan in de modules directory)In Drupal 8 bestaat alleen nog de uninstall, maar omdat we hier met Drupal 7 werken,moeten we ook in Drush beide stappen uitvoeren. Stel dat we op een productwebsite deviews uit module willen verwijderen (uninstall):βeta VZW (www.betavzw.org)Pagina 8

Drupal 7 Gevorderd# drush dis views ui -yThe following extensions will be disabled: views uiDo you really want to continue? (y/n\): yviews ui was disabled successfully.[ok]drush pmu views ui -yThe following modules will be uninstalled: views uiDo you really want to continue? (y/n\): yviews\ ui was successfully uninstalled.[ok]Het commando dis is de afkorting van pm-disable en pmu is de afkorting van pm-uninstall.5. Update van modules en van Drupal core via DrushDe update van een module via de webinterface is niet zo ingewikkeld, maar ze bestaat inprincipe wel uit twee stappen:1. het installeren van de nieuwe bestanden2. het (eventueel) aanpassen van de gegevens in de databank (via upate.php)In Drush bestaan deze twee afzonderlijke stappen ook. Ze worden uitgevoerd via,respectievelijk, pm-updatecode(upc) en updatedb (geen pm-commando). Maar via pmupdate (up) kunnen we beide stappen tezamen uitvoeren. Om hier een voorbeeld van tezien, zullen we een oude versie van de devel module downloaden en activeren:# drush dl devel-7.x-1.4Project devel (7.x-1.4) downloaded /all/modules/contrib/devel.Project devel contains 3 modules: devel generate, devel, devel node access.Jef@PCBETA c:\xampp5.6.21\htdocs\drupaldrush# drush en devel -yThe following extensions will be enabled: develDo you really want to continue? (y/n): ydevel was enabled successfully.[ok]devel defines the following permissions: access devel information, execute php code, switchusersOmdat we niet de laatste versie van de devel module wilden downloaden, moeten we hetspecifieke versienummer meegeven (devel-7.x-1.4). Net zoals in de webinterface kunnen weopvragen welke modules geüpdate moeten worden:# drush upsChecking available update data .Checking available update data for Drupal.Checking available update data for Chaos tools (ctools).Checking available update data for Devel (devel).Checking available update data for Views (views).Name Installed Version Proposed version MessageDevel (devel) 7.x-1.4 7.x-1.5 Update available[ok][ok][ok][ok][ok]Nu we weten welke modules er geüpdate kunnen worden, kunnen we die update uitvoeren:# drush up -yUpdate information last refreshed: Thu, 09/22/2016 - 10:07Name Installed Version Proposed version MessageDevel (devel) 7.x-1.4 7.x-1.5 Update availableCode updates will be made to the following projects: Devel [devel-7.x-1.5]Note: A backup of your project will be stored to backups directory if it is not managed by asupported version control system.βeta VZW (www.betavzw.org)Pagina 9

Drupal 7 GevorderdNote: If you have made any modifications to any file that belongs to one of these projects,you will have to migrate those modifications after updating.Do you really want to continue with the update process? (y/n): yProject devel was updated successfully. Installed version is now 7.x-1.5.Backups were saved into the 160922114418/modules/devel.4 byte UTF-8 for mysql is disabled. See the documentation on adding 4 byte UTF-8[warning]support for more information. (Currently using Database 4 byte UTF-8 supportDisabled)No database updates required[success]Wanneer we een update uitvoeren via Drush, krijgen we er ook nog een automatischbackup. Maar deze backup bevat natuurlijk alleen de bestanden, niet de databank.Drupal core updaten kan ook via Drush. Dat is niet mogelijk via de webinterface. En het is infeite even gemakkelijk als het updaten van een module. Stel dat we een oudere versie vanDrupal hebben:# drush upsChecking available update data .Checking available update data for Drupal.NameInstalled VersionProposed versionDrupal7.447.50[ok][ok]MessageUpdate availableWanneer we nu een update uitvoeren van Drupal, zien we trouwens dat er ook databaseupdates gebeuren bij de overgang van versie 7.44 naar versie 7.50:# drush up -yUpdate information last refreshed: Thu, 09/22/2016 - 10:07Name Installed Version Proposed version MessageDrupal 7.44 7.50 Update availableCode updates will be made to drupal core.WARNING: Updating core will discard any modifications made to Drupal core files, mostnoteworthy among these are .htaccess and robots.txt. If you have made any modifications tothese files, please back them up before updating so that you can re-create your modificationsin the updated version of the file.Note: Updating core can potentially break your site. It is NOT recommended to updateproduction sites without prior testing.Do you really want to continue? (y/n): yProject drupal was updated successfully. Installed version is now 7.50.Backups were saved into the 160922121035/drupal.4 byte UTF-8 for mysql is disabled. See the documentation on adding 4 byte UTF-8[warning]support for more information. (Currently using Database 4 byte UTF-8 supportDisabled)Field 7004 Grant the new "administer fields" permission to trusted users.Node 7016 Change {history}.nid to an unsigned int in order to match {node}.nid.User 7019 Ensure there is a combined index on {authmap}.uid and {authmap}.module.Do you wish to run all pending updates? (y/n): y4 byte UTF-8 for mysql is disabled. See the documentation on adding 4 byte UTF-8[warning]support for more information. (Currently using Database 4 byte UTF-8 supportDisabled)Performed update: user update 7019[ok]Performed update: node update 7016[ok]Performed update: field update 7004[ok]'all' cache was cleared.[success]Finished performing updates.[ok]βeta VZW (www.betavzw.org)Pagina 10

Drupal 7 Gevorderd6. Password management via DrushGebruiikers vergeten regelmatig hun paswoord en net zoals de meeste websites heeft ookeen Drupal website hier een oplossing voor, namelijk een e-mail met een link naar eenpagina waar de gebruiker zijn of haar paswoord kan wijzigen. Dit geldt ook voor de adminuser van een Drupal website. Maar dit is echter niet altijd een optie. Stel dat we een lokaletest- of development site hebben opgezet. Dan is er niet altijd een mailserver voor handenom de e-mail te versturen, laat staan dat een lokale mailserver mails kan versturen naar deofficiële mailserver van het bedrijf.Via Drush kunnen we het paswoord echter ook opnieuw instellen. Het commando is relatiefeenvoudig. We moeten de naam van de gebruiker meegeven en via de --password -optiehet nieuwe paswoord:# drush upwd admin --password adminChanged password for admin[success]7. Drush clear cacheWe eindigen met één van de meest gebruikte drush commando's op een Drupal site,namelijk het commando om de cache leeg te maken. We moeten hier een onderscheidmaken tussen een Drupal 7 en een Drupal 8 website. Op Drupal 7 is het commando:# drush cc all'all' cache was cleared.[success]Het commando cc is de afkorting voor clear-cache. De all duidt op het feit dat we alle cacheswillen leegmaken. Wanneer we een idee hebben welke specifieke cache we willenleegmaken, hebben we de keuze:# drush ccEnter a number to choose which cache to clear.[0] : Cancel[1] : drush[2] : all[3] : theme-registry[4] : menu[5] : css-js[6] : block[7] : module-list[8] : theme-list[9] : registry0Cancelled.[cancel]In Drupal 8 is het clear cache commando vervangen door cache-rebuild (drush cr)βeta VZW (www.betavzw.org)Pagina 11

Drupal 7 GevorderdHoofdstuk 2. Eigen modules schrijven1. Vooraf: het hook-systeemDrupal is een Content Management Framework. Dat wil zeggen dat de architectuur eropvoorzien is dat het systeem wordt uitgebreid met behulp van modules. In dit hoofdstukbekijken we hoe we zelf modules kunnen schrijven. En daarom is het belangrijk dat webekijken hoe modules zich kunnen "inhaken" in Drupal als een Content ManagementFramework.Drupal gebruikt hiervoor een special systeem: het hook-systeem. Elke aanvraag dieafgehandeld wordt door Drupal doorloopt verschillende stappen. Tijdens de meeste van diestappen controleert Drupal of er modules zijn die willen ingrijpen in die stap. Dat ingrijpenzal gebeuren door extra code uit te voere

1. Drush of de DRUpal SHell: de oudste beheertool die zowel voor Drupal 7 als voor Drupal 8 kan gebruikt worden 2. Drupal Console: de nieuwere beheertool die alleen voor Drupal 8 kan gebruikt worden. Omdat deze tekst over Drupal 7 gaat, zullen we in dit hoofdstuk voornamelijk Drush behandelen. 2. Drush