Introductie Drupal development

download Introductie Drupal development

If you can't read please download the document

Transcript of Introductie Drupal development

Introductie Drupal

Introductie Drupal

INTEC Brussel 30 sept 2014

Agenda

Over Fedict

LAMP stack

Drupal algemeenOverzicht, community

Drupal 6 / 7Opbouw, modules en distributies, talen

Drupal 8, vooruitblik

Sites en modules testen

Eenvoudige tekening van een mannetje wijzend naar de agenda.


Overzicht

Over Fedict

E-Gov componenten en dienstenNetwerk tussen gebouwen / internet (FedMAN)

Gegevensuitwisseling (Federal Service Bus)

Authenticatie (Federal Authentication Service)

Website platform en service (Drupal OpenFed)

Elektronische identiteitskaart

http://www.fedict.belgium.be/nl/service_catalogue

ICT medewerkers via Fedict Selecthttp://www.fedictselect.be


Federale Overheidsdienst voor ICT

LAMP stack


Linux, Apache, MySQL, PHP

MySQLPHPLinuxApache

Open source besturingssysteemBegonnen als hobbyproject in 1991

Alternatief voor dure Unix systemen

Van kleine tot grote systemenModem / routers (BeBox)

Smartphones / tablets (Android)

PCs

Supercomputers


Linux

Larry Ewing, http://commons.wikimedia.org/wiki/File:Tux-shaded.svg

Open source webserverSerie patches NCSA in 1995

Draait op Linux, Windows, BSD, OS X, ...

Ooit door 70% van alle sites gebruikt (nu 30%)

Erg veelzijdige serverAllerlei modules: proxy, beveiliging, scripts, logging,

Deel van Apache Software Foundation


Apache HTTPd

Open source relationele databaseOntstaan in 1995

Draait op Linux, Windows, BSD

C, Java, .Net, PHP, Python, Ruby connectors

Firma gekocht door Sun (nu Oracle) in 2008Product blijft open source...

daarnaast ontstaan varianten zoals MariaDB, Drizzle

WebScaleSQLFacebook, Twitter, LinkedIn (Google)


MySQL

Script taal voor webpagina's Begonnen in 1995 (Personal Home Page)

Draait op Linux, Windows, BSD

Joomla, WordPress, phpMyAdmin, phpBB, ...

Nu meer aandacht voor performantieAPC, Zend Opcache / Optimizer+ opcode cache

Facebook HipHop / HHVM compiler


PHP

Drupal: overzicht


Drupal site: voorbeeld

(Web) Content Management SysteemOntstaan in 2001

Open source (GPL)

1000-en modulesWorkflow, integratie, beheer, e-shop, ...

Meestal op LAMPDraait soms ook op BSD, MacOS X, MS-Windows

op nginx, IIS webserver

Postgres, MS SQL Server / Azure database


Drupal

Actieve gebruikersgroepen

Geen licentiekosten

Veel documentatieHandboeken, online

Zeer veel mogelijkhedenUitbreiden functionaliteit, wijzigen lay-out

Zeer populairVeel kleine en grotere Drupal-bedrijven


Sterke punten

100-en overheidssites in BelgiZuinigMetStraling, OFO-IFA, HRJ, Civiele Veiligheid ...

Overheidssites in het buitenlandWhiteHouse.gov, maar ook in Australi, Frankrijk, ...

StuBru, Vier, VTM, Kinepolis

Amnesty Int, UNICEF.be, Greenpeace UK

Carrefour, Essent, Tesla Motors


Zeer populair

Standaard zoekmotor is beperktGeen autocomplete, wildcard, search in documenten

=> Oplossing is Apache Solr / Lucene + Tika (Java)

Meerdere talen op 1 site is soms lastigExtra modules en configuratie nodig

=> Eindelijk out-of-the-box in Drupal 8

Mix van content- / configuratiebeheerZeer moeilijk om enkel content / config te kopiren

=> Drupal 8


Zwakke punten

Elke major release heeft andere APIModules moeten vaak opnieuw ontwikkeld worden

Niet bedoeld voor documentbeheerWel integratie met bijvoorbeeld Alfresco mogelijk


Zwakke punten (2)

DocumentbeheerAlfresco (via CMIS module)

MultimediaYoutube, Vimeo (Media module)

Sociale MediaTwitter, Facebook (AddThis, ShareThis...)

StatistiekenGoogleAnalytics


Voorbeelden integraties

Solr server(Java)Drupal(PHP)


Drupal en Solr search

