Geschreven door Anja de Crom op maandag 22 februari 2016 20:22, in: Joomla gebruikersgroepen

Vanavond hadden we een lekker volle bak! Dat komt natuurlijk doordat Jisse Reitsma kwam vertellen over plugins.JUG Utrecht 8 februari 2016

Volgende bijeenkomsten

  • 14 maart 2016: Is {LESS} more of toch niet?; presentatie door Patrick Smits
  • 11 april 2016: Big Data; presentatie door Frits Hamann
  • 9 mei 2016: AcyMailing; presentatie door Will Hanselaar, en Piwik; presentatie door Joris Lange

Mogelijke nieuwe onderwerpen

Fabrik Flexible Joomla Content Creation: je kunt het gebruiken als een CCK, maar je kunt er ook je eigen mini-applicatie in bouwen. Klinkt interessant.

Het inrichten van een handige ontwikkelomgeving, werken met een develop server en een live server, wat is een goed ontwikkelprogramma, hoe kun je daar de verschillende testfasen in doorlopen.

Google Chrome wil http-sites als onveilig gaan weergeven, hoe kun je dat regelen? Best simpel. Het kan soms een probleem zijn als je mixed content hebt. SSL is makkelijk te regelen bij je hosting provider. Er is ook een autoriteit Start SSL waar je gratis een SSL kunt aanvragen, maar dat moet je hoster wel ondersteunen en iemand moet het voor je configureren. Siteground biedt gratis Let'€™s Encrypt aan (voor nieuwere browsers, bij oude browsers werk alleen zo'€™n betaald certificaat). Interessant onderwerp.

Laatste versies

  • Joomla: 1.5.26, 2.5.28 (niet meer gebruiken voor nieuwe websites), 3.4.8
  • Akeeba 4.5.5
  • Admin Tools 3.7.1
  • JCE 2.5.14

Joomla nieuws

De ontwikkelingen rondom Joomla 3.5: op 27 januari is de Beta 2 versie uitgebracht. Beta 3 zou er moeten zijn, maar is er nog niet. Op 17 februari zou de release candidate moeten uitkomen, maar aangezien Beta 3 er nog niet is... we wachten in spanning af.

Meer Joomla nieuws

Tip van Simon: https://varvy.com/visible-default-content.html. Alles wat moeite kost om tevoorschijn te toveren, zal minder makkelijk meegenomen worden door Google

En nog eentje op het gebied van zoekmachineoptimalisatie: focus op interne links: http://positionly.com/blog/seo/internal-linking, ook goed voor Google: hoe meer kwalitatief goede interne links, hoe beter. Het is goed voor je PageRanking, je bezoeker blijft langer op de site, het helpt Google crawlen en indexeren.

 

Presentatie Jisse Reitsma: Joomla Plugin Concepten,€“ want wat zijn plugins eigenlijk

Jisses presentatie online bekijken? Je vindt 'm hier: http://slides.yireo.com/yireo/plugin_patterns#1

Toen Jisse gisteren een mail kreeg van iemand die de woorden plugin, module en component gebruikte voor hetzelfde ding, leek dat hem wel een leuke insteek voor deze avond.

Jisses boek Programming Joomla Plugins is geschreven voor Joomla 3, maar ook van toepassing op 2.5. Met Joomla 4 gaat dat allemaal op de schop: dan zijn er geen plugins en modules meer. Over Joomla 4 is de discussie overigens nog in volle gang.

Jisse is oprichter van Yireo, auteur van Programming Joomla Plugins, programmeur en ondernemer. Op dit moment doet hij minder met Joomla en meer met Magento, een e-commerce pakket waarbij het CMS gedeelte ondergeschikt is aan de e-commerce. Sterk in het verkoop-belasting-verzending aspect. Het technische plafond ligt hoger, dankzij de flexibele architectuur. Wil je een webshop bouwen voor weinig geld, dan is Joomla-Hikashop een goede keuze. Magento is in het hogere segment heel geschikt, in het allerhoogste segment ook niet meer.

Interessante parallel: de overgang van Magento 1 naar Magento 2 (lees: compleet herschrijven), is vergelijkbaar met de toekomstige overgang van Joomla 3 naar 4. Joomla 4 zou voor Joomla net zo'€™n inhaalslag kunnen worden.

