Terug naar hoofdinhoud
Joomla template overrides: pas output aan zonder core hacks
Op deze pagina
# Topics

Joomla template overrides: pas output aan zonder core hacks

04 augustus 2026

Vroeg of laat wil elke eigenaar van een Joomla-site het uiterlijk van iets aanpassen: de auteursvermelding onder een artikel, de opmaak van een menu, de lay-out van een blogpagina. De verkeerde manier is om de core bestanden van Joomla te bewerken want een volgende update kan je werk overschrijven. De juiste manier is een van de beste ideeën van Joomla: template overrides, je eigen kopie van elk uitvoerbestand, veilig opgeslagen in je template, die automatisch geladen wordt en voorrang heeft op het origineel.

Dit artikel is een diepe duik in het override-systeem van Joomla. Het behandelt de basis voor eigenaren en redacteuren, praktisch override-werk voor sitebouwers, en de technische details voor ontwikkelaars. Het bouwt voort op het Focus On-artikel over Joomla-templates, dat templates als geheel introduceert; hier richten we ons volledig op overrides: component- en module-overrides, chrome, layout-overrides, alternatieve layouts, child templates, en - het deel dat bijna iedereen overslaat - hoe je overrides gezond houdt over Joomla-updates heen.

Een override is een beleefde manier om het oneens te zijn met Joomla: je past de weergave aan, terwijl de core ongewijzigd blijft.

Het doel is eenvoudig: je elke Joomla-uitvoer laten aanpassen zonder ooit een core-bestand aan te raken.

1. De basis

1.1 Wat is een template override?

Wanneer Joomla een pagina rendert, komt elk stuk uitvoer uit een klein PHP-bestand: een artikel uit de artikel-layout van com_content, een menu uit de layout van mod_menu, een paginering uit een gedeeld layout-bestand. Een template override is een kopie van zo'n bestand in de map html/ van je template. Bestaat de kopie, dan gebruikt Joomla die en negeert het origineel. Zo niet, dan draait het origineel.

components/com_content/tmpl/article/default.php     het origineel (core)
templates/cassiopeia/html/com_content/article/default.php   jouw override

Dat is het hele mechanisme. Geen configuratie, geen registratie, geen databaseregel - het bestaan van het bestand is de override.

1.2 Waarom overrides bestaan

  • Updates blijven veilig: core-bestanden worden bij elke Joomla-update vervangen; je map html/ wordt niet aangeraakt.
  • Elke markup wordt van jou: je bepaalt elke class, tag en elk attribuut zonder iets te hacken.
  • Ze zijn eerlijk: wie de site doorlicht, vindt alle aanpassingen op een voorspelbare plek.

1.3 Wat je kunt overriden

UitvoerOverride staat in
Component-views (artikel, categorielijst, contact, ...) html/com_content/article/, html/com_contact/contact/, ...
Modules (menu, login, artikelen, ...) html/mod_menu/, html/mod_login/, ...
Gedeelde layouts (JLayout: paginering, velden, knoppen, ...) html/layouts/joomla/...
Module-chrome (de doos om een module heen) html/layouts/chromes/

Cassiopeia levert zelf overrides mee - kijk in templates/cassiopeia/html/ en je vindt mod_menu-layouts (de metismenu-dropdowns), een banner-layout voor mod_custom, en twee chromes (card.php, noCard.php). Het core-template gebruikt hetzelfde mechanisme dat jij gaat gebruiken.

Het mechanisme dekt ook extensies van derden: een goed gebouwde shop-, blog- of evenementencomponent override je als html/com_huncomponent/... en hun modules als html/mod_hunmodule/, precies zoals de core. Of een extensie netjes te overriden is, is een nuttige kwaliteitstest voordat je haar in gebruik neemt.

Een ding dat op een override-onderwerp lijkt maar het niet is: systeem-e-mails. Registratiemails, wachtwoordresets en andere meldingen pas je aan via de component Mail-templates in de backend - zie het Focus On-artikel over mail-templates - niet via bestanden in html/.