Apache SolrModulesLucene(index)Tika(extractie PDF,...)

File

Content

Websitehttp://drupal.org

Online site bouwen (gratis maar wat beperkt)http://simplytest.me/

http://www.drupalgardens.com/

http://www.acquia.com/acquia-cloud-free


Snel van start

Oracle VirtualBox (desktop)Open source virtualisatie

MacOS X, Linux, MS-Windows

https://www.virtualbox.org/

Virtuele machineshttp://www.turnkeylinux.org/

LAMP stack voor MacOS / Windows / LinuxGoed voor development, niet voor productie

https://www.apachefriends.org/index.html


Snel van start (eigen machine)

Drupal: community

Project voor themes, modules, ...

Referentie (klanten / werkgevers)

Gratis + bespaart werkAutomatisch aanmaken downloads

Bij correct gebruik: link bug ticket naar fix in code

Automatische tests mogelijk

Statistieken aantal sites die module gebruikenEnkel sites die Update module hebben geactiveerd

Enkel totalen, geen gedetailleerde lijst van sites


Beheer op drupal.org, voordelen


Projectpagina: voorbeeld

Algemene informatieBeschrijving, lijst ontwikkelaars, downloads

Statistieken, laatste activiteit

Eventueel link naar gelijkaardige projecten, documentatie

Issue trackerBugs, vragen, aanvraag nieuwe functies

Iedereen mag commentaar geven / patches sturen


Projectpagina: functies

Ontwikkeld door Linus TorvaldsOorspronkelijk om versies Linux kernel te beheren

Beschikbaar voor Linux, Windows, MacOS X...

Wie heeft wat wanneer gewijzigdTerugkeren naar vorige versie is mogelijk

Commentaar toevoegen waarom

Link met projectpagina op Drupal.orgGit Issue #12345 ... wordt gelinkt aan ticket 12345


Git versiebeheer


Projectpagina: git commits

Iedereen kan sandbox project aanmakenProjectpagina, git,

(Nog) geen unieke projectnaam (enkel nummer)

Full projects door goedgekeurde developersUnieke naam op drupal.org

Promotie sandbox => full is mogelijk

Mogelijkheid om anderen toegang te gevenBeheren tickets, beheren projectpagina, ...


Zelf project maken drupal.org

Niet vereist om patches op te sturen

Voor wie zelf modules... op d.o. wil beherenDoel: verhogen kwaliteit modules

Eenmalige review door andere drupal.org developers

Nakijken correct gebruik Drupal API, documentatie...

Kan helaas weken / maanden duren (vrijwilligers)

Nadien onbeperkt aanmaken projecten


Eenmalige developer / code review

Lijst van Drupal-bedrijvenTraining, hosting, ontwikkeling,

Gekoppeld aan activiteiten / projecten op d.o.

Lijst van Drupal-boeken


Marketplace

Drupal 6 / 7: opbouw

Distributie


Van module tot distributie

ModuleModuleThemeCoreModuleModuleModuleModuleThemeLibraryProfileModuleModuleLibraryTheme

Layout2 000+ gratis themes

Mix van HTML / CSS / Javascript en/of PHP

Subthemes mogelijk Gebaseerd op / variant van bestaand theme

Sneller te ontwikkelen, vaak al mobile, responsive

Populaire base themes: Zen, Omega


Themes

Core modules (standaard in Drupal)Blog, Page, ...

Contrib modules25 000+ gratis modules

Wisselende kwaliteit en ondersteuning

Verbetering functies / extra mogelijkhedenIntegratie Google / Facebook / Twitter diensten

Workflow, eCommerce, beheer content / gebruikers, ...


Modules

Geschreven in PHP en/of Javascript

Visuele effecten / opmaakJquery Cycle, SuperFish, ...

Integratie met andere dienstenOpenLayers, MailChimp, ...

Online HTML editorZit niet standaard in D6 / D7 (wel in D8)

CKEditor, TinyMCE


Libraries

Installation profilesKeuze (enkel) bij installatie

Verzameling modules, themes, libraries

Gescripte configuratie van deze modules

800 distributiesCore + installation profile(s), modules, themes

Commerce Kickstart, OpenFed, Acquia Commons, ...


(Installation) profiles en distributies

Drupal 6 / 7: modules


Goeie informatici zijn lui

http://commons.wikimedia.org/wiki/File:Lazzaro1.jpg


Zelf een module bouwen ?

Bestaat er al een module ?Actieveontwikkeling(Co-)maintainerworden ? Patch mogelijk ?Eigen moduleJ NJ NNNPatchJJ

