Skip to main content

Focus op Joomla-categorieën: van basisprincipes tot developer hooks

Categorieën zijn een van de belangrijkste bouwstenen van Joomla. In de backend lijken ze eenvoudig, maar ze raken bijna elk onderdeel van het systeem: contentorganisatie, navigatie, URL’s, rechtenbeheer, templates en zelfs maatwerkextensies.

Dit artikel legt uit hoe Joomla-categorieën echt werken. Het behandelt de basis voor website-eigenaren en redacteuren, de praktische inrichting voor beheerders en de technische details voor ontwikkelaars. Je leert hoe je categorieën aanmaakt, hoe nesting onder water werkt, hoe Access Control hierin past en hoe je de meest voorkomende fouten voorkomt.

Het doel is eenvoudig: je Joomla-categorieën goed genoeg laten begrijpen zodat je ze met vertrouwen kunt gebruiken.

1. De basis

1.1 Wat is een categorie?

Een categorie is een container waarmee content in Joomla wordt gegroepeerd en georganiseerd. Je kunt het zien als een slimme map voor items.

Categorieën dienen twee belangrijke groepen gebruikers:

  • Ze helpen redacteuren om content logisch te organiseren.
  • Ze helpen bezoekers om gerelateerde content eenvoudig te vinden.

1.2 Categorieën zijn overal

Categorieën worden niet alleen gebruikt voor artikelen. De meeste Joomla-corecomponenten gebruiken ze:

  • Artikelen: com_content
  • Contacten: com_contact
  • Nieuwsfeeds: com_newsfeeds
  • Banners: com_banners

Veel extensies van derden gebruiken hetzelfde categoriesysteem. Dat betekent dat zodra je categorieën begrijpt, je een groot deel van Joomla begrijpt.

1.3 Waarom categorieën gebruiken?

Categorieën lossen meerdere praktische problemen tegelijk op:

DoelVoorbeeld
Organisatie Groepeer artikelen onder “Nieuws” apart van “Evenementen”.
Navigatie Maak menu-items zoals “Categorieblog” of “Categorielijst”.
Toegangsbeheer Beperk een categorie tot alleen “Geregistreerde gebruikers”.
Styling Pas verschillende layouts of templates per categorie toe.
URL-structuur Krijg nette URL’s zoals /nieuws/joomla-6-uitgebracht in plaats van /artikel/42.

1.4 Waar vind ik categorieën?

In de Joomla 6-backend kun je categorieën op verschillende plekken beheren:

Systeem     → Beheren   → Categorieën      (globaal overzicht)
Inhoud      → Artikelen → Categorieën      (artikelcategorieën)
Componenten → Contacten → Categorieën      (contactcategorieën)
Componenten → Banners   → Categorieën      (bannercategorieën)

Elke component toont alleen de categorieën die erbij horen, maar op de achtergrond staan ze allemaal in dezelfde databasetabel. Daar komen we later op terug.

2. Categorieën aanmaken en beheren

2.1 Een categorie aanmaken

Om een nieuwe artikelcategorie aan te maken, ga je naar:

Inhoud → Artikelen → Categorieën → Nieuw

Twee velden zijn verplicht:

  • Titel: de leesbare naam die in lijsten en menu’s wordt getoond.
  • Alias: de korte naam die in de URL wordt gebruikt. Joomla kan deze automatisch genereren op basis van de titel.

2.2 Het categorie-bewerkscherm

Het bewerkscherm is verdeeld in tabbladen. Elk tabblad beheert een ander aspect van de categorie:

TabbladWat het beheert
Categorie Titel, bovenliggende categorie, status, toegang, taal, beschrijving.
Opties Layout-overschrijvingen, alternatieve layout, afbeelding.
Publiceren Aanmaak- en wijzigingsdatums, auteur, meta-info, versienotitie.
Rechten ACL per gebruikersgroep: aanmaken, verwijderen, bewerken, status wijzigen, eigen items bewerken.

2.3 Belangrijke velden uitgelegd

  • Bovenliggend: laat leeg voor een categorie op het hoogste niveau, of kies een andere categorie om hierin te nesten.
  • Status: Gepubliceerd, Gedepubliceerd, Gearchiveerd of Verplaatst naar prullenbak.
  • Toegang: Publiek, Gast, Geregistreerd, Speciaal, Super Users of je eigen aangepaste toegangsniveau.
  • Taal: koppel de categorie aan een specifieke sitetaal, of laat deze op “Alle” staan.
  • Notitie: een intern label dat alleen zichtbaar is in de backend.
  • Versienotitie: een korte melding die wordt opgeslagen in de versiegeschiedenis wanneer je de categorie opslaat.

