
Custom Fields in Joomla
Custom Fields veranderen Joomla van een basis contentmanagementsysteem in een flexibel contentplatform. Ze laten je gestructureerde gegevens toevoegen aan artikelen, gebruikers, contacten, categorieën en tags, zonder ook maar één regel code te schrijven.
Dit artikel legt uit hoe Joomla Custom Fields echt werken. Het behandelt de basis voor editors en beheerders, de 18 standaard veldtypes in Joomla 6, de renderopties voor ontwerpers en de developer hooks voor het bouwen van je eigen veldtypes. Je leert ook hoe de gegevens worden opgeslagen, hoe toegangscontrole werkt en hoe je de meest voorkomende fouten voorkomt.
Custom Fields is de flexibele contentmodelleringslaag van Joomla
Het doel is simpel: je helpen Custom Fields goed genoeg te begrijpen om met vertrouwen je content te modelleren.
1. De basis
1.1 Wat is een Custom Field?
Een Custom Field is een extra invoerveld, naast titel en inhoud, dat je aan een Joomla-item kunt koppelen. Elk veld heeft een type (tekst, lijst, afbeelding, datum enzovoort), een naam, een label en een kleine set configuratieopties.
Je kunt Custom Fields koppelen aan:
- Artikelen (
com_content.article) - Categorieën (
com_content.categories) - Contacten (
com_contact.contact) - Gebruikers (
com_users.user) - Tags (
com_tags.tag) - Extensies van derden die ondersteuning bieden
De context-string (component.view) koppelt een veld aan zijn doel. Dezelfde field engine stuurt al deze doelen aan.
1.2 Welk probleem lossen ze op?
Voor Custom Fields hadden editors drie opties om extra gegevens aan een artikel toe te voegen:
- Een eigen component bouwen.
- HTML verbergen in de artikeltekst.
- Een third-party content construction kit (CCK) installeren zoals K2, Seblod of Fabrik.
Sinds Joomla 3.7 levert het CMS dit standaard mee. Er is geen extra extensie nodig.
Zonder Custom Fields hebben editors de neiging om:
- Alles in de artikeltekst te proppen.
- De introtekst verkeerd te gebruiken.
- Te vertrouwen op copy-paste templates.
- Verplichte informatie te vergeten.
- Inconsistente content te produceren.
Met Custom Fields krijg je gestructureerde data, voorspelbare layouts, validatie, formulieren per categorie en rendering zonder code.
1.3 Waar vind ik Custom Fields?
In de Joomla 6-backend heeft elke ondersteunde component zijn eigen set velden en veldgroepen:
Content → Fields (artikelvelden)
Content → Field Groups (velden groeperen)
Components → Contacts → Fields (contactvelden)
Users → Manage → Fields (gebruikersprofielvelden)
Components → Tags → Fields (tagvelden)
1.4 De vier concepten achter elk Custom Field
Elk Custom Field wordt bepaald door vier keuzes:
| Concept | Vraag die het beantwoordt |
|---|---|
| Type | Wat voor invoer is het? (Tekst, lijst, media, subformulier enzovoort.) |
| Field Group | Hoe wordt het gegroepeerd in de editorinterface? |
| Categorie | Waar verschijnt het? Welke items tonen dit veld? |
| Toegang | Wie mag het zien en bewerken? |
Als je deze vier goed instelt, is de rest detailwerk.
1.5 Veld versus veldgroep
Het helpt om deze twee termen vanaf het begin uit elkaar te houden:
| Concept | Wat het is |
|---|---|
| Field | Eén enkel invoerveld, bijvoorbeeld "Telefoonnummer". |
| Field Group | Een bundel velden, samen weergegeven als één blok. |
Field Groups geven je een gedeelde koptekst, één template override per groep en een logische groepering in de editorinterface.
2. Een Custom Field aanmaken
2.1 De minimale stappen
Om een nieuw artikelveld aan te maken, ga je naar:
Content → Fields → New
- Kies een Type (Text, List, Calendar enzovoort).
- Stel een Titel in, zichtbaar voor editors.
- Stel een Name in, de machinenaam die gebruikt wordt in
en template overrides. - Kies een Field Group (optioneel).
- Koppel het veld aan één of meer Categorieën, of aan "All".
- Sla op.
Het veld verschijnt nu op elk passend artikelbewerkingsscherm.
2.2 Het veldbewerkingsscherm
Het bewerkingsscherm is opgesplitst in tabbladen. Elk tabblad beheert een ander aspect van het veld:
| Tabblad | Wat het beheert |
|---|---|
| Field | Type, titel, naam, label, standaardwaarde, beschrijving. |
| Options | Type-specifieke opties zoals lijstwaarden, minimum, maximum en formaat. |
| Assigned Categories | Welke categorieën dit veld tonen. |
| Publishing | Status, toegang, taal, aanmaak- en wijzigingsinformatie. |
| Permissions | ACL per groep: waarde bewerken, veld bewerken, status wijzigen, verwijderen. |
2.3 Belangrijke veldinstellingen
- Type: kan niet veilig gewijzigd worden zodra er gegevens bestaan.
- Name: gebruikt als sleutel voor de shortcode
en in overrides. Gebruik kleine letters, zonder spaties. - Label: wordt naast het invoerveld weergegeven. Valt terug op de titel als het leeg is.
- Required: Joomla weigert het item op te slaan zonder waarde.
- Default Value: vult het veld vooraf in bij nieuwe items.
- Filter: sanitatieregel (Text, Raw, HTML, Integer enzovoort).
- Automatic Display: After Title, Before Display, After Display of Do not automatically display.
3. De 18 standaard veldtypes in Joomla 6
Joomla 6 bevat 18 standaard veldtypes, waaronder twee nieuwe: Number en Note. Elk type is een plugin onder plugins/fields/.
3.1 Basisinvoer
| Type | Doel | Voorbeeld |
|---|---|---|
| Text | Tekstinvoer op één regel | Subtitel, SKU, korte code |
| Textarea | Meerregelig tekstveld | Korte beschrijving, samenvatting |
| Editor | WYSIWYG rich-text invoer | Auteursbio, uitgebreide beschrijving |
3.2 Keuzevelden
| Type | Doel | Voorbeeld |
|---|---|---|
| Checkboxes | Meerdere keuzes uit een vaste lijst | "Beschikbare functies" bij een product |
| Radio | Exact één keuze uit een zichtbare lijst | "Sidebar tonen?" Ja / Nee |
| List | Dropdown voor enkele of meerdere selecties | Moeilijkheidsgraad: Easy / Medium / Hard |
3.3 Mediavelden
| Type | Doel | Voorbeeld |
|---|---|---|
| Imagelist | Een afbeelding kiezen uit een specifieke map | Icoon selecteren, banner kiezen |
| Media | Kiezen uit de Media Manager | Productafbeelding, promotievideo, downloadbare PDF |
Het Media-veld gebruikt de Media Manager-modal van Joomla 6, ondersteunt submappen en slaat een padstring op.
3.4 Relationele velden
| Type | Doel | Voorbeeld |
|---|---|---|
| User | Koppeling naar een Joomla-gebruikersaccount | Toegewezen auteur, accountmanager |
| User Groups | Eén of meer gebruikersgroepen kiezen | "Toegestane rollen" bij een artikel |
| SQL | Dropdown gevuld door een SQL-query | Een artikel koppelen aan andere artikelen |
3.5 Numerieke velden
| Type | Doel | Voorbeeld |
|---|---|---|
| Integer | Alleen gehele getallen | Voorraadhoeveelheid, aantal zitplaatsen |
| Number (nieuw in Joomla 6) | Numerieke invoer met decimalen | Prijs, gewicht, percentage |
Gebruik Number in plaats van Integer wanneer decimalen belangrijk zijn. Voor Joomla 6 moest je dit nabootsen met een Text-veld plus een filter.
3.6 Datum, kleur en URL
| Type | Doel | Voorbeeld |
|---|---|---|
| Calendar | Datum- of datum/tijdkiezer | Evenementdatum, publicatiedeadline |
| Colour | Hex-kleurkiezer | Merkkleur per artikel of categorie |
| URL | Gevalideerde URL met optioneel doelvenster | Officiële website, boekingspagina |
3.7 Helper- en structuurvelden
| Type | Doel | Voorbeeld |
|---|---|---|
| Note (nieuw in Joomla 6) | Niet-bewerkbare notitie binnen het beheerformulier | Uitleg geven over gerelateerde velden |
| Subform | Een mini-formulier ingebed in een veld, herhaalbaar | Teamleden, agenda-items |
Het Note-veld is puur bedoeld als instructie. Het slaat geen waarde op. Het bestaat om editors te helpen, niet om gegevens vast te leggen.
Het Subform-veld is het werkpaard voor situaties waarin "één artikel meerdere items van iets bevat". De waarden worden opgeslagen als JSON, waar we later op terugkomen.
3.8 Het SQL-veld
Het SQL-veld toont een dropdown gevuld met een databasequery die je zelf schrijft. Een typische query ziet er zo uit:
SELECT id AS value, title AS text
FROM `#__content`
WHERE catid IN (8) AND state = 1
ORDER BY title ASC;
Het SQL-veld is krachtig maar risicovol:
- De query draait met siterechten bij elke formulierlading.
- Alleen Super Users mogen SQL-velden aanmaken.
- Bouw de query nooit op basis van ongefilterde gebruikersinvoer.
Als je alleen een eenvoudige lookup nodig hebt, gebruik dan liever een normaal List-veld.
3.9 Overzicht in één oogopslag
| # | Type | Categorie | Nieuw in Joomla 6? |
|---|---|---|---|
| 1 | Text | Basis | |
| 2 | Textarea | Basis | |
| 3 | Editor | Basis | |
| 4 | Checkboxes | Keuze | |
| 5 | Radio | Keuze | |
| 6 | List | Keuze | |
| 7 | Imagelist | Media | |
| 8 | Media | Media | |
| 9 | User | Relationeel | |
| 10 | User Groups | Relationeel | |
| 11 | Integer | Nummer | |
| 12 | Number | Nummer | ja |
| 13 | Calendar | Datum | |
| 14 | Colour | Visueel | |
| 15 | URL | Web | |
| 16 | Note | Helper | ja |
| 17 | Subform | Structureel | |
| 18 | SQL | Relationeel, geavanceerd |
4. Velden koppelen aan categorieën
4.1 Het tabblad Assigned Categories
Bij elk veld kun je kiezen uit twee strategieën:
- Alle categorieën: het veld verschijnt overal binnen die component.
- Specifieke categorieën: alleen bij items in de geselecteerde categorieën.
Zo geef je bijvoorbeeld "Events"-artikelen hun start_date-veld zonder "News"-artikelen ermee te vervuilen.
4.2 Contenttypes via categorieën
Met dit patroon kun je meerdere "contenttypes" bouwen binnen één component:
Articles
├── News → velden: source, byline
├── Events → velden: start_date, location, ticket_url
└── Team members → velden: photo, role, bio_summary
Eén component, drie contenttypes, allemaal aangestuurd door velden gekoppeld aan categorieën.
4.3 Overerving en standaardwaarden
- Een veld dat is toegewezen aan "Alle categorieën" geldt overal binnen zijn component.
- Een veld dat is toegewezen aan specifieke categorieën geldt alleen voor die categorieën. Het wordt niet overgenomen door subcategorieën.
- Als je categorieën nest, wijs het veld dan toe aan elk niveau waar het nodig is.
5. Custom Fields renderen
5.1 Automatische weergave
De optie Automatic Display plaatst de gerenderde output op één van vier posities:
- After Title: tussen de titel en de introtekst.
- Before Display Text: boven de artikelinhoud.
- After Display Text: onder de artikelinhoud.
- Do not automatically display: zelf renderen.
Een volledige Field Group wordt samen weergegeven als één blok, in de ingestelde volgorde.
5.2 Handmatige plaatsing met shortcodes
Binnen de artikeltekst kun je eenvoudige shortcodes gebruiken:
→ rendert veld-id 5 (label + waarde)
→ rendert alle velden in veldgroep-id 2
Je kunt gewone tekst combineren met veldoutput:
Spreker:
Datum:
5.3 Layout overrides
Field rendering gebruikt layouts onder:
layouts/com_fields/
render.php (wrapper)
field/
render.php (enkele veldrij)
list.php (lijstveldtype)
media.php
subform.php
...
Override ze in je template:
templates/your_template/html/layouts/com_fields/field/render.php
Voor één specifiek veldtype override je het bestand met de naam van dat type, bijvoorbeeld media.php. Voor één specifiek benoemd veld gebruik je:
render-<fieldname>.php
5.4 Waar de waarden vandaan komen
Wanneer Joomla een artikel laadt, gebeurt het volgende:
- Leest
#__fields_valuesvoor dat item-id. - Voegt
#__fieldssamen voor de metadata. - Filtert op categorietoewijzing.
- Filtert op toegangsniveau en permissies.
- Rendert de output via de layoutketen.
6. Toegangscontrole (ACL)
6.1 Twee lagen
Custom Fields gebruiken dezelfde twee ACL-concepten als de rest van Joomla. Ze zijn niet hetzelfde:
| Concept | Vraag die het beantwoordt |
|---|---|
| Toegang | Wie mag de gerenderde waarde zien op de frontend? |
| Permissies | Wie mag de veldwaarde bewerken in de backend? |
Een veld kan bijvoorbeeld alleen zichtbaar zijn voor "Registered"-gebruikers, terwijl het artikel zelf openbaar blijft.
6.2 Permissies op een veld
Op het tabblad Permissions van een veld beheer je deze acties per gebruikersgroep:
| Actie | Betekenis |
|---|---|
| Edit Custom Field Value | Dit veld invullen of wijzigen bij items. |
| Edit State | Het veld zelf publiceren of depubliceren. |
| Edit | De velddefinitie bewerken. |
| Delete | Het veld verwijderen. |
Editors hebben meestal alleen Edit Custom Field Value nodig. Ze hoeven geen toegang te hebben tot de velddefinitie.
6.3 De overervingsketen
Dezelfde Inherit / Allow / Deny-regels gelden hier net als overal elders in Joomla:
Global Configuration
└── Component (bijvoorbeeld com_content)
└── Category (custom field-regels)
└── Field
6.4 Praktische toepassingen
- Een veld "interne notitie" verbergen voor iedereen behalve editors.
- "Ledenprijs" alleen tonen aan Registered-gebruikers.
- Shopmanagers toestaan om "Voorraad" te bewerken, maar niet "Publieke beschrijving".
7. Het Subform-veld
7.1 Waarom een Subform gebruiken?
Gebruik een Subform wanneer één item op een gestructureerde manier meerdere items van iets bevat:
- Sessies in een conferentieartikel.
- Sprekers bij een evenement.
- Downloads op een productpagina.
- FAQ-items in een helpartikel.
Elke rij in een Subform is zijn eigen mini-formulier, met eigen onderliggende velden.
7.2 Hoe bouw je er één?
- Maak eerst de onderliggende velden aan (Text, URL, Image enzovoort).
- Maak een Subform-veld aan.
- Kies op het tabblad Options de onderliggende velden. Zet Repeatable op Yes en definieer minimum- en maximumrijen.
- Wijs het Subform toe aan de juiste categorieën.
7.3 Wat wordt opgeslagen?
De waarde van een Subform wordt opgeslagen als JSON in #__fields_values.value:
[
{"speaker_name": "Ada", "speaker_role": "Keynote"},
{"speaker_name": "Tim", "speaker_role": "Workshop"}
]
Deze JSON stuurt zowel de editorinterface als de gerenderde output aan.
7.4 Een Subform renderen
Het Subform heeft zijn eigen layoutbestand:
layouts/com_fields/field/subform.php
Override dit bestand wanneer je volledige controle nodig hebt over de loop, de markup, de CSS-klassen en de layout per rij.
8. Custom Fields buiten artikelen
8.1 Gebruikers
Ga naar Users → Manage → Fields om velden toe te voegen zoals "Telefoon", "Bedrijf" of "Nieuwsbrief opt-in".
Gebruikersvelden verschijnen op drie schermen:
- Het gebruikersbewerkingsscherm in de backend.
- Het registratieformulier op de frontend, als het veld gepubliceerd is.
- Het profielbewerkingsformulier op de frontend.
8.2 Contacten
Ga naar Components → Contacts → Fields. Contactvelden zijn handig voor personeelsgidsen. Voeg velden toe zoals "Afdeling", "Kantooruren" of "Foto".
8.3 Categorieën
Ga naar Content → Categories → Fields (context com_content.categories). Deze velden worden opgeslagen bij de categorie zelf, niet bij een artikel. Typische toepassingen:
- Een "Header image" weergegeven op de Category Blog-pagina.
- Een "Subtitle" weergegeven onder de categorietitel.
- Een "Intro CTA" specifiek voor die categorie.
Je rendert categorievelden binnen een Category Blog template override.
8.4 Tags
Ga naar Components → Tags → Fields (context com_tags.tag). Tagvelden worden opgeslagen bij de tag zelf, bijvoorbeeld een "Tag icon" of een "Tag colour" weergegeven op overzichten met getagde content.
8.5 Third-party componenten
Elke component kan deelnemen aan het Custom Fields-systeem. Dit gebeurt door:
- Een eigen context te declareren, bijvoorbeeld
com_yourcomponent.item. - De field plugin-events aan te roepen bij opslaan, laden en weergeven.
- Een
com_fields-menuhook toe te voegen in de zijbalk.
Zodra dat gedaan is, krijgt de component gratis dezelfde veldinterface.
9. Onder de motorkap (developer view)
9.1 De vier databasetabellen
Custom Fields worden opgeslagen in vier standaardtabellen:
#__fields velddefinities (name, type, params, ...)
#__fields_groups definities van veldgroepen
#__fields_values waarden per item (item_id, field_id, value)
#__fields_categories koppelingen tussen velden en categorieën
Een value kan gewone tekst zijn, JSON (voor een Subform) of elke string die het veldtype kiest.
9.2 Belangrijke kolommen in #__fields
id
title
name (machinenaam, gebruikt in )
type (text, list, media, subform, ...)
context (com_content.article, com_users.user, ...)
group_id
state (1 gepubliceerd, 0 gedepubliceerd)
access
language
fieldparams (JSON: type-specifieke opties)
params (JSON: weergave en gedrag)
9.3 Pluginarchitectuur
Custom Fields zijn plugins. Elk veldtype leeft in zijn eigen map:
plugins/fields/<type>/
De core bevat onder andere: calendar, checkboxes, color, editor, imagelist, integer, list, media, note, number, radio, sql, subform, text, textarea, url, user en usergrouplist.
Een field-type plugin definieert:
- Hoe de invoer in het formulier wordt weergegeven (formulier-XML).
- Hoe de waarde op de frontend wordt weergegeven.
- Optionele validatie.
- Optionele onSave- en onPrepare-logica.
9.4 Plugin-events
Dit zijn de uitbreidingspunten voor je eigen custom field-type:
| Event | Wanneer het afgaat |
|---|---|
onContentPrepareForm |
Voegt velden toe aan het bewerkingsformulier. |
onContentPrepareData |
Laadt opgeslagen waarden in het formulier. |
onContentAfterSave |
Slaat veldwaarden op nadat het item is opgeslagen. |
onContentPrepare |
Rendert velden in de weergegeven content. |
onCustomFieldsPrepareDom |
Bouwt de XML van het veld in het formulier. |
onCustomFieldsBeforePrepareField |
Past de waarde aan vlak voor rendering. |
onCustomFieldsAfterPrepareField |
Past de waarde aan vlak na rendering. |
9.5 De PHP API
De moderne en nette manier om velden uit PHP te lezen:
use Joomla\Component\Fields\Administrator\Helper\FieldsHelper;
// Alle velden voor een artikel, inclusief samengevoegde waarden
$fields = FieldsHelper::getFields(
'com_content.article',
$article, // het artikelobject: levert item-id + categorie-id
true // waarden voorbereiden voor weergave
);
foreach ($fields as $field) {
echo $field->name . ' = ' . $field->rawvalue;
echo $field->value; // gerenderde HTML
}
Een kortere legacy-aanpak werkt nog steeds binnen content overrides:
echo $item->jcfields[3]->value; // op veld-id
Gebruik bij voorkeur FieldsHelper::getFields(). Dit overleeft wijzigingen van veld-id’s tussen websites en geeft je alle metadata.
9.6 Headless Joomla: velden via de Web Services API
De Web Services API van Joomla retourneert custom field-waarden samen met het item:
GET /api/index.php/v1/content/articles/42
De JSON-respons bevat een fields-collectie met id, naam, type, ruwe waarde en gerenderde waarde. Dit maakt Joomla een bruikbare headless backend voor:
- Vue-, React- of Svelte-frontends.
- Static-site generators.
- Native mobiele apps.
- AI- en automatiseringsworkflows.
Alleen gepubliceerde velden waar de API-gebruiker toegang toe heeft worden geretourneerd. ACL blijft ook via de API van toepassing.
9.7 Je eigen veldtype bouwen
- Maak een pluginmap aan onder
plugins/fields/myfield/. - Voeg een manifest-XML en een hoofd-PHP-klasse toe die
FieldsPluginuitbreidt. - Implementeer
getInputXml()voor de editorinvoer. - Implementeer
onCustomFieldsPrepareField()voor de gerenderde output. - Installeer via Discover of als verpakte zip.
- Het nieuwe type verschijnt nu in de dropdown met veldtypes.
10. Veelgemaakte fouten en valkuilen
10.1 Het veldtype wijzigen nadat er data bestaat
De value-kolom is één enkele string. Overschakelen van list naar subform nadat editors al waarden hebben ingevuld leidt meestal tot verouderde of onleesbare data.
Kies het type zorgvuldig vanaf dag één. Als je het toch moet wijzigen, exporteer dan eerst de waarden, wis ze en importeer ze opnieuw.
10.2 Vergeten categorieën toe te wijzen
Een veld zonder toegewezen categorieën verschijnt bij geen enkel item. "All" is de veilige standaard. Je kunt het later altijd beperken.
10.3 SQL-velden en beveiliging
Het SQL-veld voert ruwe SQL uit bij elke formulierlading:
- Alleen Super Users kunnen SQL-velden aanmaken.
- Bouw queries nooit op basis van ongefilterde gebruikersinvoer.
- Gebruik liever een List-veld met handmatige lookup of een eigen plugin-type.
10.4 Kwetsbare shortcodes
De shortcode verwijst naar het veld-id, niet naar de naam. Wanneer je een veld tussen websites verplaatst, verandert het id en breekt de shortcode.
Voor draagbare content gebruik je beter in combinatie met automatische plaatsing.
10.5 Over-engineering
Een Custom Field is niet altijd de juiste oplossing:
- Een eenmalige tekstregel hoort gewoon in de artikeltekst thuis.
- Veel velden, veel rijen en veel relaties zijn een teken dat je een echte custom component nodig hebt.
10.6 Slordige machinamen
Het veld name is de machine-identificatie. Het verschijnt in overrides, shortcodes en de API. Behandel het als een code-identificatie.
Goed:
event_date
speaker_name
product_price
Vermijd:
Field1
TestField
my new field
Gebruik kleine letters, underscores als scheidingstekens en betekenisvolle namen. Zodra een veld in gebruik is, breekt hernoemen overrides en API-consumenten.
10.7 Andere valkuilen
- Meertalige websites: de taal van het veld moet overeenkomen met de taal van het item, of ingesteld staan op "All".
- Verplichte velden op frontendformulieren: worden alleen afgedwongen als het frontendformulier ze ondersteunt.
- Caching: agressieve caches kunnen verouderde veldwaarden tonen na wijzigingen.
- Verwarring rond permissies: het weigeren van "Edit Custom Field Value" op componentniveau blokkeert alle onderliggende editors.
11. Ecosysteem en extensies
11.1 Voorwaardelijke Custom Fields
Voorwaardelijke velden verschijnen of verdwijnen afhankelijk van de waarde van een ander veld. Dit is standaard aanwezig in Joomla 6 via plugininstellingen. Een typisch voorbeeld is een veld "Ticket URL" dat alleen zichtbaar wordt wanneer de checkbox "Has tickets" actief is.
11.2 YOOtheme Pro
YOOtheme Pro is een populaire pagebuilder-template die Joomla Custom Fields uitleest in zijn dynamische contentsysteem:
- Gebruik een custom field-waarde in elk builder-element.
- Filter en sorteer dynamische lijsten op basis van custom field-waarden.
- Gebruik het ingebouwde Location-veld (latitude en longitude) op een kaart.
Als je team al YOOtheme gebruikt, hoef je mogelijk nooit een layout override voor velden te schrijven.
11.3 Advanced Custom Fields van Tassos
Deze third-party extensie voegt veldtypes toe die niet standaard in Joomla aanwezig zijn, plus uitgebreidere rendering en conditionele logica. Het is handig wanneer de 18 standaardtypes niet voldoende zijn, maar een volledige CCK overdreven zou zijn.
11.4 Wanneer je beter een CCK gebruikt
Custom Fields zijn ideaal voor content met extra eigenschappen. Voor echte databasegestuurde applicaties, zoals boekingssystemen, vastgoedoverzichten met zoekfilters of complexe relaties, kun je beter kiezen voor:
- Seblod of Fabrik, volledige content construction kits.
- Een custom component die integreert met
com_fields.
12. Best practices en snelle referentie
Als je maar een paar dingen uit dit artikel onthoudt, laat het dan deze zijn:
- Plan je velden en veldgroepen voordat je content gaat aanmaken.
- Kies vanaf dag één het juiste type. Later wijzigen is pijnlijk.
- Gebruik duidelijke machinamen zoals
event_date, nooitField1. - Groepeer gerelateerde velden in Field Groups voor een nette editorervaring.
- Gebruik het Number-veld (nieuw in Joomla 6) voor prijzen en percentages.
- Gebruik het Note-veld (nieuw in Joomla 6) om editors binnen het formulier te begeleiden.
- Gebruik Subforms voor data waarbij "één item meerdere items van iets bevat".
- Stel ACL alleen op veldniveau in wanneer dat nodig is. Gebruik overerving waar mogelijk.
- Override layouts onder
layouts/com_fields/field/voor volledige controle.
Cheat Sheet
CREATE FIELD Content → Fields → New
CREATE GROUP Content → Field Groups → New
ASSIGN Field → Assigned Categories tab
DISPLAY Field → Automatic Display setting
INLINE of in de inhoud
OVERRIDE templates/{tpl}/html/layouts/com_fields/...
TYPE OVERRIDE render-<fieldname>.php voor één veld
USERS Users → Manage → Fields
CONTACTS Components → Contacts → Fields
CATEGORIES Content → Categories → Fields
TAGS Components → Tags → Fields
CORE TYPES 18 in Joomla 6 (Number + Note zijn nieuw)
SUBFORM Herhalende data, opgeslagen als JSON
SQL FIELD Alleen Super User, voorzichtig gebruiken
API FieldsHelper::getFields('com_content.article', $item)
HEADLESS /api/index.php/v1/content/articles/N → fields[]
TABLES #__fields / _groups / _values / _categories
13. Samenvatting
Custom Fields veranderen Joomla van een basis-CMS in een lichtgewicht platform voor contentmodellering. Ze definiëren:
- Structuur, content met een voorspelbare vorm.
- Herbruikbaarheid, dezelfde velden over meerdere items.
- Gebruikerservaring per categorie, editors zien alleen wat ze nodig hebben.
- Rendering, automatisch, via shortcode of via volledige template override.
- Permissies, duidelijke controle over wie wat mag zien en bewerken.
- Uitbreidbaarheid, je eigen veldtypes via plugins.
- Integratie, artikelen, gebruikers, contacten, tags, categorieën en third-party componenten.
Een goed ontworpen set Custom Fields maakt een Joomla-website eenvoudiger te bewerken, eenvoudiger te onderhouden en eenvoudiger uit te breiden. Slecht benoemde of verkeerd toegewezen velden veroorzaken problemen die meegroeien met de website.
Als je een nieuw Joomla-project plant, een complex contenttype modelleert of nadenkt over headless Joomla, dan zijn Custom Fields één van de eerste plekken om naar te kijken. Ze zijn een stille maar krachtige functie die Joomla onderscheidt van een CMS waarbij alles dezelfde vorm moet hebben.


Joomla en Linux specialist voor snelle, veilige en schaalbare websites.