.infoNaam, versie van module, afhankelijkheden

.installCode installatie / upgrade / verwijderen module

.module / .incEigenlijke module en include files

.testSimpleTest bestanden


Bestanden van een module


.info voorbeeld

name = Datedescription = Makes date/time fields available.project = "date"version = "7.x-2.8"package = Date/Timecore = 7.xPhp = 5.2dependencies[] = date_apifiles[] = date.migrate.incfiles[] = tests/date_api.testfiles[] = tests/date.test

Lijst van Drupal functies, constanten

Form API / builderFormulieren

HooksInstallatie / verwijderen module

Toevoegen / verwijderen content / gebruikers / menu's

Menu's, fields, ...


Drupal API


Menu hook voorbeeld

/** * Implements hook_menu(). */function devel_menu() {... $items['devel/settings'] = array( 'title' => 'Devel settings', 'description' => 'Helper functions, pages', 'page callback' => 'drupal_get_form', 'page arguments' => array('devel_admin_settings'), 'access arguments' => array('administer site configuration'), 'file' => 'devel.admin.inc', 'menu_name' => 'devel', );... return system_settings_form($form);}

Drupal 6 / 7: distributies

Veel sites op zelfde platform

Voordelen:Sneller beginnen met sites te ontwikkelen

Makkelijker te onderhouden (bij strikt beheer)

Nadelen:Beetje configuratiewerk

Minder flexibel


Wanneer een distributie bouwen ?

Command line (php) toolsModules (des)activeren, backups,

Uitbreidbaar met eigen commando's

Drush makeBundelen core, modules, patches, themes...

Bij voorkeur exacte versienummers gebruiken


Drush tool


Makefile voorbeeld

libraries[colorbox][download][type] = "get"libraries[colorbox][download][url] = "https://github.com/jackmoore/colorbox/archive/1.5.13.zip"libraries[colorbox][directory_name] = "colorbox"libraries[colorbox][type] = "library"

projects[admin_language][download][type] = gitprojects[admin_language][download][branch] = "7.x-1.x"projects[admin_language][download][revision] = 6f0a6e5projects[admin_language][subdir] = contrib

projects[i18n][version] = "1.11"projects[i18n][subdir] = contribprojects[i18n][patch][2250501] = "http://drupal.org/files/issues/i18n-node_edit-2250501-8.patch"

Open source =/= zonder licentiebepalingenBeperkingen / verplichtingen

Verschillende licenties niet altijd compatibel

Drupal: GPL v2 of laterCode beschikbaar stellen aan gebruiker

Gebruikers mogen code doorgeven

Drupal: whitelist compatibele componentenAlle drupal.org modules / themes

Enkele externe modules / libraries ...


Licenties

Projectpagina etc zoals bij module

Gecontroleerde drush make fileEnkel full modules / themes van drupal.org

Beperkte lijst toegestane libraries

https://drupal.org/project/drupalorg_whitelist


Distributie op drupal.org

Drupal 6 / 7: meertaligheid


Meertaligheid

http://commons.wikimedia.org/wiki/File:Br%C3%BCssel_%28Ortstafel%29.jpg

Labels, foutboodschappen ...

Standaard mails, site slogan, ...

Navigatie / menu's

Drop-down lijsten / taxonomies

Inhoud pagina's


Vertalingen

(Veel) extra modules nodigi18n, i18nviews, entity translation

Vertaling niet altijd 1-op-1Vb: NL + FR site met beperkte vertaling naar EN + DE

Wat met menu's ? Pagina's die enkel in 1 taal bestaan ?

Vertaling gebeurt op verschillende plaatsenOok verschillende rechten nodig


Aandachtspunten

Drupal 6Vertaling per node, elke vertaalde node een andere ID

=> wat met bijvoorbeeld likes (vertaalde of alle nodes ?)

Synchroon houden auteur, datum ? (i18nsync)

Drupal 7Vertaling per node, zoals in D6

Of per veld (entity translation)

=> zelfde ID, maar werkt niet altijd met alle modules


Vertaling van inhoud

Sites en modules testen

Standaard in D7 (Testing) moduleAparte module in D6

Testen van functies tijdens ontwikkelingNiet verplicht, wel sterk aan te raden

Testen kunnen ook automatisch draaien op d.o.


Simpletest module


Simpletest voorbeeld


Simpletest rapport

Automatische code reviewhttp://pareview.sh

Documentatie, correct gebruik API, naamgeving...

Tips ivm veiligheid en performantie