Naar boven

2. Je eerste override

2.1 Via de backend (aanbevolen)

Joomla maakt overrides voor je aan, met de juiste paden, in het templatebeheer:

  1. Ga naar Systeem → Site-templates en open je template (niet de stijl - het template).
  2. Open het tabblad Overrides aanmaken.
  3. Kies een component-view (bijvoorbeeld com_content → article), een module of een layout.
  4. Joomla kopieert de originele bestanden naar de map html/ van het template en bevestigt het pad.
  5. Vind het nieuwe bestand onder het tabblad Editor en begin met bewerken - of bewerk het lokaal in je IDE.

2.2 De handmatige manier

Hetzelfde met de hand: kopieer het bestand uit de map tmpl van de component naar het gespiegelde pad onder html/ van je template:

cp components/com_content/tmpl/article/default.php \
   templates/cassiopeia/html/com_content/article/default.php

Het mappenpatroon is altijd: html/{extensie}/{view}/{bestand} voor componenten, html/{module}/{bestand} voor modules.

2.3 Een kleine eerste bewerking

Open je nieuwe default.php-override en maak een kleine, zichtbare wijziging - zet een extra div om de artikeltekst, voeg een class toe, verplaats de auteursregel. Ververs de pagina: jouw markup verschijnt. Verwijder het override-bestand en ververs: het origineel keert terug. Heb je die lus een keer gevoeld - kopieren, bewerken, verversen, verwijderen herstelt - dan zijn overrides niet eng meer.

2.4 Een waarschuwing voordat je alles kopieert

Override alleen wat je echt verandert. Elke override is een bestand dat je over updates heen moet onderhouden (sectie 9). Een template met vijftig onaangeraakte override-kopieen is niet aangepast - het zijn vijftig toekomstige onderhoudsklusjes.

Naar boven

3. Hoe Joomla het juiste bestand vindt

3.1 De zoekvolgorde

Voor elke view en module loopt Joomla een kort lijstje locaties af en gebruikt het eerste bestand dat het vindt:

1. templates/{child}/html/...      het actieve child template (indien aanwezig)
2. templates/{parent}/html/...     het parent template
3. {extensie}/tmpl/...             de eigen layout van de extensie (de standaard)

Deze volgorde verklaart twee belangrijke gedragingen: een child template kan de overrides van zijn parent overriden, en de eigen layout van een extensie is simpelweg het laatste redmiddel. De actieve template-stijl bepaalt welk template (en dus welke set overrides) in gebruik is - een site kan zelfs verschillende templates op verschillende menu-items gebruiken.

3.2 Naamgeving is alles

Overrides worden puur op pad en bestandsnaam gematcht. html/com_content/article/default.php werkt; html/com_content/Article/default.php of html/content/article/default.php doet stilletjes niets. Als een override "niet werkt", is in negen van de tien gevallen de naam of de map fout.

3.3 Sublayouts: de bestanden met underscore

Kijk in components/com_content/tmpl/article/ en je vindt default.php plus default_links.php. De underscore-bestanden zijn sublayouts, geladen vanuit het hoofdbestand met $this->loadTemplate('links'). Je overridet ze precies zoals het hoofdbestand - en ze laten je een fragment van een view overriden in plaats van het geheel. Zit jouw wijziging in een sublayout, kopieer dan alleen dat bestand en laat default.php met rust: een bestand minder te onderhouden.

Naar boven

4. Module-overrides en chrome

4.1 Module-layout-overrides

Modules volgen hetzelfde patroon met een niveau minder nesting: html/mod_articles_news/default.php overridet de layout van de nieuwsmodule. Veel modules bieden ook een Layout-dropdownmenu in hun geavanceerde opties; elk bestand dat je met een eigen naam aan de override-map toevoegt (zeg cards.php) verschijnt daar als kiesbare layout. Dat geeft je layouts per module-instantie: twee instanties van dezelfde module, twee verschillende presentaties.

4.2 Wat chrome is

