Lex heeft de vorige keer aangekondigd dat hij gaat stoppen met JUG Utrecht. Gelukkig meldde zich meteen een vrijwilliger die voortaan samen met Anja de bijeenkomsten organiseert: Patrick Smits.

Komende avonden:

10 april: Accelerated Mobile Pages – Simon Kloostra
8 mei: Hoe ga je om met gebruikers? Open avond

Interessant onderwerp: wat kun je met de htaccess maker van Admin Tools

Joomla Nieuws

  • Joomla 3.7 stable release stond gepland voor 28 maart 2017, maar is doorgeschoven naar begin april.
  • Als je Joomla 3.7 installeert, zul je in de backend een waarschuwing krijgen als je nog PHP 5.6 of lager gebruikt.
  • Simon Kloostra geeft binnenkort een workshop SEO, je krijgt zijn boek er gratis bij. Je kunt nog aanmelden, maar je moet wel snel zijn.
  • Op deze site, www.joomlacommunity.nl, is een agenda, daar staat netjes per maand wat de JUGs in het Nederlandse taalgebied doen. Of iedereen daar eens naar wil kijken, en ook naar de onderwerpen je interessant zou vinden. Dan kunnen Patrick en Anja die mensen benaderen en regelen dat ze ook bij ons komen.

Mijn eerste Joomla-plugin – presentatie door Frits Jongbloets

Verkorte versie, want Frits geeft deze presentatie ook op de JoomlaDagen.

Voorbeelden van bestaande Joomla-plugins: e-mail cloaker (core plugin), editors (TinyMCE, JCE), diverse Regular Labs extensies (Articles Anywhere, Sourcerer etc).

Kenmerken:

Utility (ondersteunend), meestal niet zo veel eigen databeheer maar ze doen iets met andere extensies, veel mensen vinden ze een beetje ongrijpbaar, er zit geen template-achtige voorziening aan, leidt een eigen leven.

In deze presentatie wil Frits zijn eigen ervaringen vertellen, zijn enthousiasme, zonder volledigheid na te streven, een beetje achtergrond, voorbeelden van zijn eigen plugins, een eenvoudige plugin helemaal doorlopen. De code van deze plugin is beschikbaar. En alles is werk in uitvoering.

Als eerste gaan we kijken naar de plugin die Frits gemaakt heeft: de IntroMarker plugin.

Uitgangssituatie: blog met een plaatje. De vormgever wil dat het intro in de artikelweergave een grotere letter krijgt, naast het plaatje staat en dat de rest van de tekst onder het plaatje staat. We wilden niet met divjes gaan werken, want daar wilden we de klanten niet mee lastig vallen. De standaard article view maakt geen onderscheid tussen de introtekst en de rest van de tekst. Maar er is wel een stukje code dat zegt dat ze gewoon na elkaar neergezet moeten worden.

Daar heeft Frits dus een plugin voor gemaakt, die heet IntroMarker.

Met zo’n plugin kun je dus de output naar je hand zetten. Je kunt ook een override of alternatieve layout maken, maar updates zijn er niet voor niets, jouw overrides en alternatieve layouts zouden verouderd kunnen raken.

Met plugins pas je de werking van extensies aan zonder de code te wijzigen. Met een plugin wijzig je een stukje. Het kan je helpen bij je beheertaken. Het is minder geschikt voor eigen dataverzamelingen. Veel effect met weinig code. Weinig updategevoelig t.o.v. overrides.

Plugins volgen een ander design pattern dan componenten en modules. Die gebruiken namelijk de Model, View, Controller structuur. Plugins werken anders en kunnen dus andere dingen.

De plugin IntroMarker werkt op de trigger OnContentPrepare: dan plakt hij een divje om de introtext heen, geeft hem een class en zorgt ervoor dat er witruimte gecreëerd wordt na de introtekst.

Een plugin wacht op een event. Dat is een signaal dat afgegeven wordt door het Joomla framework of door een extensie. Events geven aan dat een taak start of is afgerond. Het is een signaal dat een gebeurtenis in werking zet.

De plugin reageert dus op events, niet rechtstreeks op een verzoek van de gebruiker. Het is niet dat je op een knop klikt en de plugin gaat iets doen; je klikt op een knop en zet een reeks in werking, en een van de onderdelen van die reeks is dat de plugin iets gaat doen.

Het event OnContentPrepare wordt getriggerd in de content view.

De plugin heeft in de definitie staan: als OnContentPrepare getriggerd wordt, doe dan iets.

Soms zijn er template overrides waar bepaalde triggers niet in staan. Dan kun je wel een plugin maken die uitgaat van die trigger, maar dan zal hij niet werken.

Andere events bij pageload zijn onAfterInitialise, OnBeforeRender, OnBeforeCompileHead.

Er zijn verschillende soorten plugins: content, user, system, soms is de functionaliteit niet helemaal helder. En ontwikkelaars maken ook nog hun eigen type plugin.