Jisse maakt en verkoopt extensies. Vragen krijgt hij vaak over een bepaald type extensies. Dan krijgt hij een supportvraag: '€œIk heb jouw component gedownload en de module werkt niet'€, terwijl het gaat om een plugin. De termen extensies, modules, plugins, componenten zijn dus verwarrend.

Welke extensietypen zijn er:

  • Component: het hoofddoel van de pagina (content, blog, forum etc.)
  • Modules: extra functionaliteit
  • Plugins
  • Templates: huisstijl
  • Libraries: voor developers

Dit is het onderscheid in de versies Joomla 1.0 tot 3. In Joomla 4 wordt het anders (daar wordt alles componenten genoemd).

Plugins kun je installeren in Joomla, je zet ze aan in de plugin manager. Een plugin haakt in op een event (iets wat gebeurt in Joomla). Hij werkt op de achtergrond, verwerkt taken via events: flexibel maar ook complex. Ze zijn onderverdeeld in typen (plugingroepen); het onderscheid zit in de events die erachter liggen. Gaat het om een content event, dan zou de plugin in de content groep geplaatst worden. Gaat het om users, dan in de user groep. Behalve als het gaat om gebruikersauthenticatie€¦ oftewel: het is een heel losse indeling.

Naast de core plugins zijn er plugins van derde-partij- extensies: E-commerce (payment, shipment), Content (extra velden, automatische content), deze plugins doen het niet zonder de extensie waar ze een uitbreiding op zijn.

Soorten plugins:

  • Authenticatie wordt door de authentication Joomla plugin geregeld, autorisatie bij de User.
  • De cookie plugin zorgt ervoor dat de remember me functie wordt geactiveerd.
  • Content plugins regelen dingen aan de voorkant van de site. Content is niet alleen artikelen; de content contact plugin bijvoorbeeld kan zorgen voor een contactlink naar de auteur van een artikel. En als je extra velden zou willen toevoegen aan het content invoerscherm in de backend, dan kun je daar een plugin voor schrijven. Zo'€™n plugin werkt dan ook op de content in de backend.
  • Voor zoeken zijn er search plugins en finder plugins (finder is de technische term voor smart search). De search zoekt op de site zelf (database), de finder in een index. Je splitst met een index content in alle velden die beschikbaar zijn en kunt heel goed filteren en doorzoekt alles dynamisch. Nadeel is dat het indexeren veel ruimte kost in je database. Als je de plugin Content Smart Search aanzet (en Smart Search gebruikt) worden artikelen steeds gesynchroniseerd als je ze opslaat.
  • Two factor authentication voegt onderdelen toe aan formulieren aan de voor- en achterkant en authenticeert. Hij zou dus in verschillende groepen moeten staan, maar hij staat in een groep (die, heel toepasselijk, two factor authentication heet).

Events:

Een event is een technische manier om ergens op in te haken. Ze worden getriggerd door een component of een module. Een event staat gelijk aan een stuk PHP code. We schrijven ze in design patterns. Een zo€'n design pattern is MVC (model -€“ view -€“ controller). Op een MVC component kun je altijd template overrides maken. En als je er een menu-item van aanmaakt, kun je er subs van aanmaken. Je kunt erop klikken en het vouwt uit. MVC is een technische manier waar de eindgebruiker iets aan heeft en de programmeur ook: die weet dat het altijd op een bepaalde manier gestructureerd is. Wat je eigenlijk doet is een driehoek maken, lijntjes trekken en pijltjes trekken om de stroom van gegevens te creeeren.

Volgens de Joomla documentatie zijn er drie verschillende design patters: observer - observable, publisher & subscriber, en chain of command.

  • Observer -€“ observable: er gebeurt iets, hier wil ik iets mee doen. Observable = MVC component dat een event genereert, observer = plugin. Ergens gebeurt iets, een plugin pikt het op. Dit dekt 90% van alle situaties af. Een MVC component heeft de keuze welke plugins hem monitoren. Binnen Joomla heb je geen mogelijkheid om onderscheid te maken wanneer een plugin het wel en niet moet doen. Je kunt hem alleen aan of uit zetten.
  • Publisher & subscriber: bijvoorbeeld een notificatie als een artikel geplaatst is.
  • Chain of command: meerdere concepten achter elkaar. Zodra de eerste ergens niets mee doet, wordt de volgende aangesproken, net zo lang tot er een wel iets doet. Voorbeeld: alle content plugins worden aangeroepen bij content. Authenticatie: we kijken of er een cookie is. Nee, dan kijken we of dit een geldige gebruiker is. Ja: dan zijn we klaar. Nee: dan moeten we verder gaan. En zo verder. De volgorde van plugins moet dus bij content plugins anders zijn dan bij authenticatie.

