| Door: Jisse Reitsma. | Categorie: Algemeen.

Joomla! 1.5: upgrades van template overrides

Met Joomla! 1.5 zijn templates uitgebreid met een belangrijke functionaliteit: template overrides. Met behulp van template overrides kan de opmaak van een component of module aangepast worden naar eigen wens. Een component of module moet hierbij wel geschreven zijn volgens het zogenaamde MVC-model (Model-View-Controller) waarbij binnenin de View layout-bestanden beschikbaar zijn, die binnen de template overschreven kunnen worden.

Template overrides maken het mogelijk om de HTML-code van componenten of modules aan te passen, maar met een beetje kennis van PHP is ook de functionaliteit van extensies uit te breiden. Misschien nog wel het grootste voordeel is dat template overrides onderdeel zijn van de eigen template en bij een upgrade van de Joomla! upgrade niet worden overschreven.

Dit klinkt allemaal positief, maar er zit een addertje onder het gras. Bij een upgrade van Joomla! is het mogelijk dat bepaalde functionaliteit zodanig verandert dat de template override niet meer functioneert. Denk hierbij aan een variabele die van naam wordt veranderd binnen het MVC-component, waarbij ook de naamgeving in het layout-bestand aangepast moet worden. Het kan zijn dat dit probleem direct naar voren komt door middel van een PHP Fatal Error op de desbetreffende pagina, maar het kan ook zijn dat er slechts een waarschuwing wordt gegenereerd. Het is dus aan te raden om na een upgrade van Joomla! logbestanden nauwgezet in de gaten te houden.

Naast dat template overrides fouten kunnen veroorzaken, kan het ook zijn dat variabelen die juist voor extra functionaliteit in de layout zorgen, niet worden meegenomen. Bij een upgrade van een component komt juist die feature naar voren waar je op zat te wachten, maar hiervoor moet wel de eigen override up-to-date worden gebracht.

Gevaarlijker zijn extra security features die worden geimplenteerd in zowel de achterliggende broncode als het layout-bestand. Als de override niet wordt aangepast, loopt de website gevaar gehackt te worden. Een goed voorbeeld hiervan is de introductie van de token-functionaliteit met Joomla! 1.5.3. Daarvoor waren formulieren gevoelig voor een aanval waarbij een hacker de POST-output van een formulier kon simuleren (een zogenaamde CSRF-aanval). Om te garanderen dat het verzonden formulier dat door Joomla! afgehandeld moet worden ook daadwerkelijk afkomstig is van dezelfde website, moet het formulier worden uitgerust van een unieke token. Hiervoor is het nodig dat de PHP-code “JHTML::_( 'form.token' )” wordt toegevoegd aan het layout-bestand. Is er een template override gemaakt van het layout-bestand, dan moet ook de template override aangepast zijn. Gebeurt dit niet, dan volgt er een "Invalid token" foutmelding, waarbij het formulier niet wordt afgehandeld.

Momenteel zijn alleen met de komst van Joomla! 1.5.1 en daarna de verandering met de formulier-token (Joomla! 1.5.3) layout-bestanden ingrijpend veranderd. In het design van een goede Joomla! MVC-extensie wordt er van tevoren goed rekening gehouden met deze gevaren van template overrides. Het doel is hierbij om van te voren te bepalen welke variabelen precies worden gebruikt in een layout-bestand, zodat de functionaliteit binnen de extensie probleemloos kan veranderen zonder dat het layout-bestand achteraf aangepast hoeft te worden. Helaas is dit praktisch vaak onmogelijk – software is nooit 100% af.

In het algemeen kan worden gezegd dat des te complexer een template override wordt, des te belangrijker het is om de override goed te controleren na een Joomla! upgrade. Het saaie vergelijken van iedere regel binnen het layout-bestand met de equivalent in de eigen override is een noodzaak.