3. Geneste categorieën

3.1 De boomstructuur

Joomla maakt het mogelijk om categorieën binnen andere categorieën te nesten. Het resultaat is een boomstructuur:

ROOT
├── Nieuws
│   ├── Nationaal
│   └── Internationaal
├── Evenementen
│   ├── Workshops
│   └── Meetups
└── Over ons

Achter de schermen slaat Joomla deze boomstructuur op met een techniek die het Nested Set Model heet. Elke categorie heeft twee extra waarden: lft (links) en rgt (rechts). Deze waarden maken diep geneste queries erg snel.

3.2 Hoe lft en rgt echt werken

Neem deze kleine boomstructuur:

Nieuws
 ├── Bedrijfsnieuws
 └── Joomla Nieuws
      ├── Extensies
      └── Templates

Joomla slaat dit als volgt op:

Nieuws            lft=1   rgt=10
Bedrijfsnieuws    lft=2   rgt=3
Joomla Nieuws     lft=4   rgt=9
Extensies         lft=5   rgt=6
Templates         lft=7   rgt=8

De regel is eenvoudig: een oudercategorie omsluit altijd zijn onderliggende categorieën. De lft-waarde van de ouder is kleiner dan die van elk kind, en de rgt-waarde van de ouder is groter dan die van elk kind.

3.3 De boomstructuur lezen

Een categorie bevindt zich binnen een andere categorie wanneer:

child.lft > parent.lft
AND child.rgt < parent.rgt

Bijvoorbeeld: “Extensies” (5, 6) bevindt zich binnen “Joomla Nieuws” (4, 9), omdat 5 > 4 en 6 < 9.

3.4 Waarom dit belangrijk is

Om alle onderliggende categorieën van “Joomla Nieuws” op te halen, heeft Joomla maar één query nodig:

SELECT *
  FROM #__categories
 WHERE lft > 4 AND rgt < 9
 ORDER BY lft;

Dit retourneert “Extensies” en “Templates” zonder recursie. Zelfs bij een enorme boomstructuur blijft de uitlezing snel.

3.5 Wanneer de boomstructuur breekt

De waarden lft en rgt moeten consistent blijven. De boomstructuur kan stukgaan wanneer:

  • Categorieën direct in de database worden aangepast.
  • Een migratie mislukt.
  • Een maatwerkextensie categorieën verkeerd toevoegt.
  • Ouder-kindrelaties veranderen zonder de nested set-waarden bij te werken.
  • Een mislukte opslag lege plekken of dubbele waarden achterlaat.

Typische symptomen zijn: verkeerde sortering, ontbrekende subcategorieën of opslagfouten in de backend.

3.6 De knop Rebuild

Het categorieoverzicht bevat een knop Rebuild in de toolbar. Deze herberekent de waarden:

lft, rgt, level, path

Gebruik Rebuild wanneer:

  • De sortering niet klopt.
  • Categorieën verdwijnen uit hun verwachte oudercategorie.
  • Je net een migratie hebt afgerond.
  • Je directe SQL-wijzigingen hebt gemaakt.
  • Joomla boomstructuurfouten meldt.

Rebuild is een reparatietool, geen vervanging voor correcte extensiecode. Extensies moeten altijd Joomla’s API’s gebruiken in plaats van ruwe SQL-inserts.

3.7 Praktische regels

  • Een subcategorie erft niet automatisch artikelen van de oudercategorie.
  • Rechten worden van de oudercategorie geërfd, tenzij je ze overschrijft.
  • Wanneer je een categorie verplaatst, verplaatsen alle onderliggende categorieën mee.
  • Houd de boomstructuur beperkt, twee of drie niveaus is meestal genoeg. Gebruik Tags voor onderwerpen die over meerdere categorieën heen lopen.

4. Praktijkvoorbeelden

De juiste categorie-structuur hangt af van het type website. Hieronder staan drie veelvoorkomende patronen.

4.1 Nieuwswebsite

Nieuws
 ├── Politiek
 ├── Sport
 ├── Tech
 └── Cultuur