In de IntroMarker plugin van Frits zit ook een OnBeforeCompileHead trigger: maak een style aan en voeg die toe aan het document. Die heeft hij gemaakt voor de divider die alles wat na de introtekst komt naar beneden drukt. Daarvoor heeft Frits was css gemaakt en toegevoegd aan de onBeforeCompileHead.

Daarnaast zitten er wat checks in: zitten we in de frontend van de site, zitten we in een artikel of in een categorieblog etc.

Objectgeoriënteerd programmeren

Plugins bouwen is Frits pas gelukt toen hij objectgeoriënteerd programmeren snapte. Het gaat uit van een bouwplan: de class. Het object is datgene dat gebouwd is op basis van die class. Classes kunnen ook andere classes uitbreiden: alle eigenschappen van die andere class overnemen en er nog wat aan toevoegen. Heel veel andere dingen van hoe een plugin werkt, zitten al in JPlugin, hoef je alleen nog uit te breiden.

Het bevat variabelen (properties) en functies (methods) en kan properties en methods van een andere class erven en nieuwe kenmerken toevoegen.

Bijvoorbeeld: de functies onBeforeCompileHead en onContentPrepare had Joomla al, maar je kunt er ook nog functies aan toevoegen. Een private function createCss bijvoorbeeld, zoals Frits in zijn plugin gedaan heeft voor de divider.

Voordelen objectgeoriënteerd programmeren:

-        Je kunt code hergebruiken

-        Je organiseert code in aanroepbare blokken

-        Wordt leesbaar door notatie

-        Overerving

-        Je kunt objecten van anderen gebruiken zonder kennis van de code (mits input en output gedocumenteerd zijn)

-        Joomla is OOP gebaseerd

In de plugin IntroMarker in het bestand intromarker.php zitten drie functies, en de class. Die moet een naam krijgen, dan snapt Joomla wat hij er mee moet doen.

Er is ook een xml-bestandje, in de configuratie daarvan heeft Frits toegevoegd dat hij alleen in een bepaalde categorie gebruikt kan worden. Daarnaast zijn er de taalbestanden. Frits heeft ‘m in het Engels en in het Nederlands gemaakt. Dat is alles waar de plugin uit bestaat: een php-bestand, een xml-bestand en de taalbestanden.

Nog een voorbeeld

Frits heeft een RSForm-formulier gemaakt waarin een postcode-adres-woonplaats check zit. Die functie zit niet in RSForm zelf, maar Frits heeft een plugin gemaakt waarmee Joomla in de database kijkt. Dat is een iets gecompliceerdere plugin: die kijkt in de database naar de postcodes, dat boetseert hij in tabelletjes binnen javascript, dat wordt in de head gestopt. De plugin doet de volgende lookup voor de plaatsnaam en daarna gaat hij terug voor de straatnaam.

Nog een voorbeeld

Frits heeft bij een andere site de gewone com_content omgebouwd naar een ander datatype. Daarmee worden gewone artikelen omgetoverd tot bibliotheek items met extra velden. Als het artikel wordt bewaard in de categorie “bibliotheek” komen die extra velden erbij, en kan de categorie niet meer worden aangepast (om te voorkomen dat dingen ongewenst uit de bibliotheek verdwijnen). Bij het maken van deze plugin ontdekte Frits dat er al heel veel veldtypes voorgedefinieerd zijn in Joomla.

Voorbeeldplugin IntroMarker: http://www.oorzaak.nl/jug030

Frits heeft veel gehad aan het boek Programming Joomla! Plugins van Jisse Reitsma (Engelstalig) en de bijbehorende code op http://github.com/yireo/JoomlaPluginsBook

Dokter Joomla

Case: Op mijn website heb ik een aantal adverteerders die huizen of kamers verhuren. Dat zijn gewone content artikelen, daar wil ik filters op toepassen. Hoe kan ik dat aanpakken?

Antwoord: misschien met JA MegaFilter van JoomlArt, die lijkt wel te kunnen wat jij wilt. Maar als het gewoon iets is wat in de tekst staat, dan kan hij daar waarschijnlijk niet zo veel mee. Met tags zou het moeten kunnen. Maar op meerdere tags tegelijk filteren zou wel eens wat ingewikkelder kunnen zijn.

Case: Wij willen een juist filtermechanisme dat de boel beperkt, we krijgen veel te veel zoekresultaten. Ook slim zoeken geeft nog te veel resultaten.

Antwoord: Archiveren en het archief niet meenemen. Als dat niet kan, is die JA MegaFilter misschien ook hiervoor een optie. Om automatisch te archiveren zou je een plugin kunnen schrijven die artikelen van voor een bepaalde datum automatisch archiveert, en artikelen met bepaalde criteria niet.

Case: Hoe verwijs ik een url onzichtbaar door naar een andere url?

Antwoord: Duik in de htaccess. Of zoek eens op htaccess in combinatie met landing page.

Reageer

1000 Resterende tekens