Chrome is de omhulling rond een module: de doos, de titel-tag, de omringende classes. Het staat los van de eigen layout van de module en wordt bepaald door kleine bestanden in layouts/chromes/. De Joomla core levert er vier:

ChromeUitvoer
none De kale module-uitvoer, helemaal geen omhulling.
html5 Een instelbare HTML5-omhulling met kopopties.
outline Een debug-kader dat de positienaam toont (gebruikt door de positie-preview ?tp=1).
table Verouderde tabel-omhulling.

Cassiopeia voegt zijn eigen chromes card en noCard toe in html/layouts/chromes/ - en dat is ook waar jouw eigen chrome komt te staan.

4.3 Een eigen chrome bouwen

Maak templates/{template}/html/layouts/chromes/hero.php, en de chrome-naam hero is beschikbaar overal waar chrome wordt gekozen: in de index.php van het template (<jdoc:include type="modules" name="banner" style="hero" />) en in de optie Geavanceerd → Modulestijl van elke module. Een chrome-bestand ontvangt het module-object en zijn parameters en print simpelweg de omhulling rond $module->content. Een klein bestand, en elke module op de site kan meedoen met je nieuwe doosontwerp.

Naar boven

5. Layout-overrides (JLayout)

5.1 De gedeelde layouts

Naast componenten en modules heeft Joomla een bibliotheek van gedeelde layouts in de map layouts/ in de root: paginering, weergave van aangepaste velden, formulieronderdelen, knoppen, iconen. Core-code rendert ze via de klasse LayoutHelper:

use Joomla\CMS\Layout\LayoutHelper;

echo LayoutHelper::render('joomla.content.info_block.author', ['item' => $this->item]);

5.2 Een gedeelde layout overriden

De puntnotatie vertaalt naar een pad, en de override spiegelt het onder html/layouts/:

layouts/joomla/content/info_block/author.php                    origineel
templates/{template}/html/layouts/joomla/content/info_block/author.php   override

Layout-overrides zijn krachtig omdat gedeelde layouts overal opduiken: override de layout voor aangepaste velden een keer (layouts/joomla/content/fields.php en verwanten) en elke component die velden rendert, pikt hem op. Diezelfde reikwijdte vraagt extra zorg - test meer dan een paginatype na het wijzigen van een gedeelde layout.

5.3 Het juiste niveau kiezen

Dezelfde visuele wijziging kan vaak in een component-override, een module-override of een layout-override. Vuistregel: override op het smalste niveau dat je doel dekt. Een artikel-view? Component-override. Een module-instantie? Een layout met eigen naam. Een patroon dat over de hele site terugkeert (paginering, velduitvoer)? Daar zijn layout-overrides voor.

Naar boven

6. Alternatieve layouts

6.1 Een override met eigen naam wordt een keuze

Kopieer een override-bestand onder een nieuwe naam - zeg mycard.php in plaats van default.php - en Joomla gebruikt het niet automatisch. In plaats daarvan verschijnt het als alternatieve layout in dropdownmenu's: bij een artikel onder Opties → Layout, bij de lijstlayout van een categorie, bij de layout-instelling van een module. Jij kiest per item, per categorie, per menu-item of per module welke layout draait.

6.2 Menu-item-layouts hebben de XML nodig

Om een alternatieve layout aan te bieden als menu-itemtype (een nieuwe keuze naast "Een artikel" in de menu-wizard), koppel je het PHP-bestand aan een XML-metadatabestand met dezelfde naam (mycard.php + mycard.xml). De XML volgt het patroon van de core default.xml in de tmpl-map van de view: een titel, een beschrijving en de request-velden die de view nodig heeft. Zonder de XML is de layout wel kiesbaar per item, maar niet in het menu.

6.3 Wat alternatieve layouts oplossen

Ze maken een einde aan "als artikel X, doe iets anders"-hacks in een uitgedijde override. Een nieuwsartikel, een recept en een landingspagina kunnen elk hun eigen layout-bestand krijgen, netjes gekozen in de content zelf - een bestand per presentatie, geen voorwaarden.