4.2 Universiteitswebsite

Afdelingen
 ├── Techniek
 ├── Geneeskunde
 └── Rechten

4.3 Webshop

Producten
 ├── Laptops
 ├── Telefoons
 └── Accessoires

Het kernidee is in alle drie de gevallen hetzelfde: de categorieboom weerspiegelt hoe bezoekers over de content denken.

5. Categorieën in de frontend

5.1 Menu-itemtypes

Joomla biedt verschillende menu-itemtypes die met categorieën werken:

Menu-itemtypeWat het toont
Categorieblog Artikelen uit een categorie in bloglayout.
Categorielijst Artikelen uit een categorie in een sorteerbare tabel met paginering.
Alle categorieën tonen Een boomstructuur met alle categorieën vanaf een gekozen root.
Enkel artikel Eén artikel, gerelateerd maar niet strikt een categorieweergave.

5.2 Layoutopties voor categorieblog

Het menu-item “Categorieblog” is het meest flexibel. Je kunt configureren:

  • Hoofdartikelen over de volledige breedte.
  • Intro-artikelen verdeeld over één tot zes kolommen.
  • Links (alleen titels) naar oudere content.
  • Paginering, sortering en filters per categorie.

5.3 URL’s en routing

Met SEF-URL’s ingeschakeld maakt Joomla nette URL’s op basis van de categorieboom:

/nieuws                          → hoofdcategorie
/nieuws/nationaal                → subcategorie
/nieuws/nationaal/verkiezingen-2026 → artikel binnen de subcategorie

De router van Joomla 6 bouwt deze geneste categoriepaden automatisch op, zolang aliassen uniek zijn binnen dezelfde oudercategorie.

6. Toegangsbeheer (ACL)

6.1 Twee verschillende concepten

Mensen halen in Joomla vaak twee verschillende ACL-concepten door elkaar. Ze zijn niet hetzelfde:

ConceptWelke vraag beantwoordt het?
Toegang (Viewing Access Level) Wie kan dit zien?
Rechten (Actions) Wie kan hier wat mee doen?

6.2 Toegangsniveaus

Je stelt het toegangsniveau in op het tabblad Categorie. De categorie en de artikelen daarin zijn alleen zichtbaar voor gebruikers die bij het gekozen toegangsniveau horen.

Joomla bevat standaard deze toegangsniveaus:

  • Publiek
  • Gast
  • Geregistreerd
  • Speciaal
  • Super Users

Je kunt ook eigen toegangsniveaus definiëren, bijvoorbeeld voor betaalde lidmaatschappen of interne medewerkerszones.

6.3 Rechten per gebruikersgroep

Op het tabblad Rechten bepaal je wat elke gebruikersgroep binnen de categorie mag doen:

ActieBetekenis
Aanmaken Nieuwe items in deze categorie aanmaken.
Verwijderen Items in deze categorie verwijderen.
Bewerken Alle items bewerken.
Status wijzigen Items publiceren, depubliceren, archiveren of naar de prullenbak verplaatsen.
Eigen bewerken Alleen items bewerken die de gebruiker zelf heeft aangemaakt.
Waarde aangepast veld bewerken Waarden van aangepaste velden wijzigen.

6.4 De overervingsketen

Rechten lopen van boven naar beneden:

Globale configuratie
   └── Component (bijvoorbeeld com_content)
         └── Categorie
               └── Artikel

Op elk niveau kun je een recht instellen op:

  • Overnemen: de standaardinstelling, neemt de waarde van het bovenliggende niveau over.
  • Toegestaan: verleent het recht.
  • Geweigerd: een harde blokkade. Dit kan lager in de keten niet worden overschreven.

Een praktische vuistregel: weigeren op het hoogste niveau dat mogelijk is, toestaan op het laagste niveau dat nodig is.

6.5 Praktische ACL-voorbeelden

  • Klantportalen waarin elke klant alleen zijn eigen documenten ziet.
  • Interne documentatie die verborgen is voor het publiek.
  • Betaalde lidmaatschappen met premium content.
  • Intranetsecties die alleen zichtbaar zijn voor specifieke afdelingen.

7. Geavanceerde functies

7.1 Aangepaste velden per categorie

