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:
| Doel | Voorbeeld |
|---|---|
| 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:
| Tabblad | Wat 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-itemtype | Wat 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:
| Concept | Welke 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:
| Actie | Betekenis |
|---|---|
| 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:
- Gebruik
extension = com_yourcomponentin#__categories. - Breid
Joomla\CMS\Categories\Categoriesuit voor je component. - Voeg een kolom
rulestoe aan je itemstabel voor ACL per item. - Registreer een router die categorie-segmenten in de URL verwerkt.
8.7 Events om op in te haken
Plugins kunnen reageren op categorie-events:
| Event | Wanneer 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- enrgt-waarden achter. - Talen door elkaar gebruiken: een categorie in
nl-NLtoont geen items inen-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_categoriesin 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.