Naar boven

7. Overrides in child templates

7.1 Waarom overrides in een child horen

Sinds Joomla 4.1 kunnen templates child templates hebben, en Cassiopeia ondersteunt ze standaard. De parent levert de machinerie; het child bevat jouw wijzigingen: stijlinstellingen, eigen CSS en overrides. Wordt het parent template bijgewerkt, dan overleeft je child - en elke override erin - onaangeraakt. Bouw je vandaag op Cassiopeia, zet je overrides dan in een child, niet in Cassiopeia zelf.

7.2 Hoe de zoekvolgorde met children omgaat

Zoals sectie 3 liet zien, wordt de map html/ van het child voor die van de parent bekeken. De praktische gevolgen:

  • Een child-override wint van dezelfde override in de parent.
  • Het child heeft alleen de bestanden nodig die jij wijzigt; al het andere valt terug op de parent en daarna op de core.
  • Een bestaande site naar een child template verhuizen is vooral de map html/ en de eigen CSS verplaatsen.

7.3 Assets wonen in media/

Sinds Joomla 4.1 staan template-assets (CSS, JS, afbeeldingen) onder media/templates/site/{template}/ in plaats van in de templatemap zelf. Overrides die assets laden, gebruiken het beste de Web Asset Manager of HTMLHelper::_('stylesheet', ...) met relatieve paden, zodat de child/parent-terugval ook voor de assets zelf werkt.

Naar boven

8. Override-recepten uit de praktijk

8.1 De artikel-inforegel aanpassen

Doel: toon "Door Jane, 3 mei 2026" in plaats van Joomla's volledige infoblok. Override de infoblok-layout (layouts/joomla/content/info_block/) of, voor volledige controle, de default.php van de artikel-view, en print precies de velden die je wilt uit $this->item. Smalste niveau: de infoblok-layout, want die repareert ook de categorie- en featured-views.

8.2 Blogkaarten voor een categorie

Doel: een categorie toont artikelen als kaarten met afbeelding, de rest blijft standaard. Maak een alternatieve layout voor de categorie-blogview (html/com_content/category/cards.php + cards_item.php) en kies die in de opties van die categorie of in het menu-item. Geen voorwaarden, geen effect op andere categorieen.

8.3 Elke moduledoos herstijlen

Doel: consistente modulestijl over de hele site. Schrijf een eigen chrome (sectie 4.3) en stel die in als standaard modulestijl in de template-opties of per positie in index.php. Een chrome-bestand later wijzigen, herstijlt elke module die het gebruikt.

8.4 Aangepaste velden, aangepaste markup

Doel: een "prijs"-veld renderen als opgemaakte badge. Override de veldweergave-layout (layouts/joomla/content/fields.php rendert de lijst; individuele veldtypen renderen via plugins/fields/{type}/tmpl/, te overriden als html/plg_fields_{type}/). Smalle variant: override alleen het ene veldtype dat je herstijlt.

Naar boven

9. Updates overleven: override-onderhoud

9.1 De kosten waar niemand het over heeft

Een override is een momentopname van een core-bestand. Wanneer een Joomla-update het origineel verbetert - een bugfix, een toegankelijkheidsverbetering, een beveiligingsrelevante escape-aanroep - blijft jouw override de oude code draaien. Overrides breken niet bij updates; ze lopen stilletjes achter, en dat is erger, want niets ziet er kapot uit.

9.2 Joomla houdt dit voor je bij

Weinig mensen weten dat Joomla precies dit registreert. Na een update markeert de tabel #__template_overrides de override-bestanden waarvan het origineel veranderde, en het templatebeheer toont ze als bijgewerkte bestanden ("Updated files to check") met de datum van de wijziging. De werkwijze:

  1. Open na elke core-update Systeem → Site-templates → je template.
  2. Bekijk de lijst bijgewerkte bestanden.
  3. Vergelijk per bestand jouw override met het nieuwe origineel (een diff-tool maakt dit snel) en neem de relevante wijzigingen over in je override.
  4. Markeer de regel als gecontroleerd (Mark Checked), zodat de lijst betekenisvol blijft.