Met Joomla kun je aangepaste velden koppelen aan specifieke categorieën. Ga naar Inhoud → Velden en Veldgroepen om ze in te stellen.

  • Koppel velden aan specifieke categorieën zodat redacteuren alleen de invoervelden zien die ze nodig hebben.
  • Gebruik het veldtype subform wanneer je herhalende datastructuren nodig hebt.
  • Render de waarden met -shortcodes of binnen template-overschrijvingen.

7.2 Layout-overschrijvingen per categorie

Je kunt de weergave van categorielayouts aanpassen binnen je template:

templates/your_template/html/com_content/category/
   blog.php
   blog_item.php
   blog_links.php

Voor één specifieke categorie kun je een Alternatieve layout instellen op het tabblad Opties, of je overridebestand benoemen met de categorie-alias voor nog fijnere controle.

7.3 Modules toewijzen per categorie

Modules worden in Joomla gekoppeld aan menu-items, niet direct aan categorieën. Om een module op categoriepagina’s te tonen, koppel je een menu-item aan de categorieweergave en wijs je de module toe aan dat menu-item.

7.4 Workflows in com_content

Workflows kunnen per categorie worden ingeschakeld. Artikelen doorlopen dan fases zoals Concept, Review en Gepubliceerd. Overgangen tussen fases worden beheerd via ACL.

Ga naar Inhoud → Workflows om een workflow te definiëren en koppel deze vervolgens aan een categorie via de artikelopties.

7.5 Tags versus categorieën

Categorieën en tags lijken op elkaar, maar lossen verschillende problemen op:

Gebruik een categorie wanneer…Gebruik een tag wanneer…
Een item op één plek thuishoort. Een item betrekking heeft op meerdere onderwerpen.
Hiërarchie belangrijk is. Je alleen platte, overlappende labels nodig hebt.
Je ACL of workflows nodig hebt. Je ontdekking en filtering wilt verbeteren.
De URL de structuur moet weerspiegelen. De URL minder belangrijk is.

Een korte manier om het verschil te onthouden:

Categorieën definiëren wat content is.
Tags beschrijven waar content over gaat.

8. Onder de motorkap (developer view)

8.1 Eén databasetabel voor alle extensies

Elke categorie in Joomla staat in dezelfde tabel:

jos_categories
 ├── com_content categorieën
 ├── com_contact categorieën
 ├── com_newsfeeds categorieën
 └── com_example categorieën

De kolom extension vertelt Joomla bij welke component een categorie hoort.

8.2 com_categories hergebruiken in je extensie

Elke extensie kan Joomla’s ingebouwde categoriebeheer hergebruiken. Je hoeft alleen de juiste extensienaam mee te geven in de URL:

/administrator/index.php?option=com_categories&view=categories&extension=com_messages

Het belangrijke deel is:

extension=com_messages

Dit vertelt Joomla: “Toon categorieën die bij deze extensie horen.” Je hoeft dus geen eigen categoriebeheer te bouwen.

8.3 Wat je gratis krijgt

Door com_categories te hergebruiken krijgt je extensie direct:

  • Ondersteuning voor geneste categorieën.
  • ACL-integratie.
  • Gepubliceerde en ongepubliceerde statussen.
  • Metadata-velden.
  • Taalondersteuning.
  • Sortering.
  • Rebuild-functionaliteit.

8.4 Belangrijke tabelvelden

De belangrijkste kolommen in #__categories zijn:

id
parent_id
level
path
extension
lft
rgt
alias
published
access
language
params       (JSON-object met categorie-specifieke opties)
metadata, metadesc, metakey   (SEO)

De velden parent_id, level, lft, rgt en path beschrijven samen de boomstructuur.

8.5 Categories API in PHP

Vanuit PHP kun je met categorieën werken via een nette API:

use Joomla\CMS\Categories\Categories;

$categories = Categories::getInstance('Content');
$node       = $categories->get('news');     // op alias of id
$children   = $node->getChildren();
$parent     = $node->getParent();
$articles   = $node->getNumItems();

8.6 Je component categorie-aware maken

Voor een maatwerkcomponent volg je deze vier stappen:

  1. Gebruik extension = com_yourcomponent in #__categories.
  2. Breid Joomla\CMS\Categories\Categories uit voor je component.
  3. Voeg een kolom rules toe aan je itemstabel voor ACL per item.
  4. Registreer een router die categorie-segmenten in de URL verwerkt.

8.7 Events om op in te haken

