1. class volgHetJoomladagenProgramma extends volgEenSeminar()
{
// ...
public function onDeBelGaat()
{
$tijd = $this->kijkHoeLaatHetIs();
$zaal = $this->kijkNaarWelkeZaalIkMoet($tijd, $programmaboekje);
$verplaatsing = $this->gaNaarZaal($zaal);
}
private function kijkHoeLaatHetIs()
{
// ...
return $tijd;
}
// ...
}
Presentatie Mijn eerste Joomla! plugin, JoomlaDagen.nl, 2017
Frits Jongbloets, Studio De Oorzaak & De Webcompagnons, oorzaak@oorzaak.nl
2. Mijn eerste Joomla! plugin
Frits Jongbloets, JoomlaDagen.nl 2017
Versie: definitief
Presentatie Mijn eerste Joomla! plugin, JoomlaDagen.nl, 2017
Frits Jongbloets, Studio De Oorzaak & De Webcompagnons, oorzaak@oorzaak.nl
3. Mijn eerste Joomla! plugin
“Je gaat het pas zien als je het doorhebt”
Presentatie Mijn eerste Joomla! plugin, JoomlaDagen.nl, 2017
Frits Jongbloets, Studio De Oorzaak & De Webcompagnons, oorzaak@oorzaak.nl
4. Mijn ervaringen
Introductie
• Joomla! sites voor klanten
• Sinds 2008
• Custom extensies voor eigen projecten:
• Extra functionaliteit
• Pagina layout / vormgeving
• Gebruiksgemak beheerders / eindgebruikers
• … en omdat ik het interessant vind
• Beperkte vooropleiding programmeren
• Zelfstudie en Joomla! community
Presentatie Mijn eerste Joomla! plugin, JoomlaDagen.nl, 2017
Frits Jongbloets, Studio De Oorzaak & De Webcompagnons, oorzaak@oorzaak.nl
5. Mijn ervaringen met plugins maken
Introductie
• Plugins sinds + een jaar
• Vond plugins moeilijk te begrijpen
• Wanneer komen ze in actie?
• Waar blijft hun output?
Presentatie Mijn eerste Joomla! plugin, JoomlaDagen.nl, 2017
Frits Jongbloets, Studio De Oorzaak & De Webcompagnons, oorzaak@oorzaak.nl
6. Jullie ervaringen?
Introductie
• Al eens een plugin gemaakt?
• Een andere Joomla! extensie?
• Template override?
• Überhaupt programmeerervaring?
Presentatie Mijn eerste Joomla! plugin, JoomlaDagen.nl, 2017
Frits Jongbloets, Studio De Oorzaak & De Webcompagnons, oorzaak@oorzaak.nl
7. Toen het Boek in mijn leven kwam…
Introductie
• Boek Jisse Reitsma
Presentatie Mijn eerste Joomla! plugin, JoomlaDagen.nl, 2017
Frits Jongbloets, Studio De Oorzaak & De Webcompagnons, oorzaak@oorzaak.nl
8. … en wat extra uitleg…
Introductie
• Boek Jisse Reitsma
• Presentatie Jisse
Presentatie Mijn eerste Joomla! plugin, JoomlaDagen.nl, 2017
Frits Jongbloets, Studio De Oorzaak & De Webcompagnons, oorzaak@oorzaak.nl
9. .. en nog wat meer uitleg …
Introductie
• Boek Jisse Reitsma
• Presentatie Jisse
• Workshop Jisse
Presentatie Mijn eerste Joomla! plugin, JoomlaDagen.nl, 2017
Frits Jongbloets, Studio De Oorzaak & De Webcompagnons, oorzaak@oorzaak.nl
10. … zag ook ik het opeens
Introductie
• Boek Jisse Reitsma
• Presentatie Jisse
• Workshop Jisse
• Sindsdien één custom plugin per project
Presentatie Mijn eerste Joomla! plugin, JoomlaDagen.nl, 2017
Frits Jongbloets, Studio De Oorzaak & De Webcompagnons, oorzaak@oorzaak.nl
11. Inhoudsopgave
Introductie
• Demo plugin IntroMarker - werking
• Hoe werken plugins?
• Hoe maak je een plugin?
• Demo plugin IntroMarker - code
• Voor- en nadelen plugins
• Andere demo’s
• Bronnen
• Met dank aan
Presentatie Mijn eerste Joomla! plugin, JoomlaDagen.nl, 2017
Frits Jongbloets, Studio De Oorzaak & De Webcompagnons, oorzaak@oorzaak.nl
12. Demo plugin IntroMarker
Demo
Probleem:
• Joomla! core artikel
• Introtekst vrij zetten van vervolgtekst en stylen
• Zonder auteurs tekst te laten opmaken
• Maar:
Introtekst en ‘vervolgtekst’ zijn één doorlopend tekstblok
in standaard Joomla! artikel output
Presentatie Mijn eerste Joomla! plugin, JoomlaDagen.nl, 2017
Frits Jongbloets, Studio De Oorzaak & De Webcompagnons, oorzaak@oorzaak.nl
13. Demo plugin IntroMarker
Demo
Boosdoener:
$item->text = $item->introtext . ' ' . $item->fulltext;
In:
components/com_content/views/article/view.html.php
+ regel 144
Presentatie Mijn eerste Joomla! plugin, JoomlaDagen.nl, 2017
Frits Jongbloets, Studio De Oorzaak & De Webcompagnons, oorzaak@oorzaak.nl
14. Demo plugin IntroMarker
Demo
Wat ik wil:
$item->text = '<div class="intro">' . $item->introtext .
'</div>' . $item->fulltext;
Presentatie Mijn eerste Joomla! plugin, JoomlaDagen.nl, 2017
Frits Jongbloets, Studio De Oorzaak & De Webcompagnons, oorzaak@oorzaak.nl
15. Demo plugin IntroMarker
Demo
Wat ik wil:
$item->text = '<div class="intro">' . $item->introtext .
'</div>' . $item->fulltext;
… zonder iets te wijzigen in het bestand
components/com_content/views/article/view.html.php
of ander template bestand
Presentatie Mijn eerste Joomla! plugin, JoomlaDagen.nl, 2017
Frits Jongbloets, Studio De Oorzaak & De Webcompagnons, oorzaak@oorzaak.nl
16. Demo plugin IntroMarker
Demo
Bekijk front end en back end demo plugin.
Presentatie Mijn eerste Joomla! plugin, JoomlaDagen.nl, 2017
Frits Jongbloets, Studio De Oorzaak & De Webcompagnons, oorzaak@oorzaak.nl
17. Inhoudsopgave
Introductie
Demo plugin IntroMarker - werking
• Hoe werken plugins?
• Hoe maak je een plugin?
• Demo plugin IntroMarker - code
• Voor- en nadelen plugins
• Andere demo’s
• Bronnen
• Met dank aan
Presentatie Mijn eerste Joomla! plugin, JoomlaDagen.nl, 2017
Frits Jongbloets, Studio De Oorzaak & De Webcompagnons, oorzaak@oorzaak.nl
18. Joomla! plugins in de back end
Introductie
• Extensies > Plugins
• Ingedeeld in types
• Authentication
• Content
• User
• System
• …
• Soms met instelbare parameters; soms alleen aan/uit
Presentatie Mijn eerste Joomla! plugin, JoomlaDagen.nl, 2017
Frits Jongbloets, Studio De Oorzaak & De Webcompagnons, oorzaak@oorzaak.nl
19. Voorbeelden van Joomla! plugins
Introductie
• E-mailadres cloaker - Joomla! core
• Editors
• Tiny MCE
• JCE
• RegularLabs extensies, o.a.
• Articles Anywhere
• Sourcerer
• ReReplacer
• Yireo extensies, o.a.
• Language domain plugin
Presentatie Mijn eerste Joomla! plugin, JoomlaDagen.nl, 2017
Frits Jongbloets, Studio De Oorzaak & De Webcompagnons, oorzaak@oorzaak.nl
20. Kenmerken van Joomla! plugins
Introductie
Vaak:
• Utility / ondersteunend
• Geen eigen content type
• Beheer vergemakkelijken
• Of (kleine ) correcties in output
Presentatie Mijn eerste Joomla! plugin, JoomlaDagen.nl, 2017
Frits Jongbloets, Studio De Oorzaak & De Webcompagnons, oorzaak@oorzaak.nl
21. Basisprincipe (design pattern)
Hoe werken plugins?
• Componenten en modules: mvc
• Plugins: observer design pattern
• Plugins reageren op ‘events’
“Als de bel gaat, kom naar de zaal”
• Events komen van Joomla! en/of extensies
• Interne signalen als een taak start of is afgerond
• Niet verwarren met events als content type,
zoals bij RS Events Pro of JEvents
Presentatie Mijn eerste Joomla! plugin, JoomlaDagen.nl, 2017
Frits Jongbloets, Studio De Oorzaak & De Webcompagnons, oorzaak@oorzaak.nl
22. Een event wordt getriggered
Hoe werken plugins?
De Joomla! core geeft event “onContentPrepare” af in:
components/com_content/views/article/view.html.php
+ regel 161
$dispatcher->trigger('onContentPrepare', array
('com_content.article', &$item, &$item->params, $offset));
Presentatie Mijn eerste Joomla! plugin, JoomlaDagen.nl, 2017
Frits Jongbloets, Studio De Oorzaak & De Webcompagnons, oorzaak@oorzaak.nl
23. Een event wordt afgevangen
Hoe werken plugins?
Demo plugin reageert op event “onContentPrepare” in:
plugins/content/intromarker/intromarker.php
+ regel 66
public function onContentPrepare($context, &$row, $params, $page=0)
{
…
}
Presentatie Mijn eerste Joomla! plugin, JoomlaDagen.nl, 2017
Frits Jongbloets, Studio De Oorzaak & De Webcompagnons, oorzaak@oorzaak.nl
24. Veel events in vele soorten
Hoe werken plugins?
• Joomla! framework events bij elke pageload
• onAfterInitialise, onBeforeRender, onBeforeCompileHead, …
• Joomla! events afhankelijk van context of actie
• onContentPrepare, onContentPrepareForm, onUserLogin, …
• Events specifiek voor een 3rd party extensie
Uitgebreide opsomming:
https://docs.joomla.org/Plugin/Events
Presentatie Mijn eerste Joomla! plugin, JoomlaDagen.nl, 2017
Frits Jongbloets, Studio De Oorzaak & De Webcompagnons, oorzaak@oorzaak.nl
25. Soorten plugins
Hoe werken plugins?
• Plugin types in de Joomla! back end
• Aansluitend bij event type (user, content, …)
• In werkelijkheid is relatie event – plugin type flexibeler
• … en type ‘system’ fits all
Presentatie Mijn eerste Joomla! plugin, JoomlaDagen.nl, 2017
Frits Jongbloets, Studio De Oorzaak & De Webcompagnons, oorzaak@oorzaak.nl
26. Plugin volgorde
Hoe werken plugins?
• Instelbaar per type plugin
• Kan problemen veroorzaken of oplossen
• Hier kan een strikte indeling qua type helpen
Presentatie Mijn eerste Joomla! plugin, JoomlaDagen.nl, 2017
Frits Jongbloets, Studio De Oorzaak & De Webcompagnons, oorzaak@oorzaak.nl
27. Inhoudsopgave
Introductie
Demo plugin IntroMarker - werking
Hoe werken plugins?
• Hoe maak je een plugin?
• Demo plugin IntroMarker - code
• Voor- en nadelen plugins
• Andere demo’s
• Bronnen
• Met dank aan
Presentatie Mijn eerste Joomla! plugin, JoomlaDagen.nl, 2017
Frits Jongbloets, Studio De Oorzaak & De Webcompagnons, oorzaak@oorzaak.nl
28. Objectgeörienteerd programmeren
Hoe maak je een plugin?
• Notatie met pijltje:
$style = $this->createCss();
• Class en object
• Overerving / extenden van andere class
• Code structureren
• Code hergebruiken i.p.v. herhalen (functies/methods)
• Code leesbaar maken:
$this->zoekVolgendePresentatie($tijd, $programmaboekje);
• Presentatie Niels van der Veer op 2-4-2017 om 14:30
Presentatie Mijn eerste Joomla! plugin, JoomlaDagen.nl, 2017
Frits Jongbloets, Studio De Oorzaak & De Webcompagnons, oorzaak@oorzaak.nl
29. Minimaal benodigd
Hoe maak je een plugin?
Twee php bestanden:
intromarker.xml (manifest en parameters)
intromarker.php (class)
Map:
/plugins/content/intromarker/
Opbouw pad / mapnaam:
/plugins/plugin_type/naam_van_mijn_plugin/
Presentatie Mijn eerste Joomla! plugin, JoomlaDagen.nl, 2017
Frits Jongbloets, Studio De Oorzaak & De Webcompagnons, oorzaak@oorzaak.nl
30. Class
Hoe maak je een plugin?
class PlgContentIntromarker extends Jplugin
{
}
Presentatie Mijn eerste Joomla! plugin, JoomlaDagen.nl, 2017
Frits Jongbloets, Studio De Oorzaak & De Webcompagnons, oorzaak@oorzaak.nl
31. Class
Hoe maak je een plugin?
class PlgContentIntromarker extends Jplugin
{
// main functionality
public function onContentPrepare() {...}
public function onBeforeCompileHead(){...}
}
Presentatie Mijn eerste Joomla! plugin, JoomlaDagen.nl, 2017
Frits Jongbloets, Studio De Oorzaak & De Webcompagnons, oorzaak@oorzaak.nl
32. Demo plugin IntroMarker
Demo
Bekijk code van demo plugin.
Presentatie Mijn eerste Joomla! plugin, JoomlaDagen.nl, 2017
Frits Jongbloets, Studio De Oorzaak & De Webcompagnons, oorzaak@oorzaak.nl
33. Optie: taalbestanden
Hoe maak je een plugin?
Taalbestanden:
en-GB.plg_content_intromarker.ini (taalbestand Engels)
nl-NL.plg_content_intromarker.ini (taalbestand Nederlands)
Mappen:
/plugins/content/intromarker/language/en-GB
/plugins/content/intromarker/language/nl-NL
Of:
/administrator/language/en-GB
/administrator/language/nl-NL
Presentatie Mijn eerste Joomla! plugin, JoomlaDagen.nl, 2017
Frits Jongbloets, Studio De Oorzaak & De Webcompagnons, oorzaak@oorzaak.nl
34. Optie: andere bestanden
Hoe maak je een plugin?
Bijvoorbeeld:
• php-bestanden met helper functies, bijv. Ajax calls
• Afbeeldingen
• Fonts
• JavaScripts
Mappen, bijvoorbeeld:
/plugins/content/intromarker/helpers/
/plugins/content/intromarker/assets/
Presentatie Mijn eerste Joomla! plugin, JoomlaDagen.nl, 2017
Frits Jongbloets, Studio De Oorzaak & De Webcompagnons, oorzaak@oorzaak.nl
35. Inhoudsopgave
Introductie
Demo plugin IntroMarker - werking
Hoe werken plugins?
Hoe maak je een plugin?
Demo plugin IntroMarker - code
• Voor- en nadelen plugins
• Andere demo’s
• Bronnen
• Met dank aan
Presentatie Mijn eerste Joomla! plugin, JoomlaDagen.nl, 2017
Frits Jongbloets, Studio De Oorzaak & De Webcompagnons, oorzaak@oorzaak.nl
36. De sterke kanten van plugins
Voor- en nadelen plugins
• Joomla! of extensie aanvullen / aanpassen
• Originele code blijft ongewijzigd, zelfs geen override
• Minder ‘update-gevoelig’ dan override
• Niet gebonden aan fysieke lay-out
• Wanneer plugin niets doet (filter) blijft de html ‘schoon’
• Andere mogelijkheden door ander design pattern
• Veel effect met weinig code
Presentatie Mijn eerste Joomla! plugin, JoomlaDagen.nl, 2017
Frits Jongbloets, Studio De Oorzaak & De Webcompagnons, oorzaak@oorzaak.nl
37. Eventuele bedenkingen
Voor- en nadelen plugins
• Vereist meer inzicht in Joomla!
• Event types
• Wanneer worden events (niet) getriggerd
• Waar input ophalen
• Waar output heen sturen
• Minder geschikt voor eigen content type
• Efficiënt met server resources?
Presentatie Mijn eerste Joomla! plugin, JoomlaDagen.nl, 2017
Frits Jongbloets, Studio De Oorzaak & De Webcompagnons, oorzaak@oorzaak.nl
38. Inhoudsopgave
Introductie
Demo plugin IntroMarker - werking
Hoe werken plugins?
Hoe maak je een plugin?
Demo plugin IntroMarker - code
Voor- en nadelen plugins
• Andere demo’s
• Bronnen
• Met dank aan
Presentatie Mijn eerste Joomla! plugin, JoomlaDagen.nl, 2017
Frits Jongbloets, Studio De Oorzaak & De Webcompagnons, oorzaak@oorzaak.nl
39. Meer demo’s
Demo
Ander eigen werk
• TextColsBoot (system)
• OutsideTheBox (system)
• Bieb (content)
• EasyProfile (system; EasyProfile, jQuery)
• Submissions dashboard (system; RSForms, jQuery)
• Postcode lookup (idem plus eigen database tabel en Ajax)
• Petitie afbeelding (system; RSForms, php image bewerking)
Presentatie Mijn eerste Joomla! plugin, JoomlaDagen.nl, 2017
Frits Jongbloets, Studio De Oorzaak & De Webcompagnons, oorzaak@oorzaak.nl
40. Inhoudsopgave
Introductie
Demo plugin IntroMarker - werking
Hoe werken plugins?
Hoe maak je een plugin?
Demo plugin IntroMarker - code
Voor- en nadelen plugins
Andere demo’s
• Bronnen
• Met dank aan
Presentatie Mijn eerste Joomla! plugin, JoomlaDagen.nl, 2017
Frits Jongbloets, Studio De Oorzaak & De Webcompagnons, oorzaak@oorzaak.nl
41. Instructie en voorbeelden
Bronnen
Demo plugin IntroMarker
http://www.oorzaak.nl/jd17nl
Boek Programming Joomla! plugins / Jisse Reitsma (Engelstalig)
https://www.yireo.com/books/programming-joomla-plugins-book
Code bij boek Jisse Reitsma
https://github.com/yireo/JoomlaPluginsBook
Instructievideo ‘My First Plugin’ (Engelstalig)
https://www.joomlashack.com/blog/tutorials/hello-world-joomla-plugins/
Presentatie Mijn eerste Joomla! plugin, JoomlaDagen.nl, 2017
Frits Jongbloets, Studio De Oorzaak & De Webcompagnons, oorzaak@oorzaak.nl
43. Inhoudsopgave
Introductie
Demo plugin IntroMarker - werking
Hoe werken plugins?
Hoe maak je een plugin?
Demo plugin IntroMarker - code
Voor- en nadelen plugins
Andere demo’s
Bronnen
• Met dank aan
Presentatie Mijn eerste Joomla! plugin, JoomlaDagen.nl, 2017
Frits Jongbloets, Studio De Oorzaak & De Webcompagnons, oorzaak@oorzaak.nl
44. Met dank aan
Jisse Reitsma – Joomla! plugins
Herman Peeren – programmeren Joomla! algemeen
René Kreijveld – voorbeeldcode postcode plugin
JUG030 – feedback op deze presentatie
Presentatie Mijn eerste Joomla! plugin, JoomlaDagen.nl, 2017
Frits Jongbloets, Studio De Oorzaak & De Webcompagnons, oorzaak@oorzaak.nl