9.3 Maak toekomstige diffs makkelijk

  • Houd overrides minimaal: hoe minder regels afwijken van het origineel, hoe sneller elke diff.
  • Zet commentaar bij je wijzigingen (// gewijzigd: auteursregel verplaatst), zodat toekomstige-jij weet wat behouden moet blijven.
  • Houd de site - of minstens de templatemap - in versiebeheer. git diff na een update beantwoordt de meeste vragen meteen.
  • Verwijder overrides die je niet meer nodig hebt. Het beste onderhoud gaat over bestanden die niet bestaan.
Naar boven

10. Onder de motorkap (ontwikkelaarsblik)

10.1 Waar de zoektocht gebeurt

Component-views erven van HtmlView, waarvan de template-zoekpaden in deze volgorde worden gevuld: eerst de override-map van het template, als laatste de tmpl-map van de extensie. loadTemplate() loopt die paden af; hetzelfde gebeurt voor modules in de module-helper en voor layouts in LayoutHelper, die templates/{template}/html/layouts vooraan zijn include-paden zet. Dat is de hele magie: een geordend lijstje mappen.

10.2 Je eigen extensie overridebaar maken

Overridebaarheid krijg je gratis door de conventies te volgen:

  • Zet view-layouts in tmpl/{view}/default.php (componenten) of tmpl/default.php (modules).
  • Splits grote views in sublayouts (default_items.php), zodat gebruikers fragmenten kunnen overriden.
  • Lever een default.xml met request-metadata mee, zodat je views menu-itemtypen kunnen worden - en gebruikers hun eigen alternatieve layouts naast de jouwe kunnen zetten.
  • Render terugkerende patronen via LayoutHelper met een $basePath, zodat ook die layouts overridebaar zijn.

10.3 Override-bestanden zijn alleen weergavecode

Een override draait binnen de view, dus $this is het view-object: $this->item, $this->items, $this->params zijn je data. Twee regels houden overrides gezond. Ten eerste: geen businesslogica: een override maakt de data op die hij krijgt; hij bevraagt geen database en roept geen modellen aan (dat werk hoort in een plugin of de modellaag). Ten tweede: houd de escaping intact: de originelen wikkelen uitvoer bewust in $this->escape()- en htmlspecialchars()-aanroepen. Ze verwijderen tijdens het herstijlen is hoe overrides XSS-gaten in verder veilige sites introduceren.

10.4 Overrides en caching

Override-uitvoer wordt exact zo gecachet als de originele uitvoer: paginacache en de eigen cache-instellingen van de module gelden onveranderd. Denk hieraan wanneer een bewerkte override "niet verschijnt" - Systeem → Cache legen is stap een van override-debuggen, voor je aan het bestandspad gaat twijfelen.

Naar boven

11. Overrides en de Web Services API

Overrides zijn presentatie, en de Web Services API slaat presentatie volledig over: een API-verzoek om een artikel geeft ruwe data uit het model terug, dus geen component-override, chrome of layout-override beinvloedt de API-uitvoer. Heeft een headless frontend andere "markup" nodig, dan woont die markup in de afnemende applicatie, niet in Joomla-overrides.

De API raakt templates op een punt: template-stijlen zijn via REST te beheren (v1/templates/styles/site en v1/templates/styles/administrator), dus provisioning-tools kunnen de actieve stijl van een site omschakelen - en daarmee welke override-set van welk template in gebruik is. De override-bestanden zelf zijn bestandssysteem-artefacten: zet ze uit met je normale deploymentproces (git, rsync), niet via een API.

Naar boven

12. SEO en metadata

Overrides zijn het scherpste SEO-gereedschap dat de meeste Joomla-site-eigenaren nooit gebruiken. Zoekmachines lezen je markup, en overrides geven je elke tag in handen: repareer de koppenhierarchie van een template (een h1, logische h2/h3-volgorde in artikel- en categorieviews), verwijder omhullingsballast die content begraaft, en voeg semantische elementen toe (article, time, figure) waar de standaarduitvoer kale divs gebruikt.

Ook gestructureerde data hoort hier: een override is de natuurlijke plek om uitvoer te verrijken met schema.org-attributen of JSON-LD voor artikelen, evenementen of producten - als aanvulling op wat de core schema.org-plugin biedt. En omdat overrides ook aangepaste velden renderen, laten ze je machineleesbare data (prijzen, datums, beoordelingen) precies in de markup zetten die zoekmachines verwachten. Test na zulke wijzigingen met de gebruikelijke structured-data-validators; een typefout in schema-markup is erger dan geen schema.

Dezelfde controle maakt overrides Joomla's belangrijkste gereedschap voor toegankelijkheid. Landmarks (nav, main, aside), gecorrigeerde kopniveaus, labels die netjes aan formuliervelden gekoppeld zijn, en een logische focusvolgorde voor toetsenbordgebruikers zijn allemaal override-werk. Toegankelijkheid en SEO verbeteren hier samen: de semantische markup die een schermlezer helpt, is dezelfde markup die een zoekmachine beloont, en beide brengen je dichter bij WCAG-naleving.

Naar boven

13. Veelvoorkomende fouten en valkuilen

13.1 Het core-bestand zelf bewerken

Symptoom: een aanpassing verdween na de laatste Joomla-update.

Oplossing: de wijziging is gemaakt in het eigen tmpl-bestand van de extensie. Doe hem opnieuw als override in de map html/ van het template, waar updates niet bij kunnen - dat is het hele punt van het mechanisme.

13.2 De override die niets doet

Symptoom: het override-bestand bestaat, maar de pagina negeert het.

Oplossing: controleer, in volgorde: de exacte map- en bestandsnaam (sectie 3.2), of de actieve template-stijl het template is dat je bewerkte (op dit menu-item kan een andere stijl staan), of een override in het child template wint, en leeg als laatste de cache.

13.3 Alles overriden "nu je toch bezig bent"

Symptoom: de lijst bijgewerkte bestanden toont na een core-update veertig regels; niemand durft er nog aan te komen.

Oplossing: verwijder elke override die identiek is aan het origineel (een diff laat dat in seconden zien). Houd alleen echte wijzigingen, en kies sublayout- en layout-overrides boven kopieen van complete views.

13.4 Achtergebleven overrides na updates

Symptoom: een bug of toegankelijkheidsprobleem dat Joomla maanden geleden oploste, staat nog steeds op jouw site.

Oplossing: je override bevat nog de oude code. Neem de werkwijze van sectie 9 over: bekijk na elke update de bijgewerkte bestanden en neem wijzigingen over in je overrides. Bij fixes met beveiligingsimpact is dit urgent, geen cosmetica.

13.5 Businesslogica in de override

Symptoom: een override draait databasequery's of roept modellen aan, en de site wordt traag of breekt wanneer een extensie updatet.

Oplossing: verplaats de logica naar waar ze hoort - een plugin, een module of het model - en laat de override alleen de data opmaken die de view al heeft.

13.6 Verloren escaping

Symptoom: na het herstijlen van een override rendert door gebruikers aangeleverde content als rauwe HTML.

Oplossing: herstel de $this->escape()- / htmlspecialchars()-aanroepen uit het originele bestand. Stijlwijzigingen mogen nooit uitvoer-escaping verwijderen.

Naar boven

14. Best practices

Als je maar een paar dingen uit dit artikel onthoudt, onthoud dan deze:

  • Bewerk nooit core- of extensiebestanden; elke markup-wijziging is een override in de map html/ van het template.
  • Gebruik het tabblad Overrides aanmaken, zodat paden en namen altijd kloppen.
  • Override op het smalste niveau dat het probleem oplost: sublayout voor view, een veldtype voor alle velden.
  • Zet overrides in een child template, zodat updates van het parent template ze nooit raken.
  • Gebruik alternatieve layouts in plaats van als-dan-constructies voor verschillende presentaties van dezelfde view.
  • Bekijk na elke Joomla-update de lijst bijgewerkte bestanden en neem wijzigingen over in je overrides.
  • Houd overrides minimaal, becommentarieerd en in versiebeheer; verwijder wat je niet meer nodig hebt.
  • Houd escaping intact, en houd businesslogica buiten override-bestanden.
Naar boven

15. In het kort

PADEN        component  html/com_content/article/default.php
             module     html/mod_menu/default.php
             layout     html/layouts/joomla/content/info_block/author.php
             chrome     html/layouts/chromes/mijnchrome.php

ZOEKEN       child html/ > parent html/ > extensie tmpl/
             gematcht op exact pad + bestandsnaam, eerste hit wint

AANMAKEN     Systeem > Site-templates > template > Overrides aanmaken
             handmatig: cp van tmpl/ naar gespiegeld pad in html/

SUBLAYOUT    default_links.php  = loadTemplate('links')
             override fragmenten, geen complete views

ALTERNATIEF  kopie met nieuwe naam (mycard.php) = kiesbare layout
             + mycard.xml met metadata = menu-itemtype

CHROME       core: none, html5, outline, table
             cassiopeia: card, noCard
             eigen chrome-bestand = nieuwe "Modulestijl"-optie

ONDERHOUD    na elke update: template > bijgewerkte bestanden
             (#__template_overrides volgt gewijzigde originelen)
             diff override vs nieuw origineel > overnemen > Mark Checked

REGELS       alleen weergavecode - geen query's, geen modellen
             $this->escape() intact houden
             cache legen voor je aan het pad twijfelt

API          overrides raken API-uitvoer niet (ruwe data)
             v1/templates/styles/site beheert alleen de actieve stijl

DEV          tmpl/ + default.xml + sublayouts + LayoutHelper
             = je extensie is volledig overridebaar
Naar boven

16. Samenvatting

Template overrides zijn Joomla's antwoord op het oudste CMS-dilemma - aanpassen of updatebaar blijven - en ze geven je beide:

  • Het mechanisme: een gekopieerd bestand in de map html/ van het template wint van het origineel; de zoektocht loopt child template, parent template, extensie.
  • Vier soorten: component-view-overrides, module-overrides, gedeelde layout-overrides (JLayout), en chrome voor de dozen rond modules.
  • Alternatieve layouts maken van overrides met een eigen naam keuzes per item, categorie en menu - met een XML-bestand zelfs menu-itemtypen.
  • Child templates houden je overrides veilig voor parent-updates; assets volgen dezelfde terugval via media/templates/.
  • Onderhoud is het echte vakwerk: de lijst bijgewerkte bestanden (gedragen door #__template_overrides) vertelt je na elke update welke overrides achterlopen - bekijken, diffen, overnemen, afvinken.
  • Discipline: minimale overrides, geen businesslogica, escaping intact, versiebeheer.

Beheers je overrides, dan verandert Joomla van karakter: van een CMS waarvan je de uitvoer accepteert naar een waarvan jij de uitvoer schrijft, zonder ooit het vermogen te verliezen om te updaten.

Draagt jouw site jaren aan opgestapelde overrides - deels verouderd, deels verlaten, deels stilletjes zonder de beveiligings- en toegankelijkheidsfixes van een dozijn core-updates - dan is een override-audit een van de dankbaarste kleine projecten die er zijn: alles diffen, de dode last verwijderen, moderniseren wat overblijft. Het is precies het soort gestructureerde opruimwerk dat een Joomla-specialist in een dag doet, en de site is daarna sneller, veiliger en makkelijker te updaten.

Naar boven
Joomla template overrides: pas output aan zonder core hacks
Peter Martin
Peter Martin
Joomla Specialist

Peter is Joomla specialist en Linux admin voor snelle, veilige en schaalbare websites.

Gerelateerde artikelen