Plugins kunnen reageren op categorie-events:

EventWanneer het wordt uitgevoerd
onCategoryChangeState Wanneer een categorie wordt gepubliceerd of gedepubliceerd.
onContentAfterSave (context com_categories.category) Nadat een categorie is opgeslagen.
onContentBeforeDelete Voordat een categorie wordt verwijderd.

9. Veelgemaakte fouten en valkuilen

9.1 Te veel hoofdcategorieën

Een veelgemaakte fout is om veel hoofdcategorieën aan te maken in plaats van ze te groeperen.

Minder ideaal:

Nieuws
Blog
Artikelen
Updates
Verhalen

Beter:

Content
 ├── Nieuws
 ├── Blog
 └── Updates

9.2 Categorieën gebruiken als tags

Categorieën moeten:

  • Strategisch zijn
  • Stabiel zijn
  • Structureel zijn

Maak geen “eenmalige” categorieën voor één enkel artikel. Gebruik daarvoor Tags.

9.3 Slechte planning

Het herstructureren van categorieën nadat een website live staat veroorzaakt veel problemen:

  • Kapotte URL’s.
  • SEO-terugval.
  • Verwarrende navigatie.
  • Complexe rechtenstructuren.

De les: plan je categorie-structuur voordat je content gaat opbouwen.

9.4 Andere valkuilen

  • Vergeten te rebuilden na handmatige databasewijzigingen laat kapotte lft- en rgt-waarden achter.
  • Talen door elkaar gebruiken: een categorie in nl-NL toont geen items in en-GB.
  • Verwarring rond rechten: een “Geweigerd” op componentniveau kan lager niet worden overschreven.
  • Een oudercategorie verwijderen verplaatst de onderliggende categorieën naar het hogere niveau, ze worden niet verwijderd.
  • Alias-conflicten onder verschillende oudercategorieën zijn toegestaan, maar kunnen SEF-URL’s verwarrend maken als de router niet goed is ingesteld.

10. Best practices en snelle referentie

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

  • Plan je categorie-structuur voordat je content aanmaakt.
  • Houd de boomstructuur beperkt, twee of drie niveaus zijn meestal genoeg.
  • Gebruik categorieën voor structuur, Tags voor onderwerpen.
  • Stel ACL in op het niveau waar het logisch is en laat overerving de rest doen.
  • Hergebruik com_categories in je eigen extensies in plaats van iets nieuws te bouwen.
  • Voer Rebuild uit na migraties of directe databasewijzigingen.

Cheat sheet

AANMAKEN    Inhoud → Artikelen → Categorieën → Nieuw
NESTEN      Stel het veld "Bovenliggend" in
PUBLICEREN  Status: Gepubliceerd + Toegang: Publiek
BEPERKEN    Toegang: Geregistreerd (of aangepast niveau)
HIERARCHIE  Gebruik Rebuild als de boomstructuur breekt
WORKFLOW    Koppelen via het tabblad Opties
VELDEN      Koppel aangepaste velden aan specifieke categorieën
OVERRIDE    templates/{tpl}/html/com_content/category/
ROUTING     Schakel SEF in, gebruik unieke aliassen
ACL         Component → Categorie → Artikel (overerving)
HERGEBRUIK  index.php?option=com_categories&extension=com_X

11. Samenvatting

In Joomla zijn categorieën niet zomaar containers voor content. Ze beïnvloeden bijna elke laag van het systeem:

  • Structuur: je informatiearchitectuur.
  • Navigatie: de menu’s die bezoekers gebruiken.
  • Rechten: wie wat kan zien en bewerken.
  • SEO: URL-structuren en thematische clustering.
  • Schaalbaarheid: groeien zonder complete herbouw.
  • Developer-integratie: één gedeelde API voor alle extensies.
  • Gebruikerservaring: voor zowel redacteuren als bezoekers.

Een goed geplande categorieboom bespaart tijd, voorkomt bugs en maakt een Joomla-website jarenlang makkelijker te onderhouden. Een slechte categorieboom veroorzaakt problemen die meegroeien met de website.

Als je een nieuwe Joomla-site plant, migreert vanaf een oudere versie of vermoedt dat je huidige categorie-structuur problemen veroorzaakt, dan loont het om vroeg aandacht aan categorieën te besteden. Ze vormen de stille fundering onder bijna alles wat Joomla doet.