Groepen zijn een kunstmatige manier van indelen. Je kunt meerdere events uit meerdere groepen afvangen: profile = content + user; remember me = system + user. De bron waar het event plaatsvindt bepaalt welke plugins worden ingeladen. Captcha events vinden plaats als het component waar de captcha gebruikt moet worden actief is.

Autorisatie is altijd volgend op authenticatie.

System plugins mogen alles. Ze worden geactiveerd bij het opstarten van Joomla en kunnen alle events afvangen. Wil je een user plugin schrijven, dan zou je hem dus ook in de system groep kunnen plaatsen, dan werkt hij altijd. Gevaar: het wordt een vergaarbak omdat het in system sowieso geladen wordt. Er zitten dus altijd te veel plugins in de system groep.

Praktisch:

  • Wees voorzichtig met extra plugins installeren
  • Let op de volgorde: SEF plugin altijd als (een van de ) laatste, cache plugin als allerlaatste
  • Zet uit wat je niet nodig hebt: system/debugging (foutopsporing), system/log (gebruikerslog), want dat gebruik je toch niet.
  • Wees voorzichtig met de system/cache plugin. Zet die niet aan op een dynamische e-commerce site of andere dynamische site, want die doet aan full page caching. Wil je wel iets dynamisch gebruiken dan is JotCache de oplossing.

Jisses boek: http://yir.io/pjp

Zelf programmeren

Modules zijn het eenvoudigst (met een beetje code en html kom je een heel eind), componenten zijn het meest complex. Plugins zitten er tussenin, als je het een beetje weet kun je met Copy Paste Edit steeds de volgende maken.

Hoe weet je of de functies die je geschreven hebt in je eigen extensies nog werken in de volgende versie? Dat is de uitdaging. De vraag is eigenlijk: hoe ga je om met code? In de code van Joomla staat aangegeven wat er deprecated is, in de docs staat wat er gaat verdwijnen. Joomla 3.5 komt er nu aan en met iedere stap moet je als extensiebouwer je code controleren en aanpassen.

Programmacode is nooit af. Op het moment dat je niet zegt: hoe heb ik dit zo kunnen doen, heb je gewoon een tijd stilgestaan. Om tot refactoring te komen pak je steeds een stukje code dat je aanpast naar je huidige kennisniveau. Daar wordt je code beter van. En je ziet dat je herhaaldelijk bepaalde dingen doet, en dat kun je dan weer in nieuwe code zetten. Dan ga je de algemene code in een eigen library zetten, zodat je dat maar een keer hoeft aan te passen. Die library laat je gebruik maken van de code van Joomla.

Weten wat Jisse nog meer gaat doen? https://www.yireo.com/training/events#


Dokter Joomla

Case: Een klant maakt graag formulieren die hij onderin artikelen zet met een shortcode van RSForm. Daarvoor moet alle caching uit, anders doet het formulier het niet meer. Is er een alternatief voor?

Antwoord: Misschien laden in een module (artikel plus formulier, of alleen het formulier), want bij een module kun je caching uitzetten. Of het formulier in een module zetten en dan in het artikel de module laden in plaats van het formulier met de shortcode -€“ al weten we dan even niet hoe het dan met de caching zit. Even uitproberen dus.

Case: Ik heb een nieuwe website, die staat op de ene server, ik zoek een handige manier om hem naar de andere server te zetten.

Antwoord: met Akeeba backuppen, kickstarten in een submapje op de nieuwe locatie (eventueel met nieuwe database), kijken of alles goed staat en dan de oude site deleten en de nieuwe vanuit het mapje naar boven verplaatsen. Extra netjes is het als je een index.html maakt voor de periode dat-ie down is. En de checklist van René Kreijveld gebruiken: https://github.com/renekreijveld/livechecklist

Plaats reactie

Om een reactie te kunnen plaatsen op dit artikel zul je moeten inloggen aan de rechterzijde van deze pagina. Als je nog geen account hebt kun je er gratis een aanmaken waarna je een reactie kunt plaatsen.

j 362 j-2528 JoomlaCommunity

Laatste Nederlandstalige Joomla!® versies

Laatste forumberichten

Licentievoorwaarden

Op alle artikelen is de Creative Commons Licentie van toepassing.

Donateurs: ExactHost