Eigen te schrijven unit tests (SimpleTest)https://drupal.org/simpletest

Development modulehttps://drupal.org/project/devel


Hulpmiddelen

Automatiseren testen via browserAansturen IE, Firefox, Chrome, via script / code

Java, Python, C#, Ruby, (PHP)

http://www.seleniumhq.org

Nabootsen wat gebruiker doet / zietKlikken, uploaden files, invullen formulieren

Aanvulling (geen vervanging) unit testen

Staat los van Drupal (wel module beschikbaar)

Opstellen kan wat moeite kosten


Selenium


Selenium voorbeeld (python)

from selenium import webdriverdriver = webdriver.Firefox()driver.get("http://www.google.com")

inputElement = driver.find_element_by_name("q")inputElement.send_keys("cheese!")inputElement.submit()

try: WebDriverWait(driver, 10).until(EC.title_contains("cheese!")) print driver.title

finally: driver.quit()

Scripten installatie devlopment-omgeving

Virtuele MachineVMWare, VirtualBox,

Provision toolsShell scripts, Chef, Puppet, ...

https://www.vagrantup.com


Vagrant

Drupal 6 / 7: Varia

D6: Content Construction KitEnkel op Nodes (Content Types)

D7: Entity TypesNodes, Comments, Taxonomy, Users

=> extra velden, vertalingen (Entity Translation)

=> Views, Rules

Entity API


Drupal 7: Entities

Uitschakelen niet-gebruikte modules

Drupal cachingPage cache / Block cache

Views query results cache

Eigen code: &drupal_static(__FUNCTION__)

CSS / Javascript aggregation (1 bestand)

PHP versie

Memcache


Performantie

Drupal 8: vooruitblik

Release: eind 2014 ??

Hergebruik PHP frameworkhttp://symfony.com/blog/symfony2-meets-drupal-8

http://cipix.nl/understanding-drupal-8-part-1-general-structure-framework

VoordelenInteressanter voor niet-Drupal (PHP) developers

Laat toe om nieuwe functies sneller te ontwikkelen

NadelenLeercurve voor ervaren Drupal developers

Herschrijven modules en themes


Gebaseerd op Symfony 2

Configuration ManagementGescheiden houden content en inhoud

(REST) Web ServicesMakkelijker om feeds te maken / data binnen te halen

Meer functionaliteit standaard aanwezigMeertaligheid, HTML Editor, Views

HTML5 / Mobile / AccessibilityGeen ondersteuning meer voor IE8


Grote verbeteringen


Gebruiksvriendelijke UI

Configuration API

Uitwisselen via YAML filesVb: van development naar productie-omgeving

(Oorspronkelijk niet in database, sinds kort wel)


Configuration Management

Validation APINiet enkel meer voor formulieren (vb ook voor REST)

Voorbeeld: controle maximum waarde

State APINiet verwarren met Configuration API

Voorbeeld: laatste keer dat cron uitgevoerd werd

In D6 / D7 meestal bijgehouden in Variable

Tour APIGebaseerd op Joyride.js


Andere APIs

VoordelenNiet Drupal-specifiek

Ontwikkeld door de makers van Symfony 2

Leesbaarder

Geen PHP code meer in templates (= veiliger)

NadeelLeercurve voor ervaren Drupal themers


Twig themes


Twig voorbeeld

{# This is a comment #}{{ 'List'|t }}

  • {% for choice in menu %}
  • {{ choice.name }} {% endfor %}

Drupal 7 blijft ondersteund

Drupal 6 ?Ondersteuning eindigt 3 maanden na release D8

https://www.drupal.org/node/2288521

Heel wat sites draaien nog op Drupal 6 !Upgrade naar D7 / D8 kan lastig zijn

Niet alle modules al beschikbaar / stabiel

=> (betalende) ondersteuning door Drupal-bedrijven

Backdrop fork ?


Wat met bestaande Drupal sites ?

https://drupal.org/drupal-8.0

https://www.drupal.org/update/modules/7/8

https://www.acquia.com/blog/d8migrate

https://groups.drupal.org/core/twidc

https://www.drupal.org/node/2127611


Meer informatie

Vragen ?

Bedankt !

Bart Hanssens / FedictWTC III, Simon Bolivarlaan 301000 Brussel, [email protected] [at] fedict.be | www.fedict.belgium.be

p.

Fedict 2014. All rights reserved | p.

Fedict 2014. All rights reserved

Fedict 2014. All rights reserved

Fedict 2014. All rights reserved

Fedict 2014. All rights reserved