Versie geschiedenis in Joomla
Je besteedt twintig minuten aan het herschrijven van een artikel, klikt op Save, en pas dan zie je dat je drie alinea's hebt overschreven die je wilde behouden. Op de meeste systemen is dat werk weg. In Joomla staat, als een optie aanstaat, elke eerdere versie nog steeds in de database, op een klik afstand.
Dat vangnet is Content History (com_contenthistory), Joomla's ingebouwde versiebeheer voor inhoud. Dit artikel legt uit hoe het werkt vanuit drie invalshoeken: de basis voor eigenaren en editors die gewoon een ongedaan-maken-knop willen, de instellingen voor beheerders die bepalen wat er wordt opgeslagen, en de technische details voor ontwikkelaars die willen weten waar de versies leven en hoe ze de functie aan hun eigen extensies toevoegen.
Een stille "tijdmachine" voor je artikelen die standaard in Joomla zit en out of the box al aanstaat.
Het doel is simpel: je Content History goed genoeg laten begrijpen om erop te vertrouwen op de dag dat je een artikel moet terugdraaien.
1. De basis
1.1 Wat is Content History?
Het Content History component (com_contenthistory) maakt elke keer dat je een inhoudsitem opslaat een momentopname ervan. Joomla introduceerde dit in versie 3.2 (2013), en sindsdien zit het standaard in core.
Kort samengevat doet het het volgende:
- Elke keer opslaan schrijft een momentopname (een "versie") naar de databasetabel
#__history. - Een momentopname bewaart de volledige gegevens van het item op dat moment, plus wie het opsloeg, wanneer, en een optionele notitie.
- Vanuit het bewerkscherm kun je elke eerdere versie bekijken, vergelijken, herstellen of verwijderen.
- Je kunt een versie markeren met Keep Forever, zodat Joomla deze nooit opschoont.
Zie het als een ingebouwde ongedaan-maken-geschiedenis die uitloggen, server herstarts en zelfs een afgesloten browser overleeft. Het is geen back-up van je hele site, het houdt een item tegelijk bij. En het is precies het juiste gereedschap voor de alledaagse vraag "ik heb de versie van gisteren van dit artikel nodig".
1.2 Wat Content History niet is
Drie korte verduidelijkingen:
- Het is geen site-back-up. Het versiebeheert losse inhoudsitems, geen bestanden, templates of de database als geheel.
- Het is niet hetzelfde als de Action Logs:
Action Logs leggen vast dat iemand een artikel opsloeg;
Content History legt vast hoe het artikel eruitzag bij elke keer opslaan. - Het is niet iets dat je voor core-artikelen zelf hoeft aan te zetten. Joomla's installer schakelt het al in voor Articles, Contacts, News Feeds, Banners, Tags en User Notes. Modules komen met de functie uit, en je eigen extensies moeten er zelf voor kiezen (zie sectie 2).
1.3 Waar vind ik het?
Content History heeft geen eigen menu. Je bereikt het van binnenuit het item dat je bewerkt. Open een willekeurig artikel:
Content → Articles → (open een artikel) → Versions (knop in de werkbalk)
De knop Versions verschijnt alleen wanneer geschiedenis is ingeschakeld voor die component en er minstens een versie bestaat. Een klik erop opent een popup met elke opgeslagen versie van dat ene artikel. De component zelf staat in administrator/components/com_contenthistory/ en werkt volledig als hulpmiddel voor andere componenten, het toont nooit een eigen lijst met "alle versies overal".
2. Content History inschakelen
2.1 De twee opties
Bij Content History in het Options-scherm van elke component kun je twee opties in te stellen:
| Optie | Interne naam | Betekenis |
|---|---|---|
| Save History | save_history |
Zet versiebeheer aan (Yes) of uit (No). Joomla's installer zet dit op Yes voor de meeste core-componenten; de eigen config.xml-standaard van het veld is No, wat een eigen component erft. |
| Maximum Versions | history_limit |
Hoeveel versies je per item bewaart. Standaard is 10. Zet 0 voor onbeperkt. |
Voor artikelen is het pad:
Content → Articles → Options → Editing Layout → Save History = Yes
Maximum Versions = 10
Zodra Save History op Yes staat, maakt elke keer dat je een artikel opslaat vanaf dat moment een versie aan. Items die je voor het inschakelen opsloeg hebben geen geschiedenis, versiebeheer werkt niet met terugwerkende kracht.
2.2 Welke componenten ondersteunen het?
Content History is niet beperkt tot artikelen. In Joomla 6 bieden de volgende kerncomponenten de optie Save History:
| Component | Wat er versiebeheerd wordt |
|---|---|
com_content |
Artikelen |
com_contact |
Contacten |
com_newsfeeds |
Newsfeeds |
com_banners |
Banners (Advertenties) |
com_modules |
Modules |
com_tags |
Tags |
com_users |
Gebruikersnotities |
Elke component heeft zijn eigen onafhankelijke instelling. Geschiedenis aanzetten voor artikelen doet niets voor contacten; je zet het aan waar je het nodig hebt.
2.3 Wat staat er standaard aan?
Dit verwart bijna iedereen, dus het is het waard om het duidelijk te zeggen: op een verse Joomla-installatie komen de meeste van deze componenten met geschiedenis al aan. De installer zet Save History = Yes voor com_content, com_contact, com_newsfeeds, com_banners, com_tags en com_users (een limiet van 10 voor artikelen, contacten en banners; 5 voor news feeds, tags en user notes). Alleen com_modules komt met geschiedenis uit.
Dus als je een gloednieuwe site opent en Save History = Yes ziet op Articles, dan klopt dat, je hebt het niet aangezet, de installer deed dat. Het config.xml-veld heeft default="0" (No), maar die standaard geldt alleen wanneer er geen waarde voor de component is opgeslagen. Joomla's install-SQL slaat "save_history":"1" op voor de zes bovenstaande componenten, wat de veldstandaard overschrijft. De default="0" is daarom de waarde die een vers eigen component erft, niet wat core-artikelen krijgen.
2.4 Een verstandig startpunt
Omdat artikelen al met geschiedenis aan en een limiet van 10 binnenkomen, zijn de echte beslissingen anders dan "moet ik het aanzetten". Voor inhoud die je veel bewerkt, kun je de limiet verhogen (10 tot 20 versies voor artikelen is prettig). Voor componenten die je nooit terugdraait, kun je geschiedenis uitzetten om de tabelgroei te remmen, meer over die afweging in sectie 5. Modules zijn de ene core-component die met geschiedenis uit komt; zet het daar aan als je vaak module-instellingen verfijnt en een weg terug wilt.
Naar boven3. Werken met versies
3.1 De Versions-popup
Open een artikel en klik op Versions. De popup toont elke opgeslagen versie, nieuwste eerst, met deze kolommen:
| Kolom | Betekenis |
|---|---|
| Selectievakje | Selecteer een of twee versies om een actie op uit te voeren. |
| Date | Wanneer de versie is opgeslagen. Klik erop om die versie te bekijken. |
| Version Note | Het optionele label dat je bij het opslaan typte (leeg als er geen is). |
| Saved By | De editor die de versie maakte. |
| Keep Forever | Een lock-icoon. Opgelicht betekent dat deze versie beschermd is tegen opschonen. |
De werkbalk boven de lijst bevat de acties: Restore, Compare, Keep On/Off en Delete.
3.2 Een versie bekijken (Preview)
Klik op de datum van een versie en Joomla opent een alleen-lezen Preview. Het toont de veldwaarden die die versie had, titel, tekst, publicatiedatums enzovoort. Preview verandert niets; het laat je alleen kijken voordat je beslist.
3.3 Twee versies vergelijken
Vink precies twee versies aan en klik op Compare. Joomla toont een diff naast elkaar: velden die verschillen worden gemarkeerd, zodat je in een oogopslag ziet dat de introtekst is veranderd en de publicatiedatum niet. Dit is de snelste manier om de vraag "wat is er nu eigenlijk veranderd tussen maandag en dinsdag?" te beantwoorden.
3.4 Een versie herstellen (Restore)
Vink een versie aan en klik op Restore. Joomla laadt de gegevens van die versie terug in het bewerkformulier. Twee dingen zijn hier belangrijk:
- Restore vult het formulier. Het slaat niet uit zichzelf op. Je moet nog steeds op Save klikken om het terugdraaien definitief te maken.
- Wanneer je de herstelde gegevens opslaat, maakt dat opslaan een nieuwe versie aan. Er gaat niets verloren, de versie waarvan je terugdraaide blijft ook in de lijst staan.
3.5 Een versienotitie toevoegen
Het bewerkformulier heeft een veld Version Note (vaak onder het tabblad Publishing of bij de werkbalk). Typ een kort label als "voor herschrijving" of "goedgekeurd door klant" voordat je opslaat, en die notitie verschijnt in de Versions-lijst. Notities maken van een muur van tijdstempels een leesbare tijdlijn.
Naar boven4. Hoe een versie wordt opgeslagen
4.1 De Versionable-behaviour-plugin
De magie die van een gewone keer opslaan een versie maakt is een kleine systeemplugin: Behaviour - Versionable (plg_behaviour_versionable). Deze staat standaard aan in core. Hij luistert naar dit ene table-event:
onTableAfterStore vuurt direct nadat een record naar de database is weggeschreven
Wanneer het event vuurt, controleert de plugin drie dingen op volgorde:
- Implementeert de tabel
VersionableTableInterface? Zo niet, negeren. - Is het opslaan gelukt? Een mislukte keer opslaan maakt geen versie.
- Is
save_historyingeschakeld voor die component? Zo niet, stoppen.
Alleen wanneer alle drie waar zijn roept de plugin Versioning::store() aan om de momentopname weg te schrijven. Schakel deze plugin uit en Content History valt stil op de hele site, ongeacht wat de componentopties zeggen.
4.2 Een volledige momentopname, geen diff
De momentopname is de volledige gegevens van het item, JSON-gecodeerd, precies zoals het was opgeslagen. Voor een artikel omvat dat de titel, alias, intro- en volledige tekst, status, publicatiedatums, toegangsniveau, metadata en waarden van custom fields. Herstellen brengt dat allemaal samen terug, niet alleen de hoofdtekst.
Dit is een bewuste ontwerpkeuze. Joomla slaat niet het verschil tussen versies op (een "diff"); het slaat elke keer een volledige kopie van het item op. De afweging is simpel:
- Voordeel: herstellen is triviaal en direct, Joomla laadt gewoon een enkele rij terug in het formulier, zonder een keten van diffs af te spelen.
- Nadeel: elke versie is een volledige kopie, dus de tabel
#__historygroeit sneller dan een diff-gebaseerde opslag zou doen. De versielimiet (sectie 5) bestaat juist om die groei in toom te houden.
4.3 De versienotitie reist mee met het opslaan
Wanneer je iets in het veld Version Note typt, leest Joomla het uit het verzonden formulier (jform[version_note]), maakt het schoon en slaat het naast de momentopname op. Daarom is de notitie gekoppeld aan een specifieke keer opslaan en niet aan het item als geheel.
5. De versielimiet en Keep Forever
5.1 Hoe het opschonen werkt
Na elke nieuwe versie handhaaft Joomla de history_limit. Als je 10 versies bewaart en een elfde keer opslaat, wordt de oudste versie verwijderd zodat het aantal op 10 blijft. De logica is "bewaar de nieuwste N op opslagdatum, verwijder de rest".
Zet history_limit = 0 en Joomla bewaart elke versie zonder opschonen. Dat is krachtig maar laat de tabel onbeperkt groeien op een drukke site, gebruik het bewust en niet per ongeluk.
5.2 Keep Forever verslaat de limiet
Het opschonen raakt nooit een versie aan die met Keep Forever is gemarkeerd. De opschoonquery slaat expliciet elke rij over waar keep_forever = 1. Zo overleeft een mijlpaalversie, "de tekst die de klant goedkeurde", zelfs nadat honderd latere bewerkingen voorbij de limiet zijn gegaan.
Om het in te stellen vink je een versie in de popup aan en klik je op Keep On/Off. Keep Forever omschakelen verandert niet de auteur of datum van de versie; Joomla behoudt die, zodat de markering puur een beschermingsmarkering is.
5.3 Een limiet kiezen
| Limiet | Goed voor |
|---|---|
| 5 tot 10 | Kleine sites, incidenteel bewerken. Genoeg om recente fouten ongedaan te maken. |
| 20 tot 50 | Actieve redactieteams die dezelfde artikelen vaak herzien. |
| 0 (onbeperkt) | Compliance- of juridische gevallen waarin elke versie bewaard moet blijven, combineer met Keep Forever en een opschoontaak. |
6. Onder de motorkap: de database
6.1 De #__history-tabel
Elke versie is een rij in een enkele tabel, #__history. De belangrijkste kolommen zijn:
version_id auto-increment primaire sleutel
item_id het item waar deze versie bij hoort, bijv. com_content.article.42
version_note de optionele notitie die je typte
save_date wanneer de versie is opgeslagen
editor_user_id de gebruiker die het opsloeg
character_count lengte van de JSON-momentopname
sha1_hash vingerafdruk van de momentopname (zie sectie 7)
version_data de volledige itemgegevens als JSON
keep_forever 1 als beschermd tegen opschonen, anders 0
De belangrijkste kolom is item_id. Het is niet zomaar een getal, het is een tekenreeks opgebouwd uit de type-alias van de inhoud plus de item-id. Een artikel met id 42 heeft item_id = 'com_content.article.42'. Die ene tekenreeks is hoe Joomla weet welke versies bij welk item horen, voor elke component die geschiedenis ondersteunt.
6.2 Content-types en het UCM
Content History is gebouwd op Joomla's Unified Content Model (UCM). Elk versiebeheerbaar ding is geregistreerd in de tabel #__content_types. Elke rij koppelt een type-alias zoals com_content.article aan zijn databasetabel en, cruciaal, aan een JSON-kolom genaamd content_history_options.
Die optiekolom vertelt Joomla's Content History hoe het type behandeld moet worden, in het bijzonder welke velden te negeren bij het bepalen of er echt iets is veranderd. Daar kijken we hierna naar.
6.3 Handige SQL
Toon elke versie van een enkel artikel (vervang jos_ door je echte prefix):
SELECT version_id, save_date, version_note, editor_user_id, keep_forever
FROM jos_history
WHERE item_id = 'com_content.article.42'
ORDER BY save_date DESC;
Zoek welke items de meeste versies hebben, om zware opslaggebruikers op te sporen:
SELECT item_id, COUNT(*) AS versions
FROM jos_history
GROUP BY item_id
ORDER BY versions DESC
LIMIT 20;
Naar boven7. De SHA1-hash: geen dubbele versies
7.1 Waarom twee keer opslaan niet altijd een versie toevoegt
Open een artikel, verander niets, klik op Save. Je zou een nieuwe versie verwachten. Joomla maakt er geen. De reden is de kolom sha1_hash.
Voordat Joomla een versie opslaat, bouwt het een SHA1-vingerafdruk van de momentopname. Als er al een versie met hetzelfde item en dezelfde hash bestaat, en de versienotitie ongewijzigd is, slaat Joomla het wegschrijven over. Geen duplicaat, geen verspilde rij. Dit houdt de geschiedenis schoon en voorkomt dat de limiet zich vult met identieke versies.
7.2 ignoreChanges: velden die niet meetellen
Sommige velden veranderen bij elke keer opslaan, zelfs als de inhoud identiek is, de wijzigingsdatum, de wijzigende gebruiker, de hitteller. Als die meetelden voor de hash, zou elke keer opslaan "anders" lijken en zou de ontdubbeling nooit triggeren.
Dus voor het hashen verwijdert Joomla een lijst met vluchtige velden. De standaardlijst ignoreChanges bevat:
modified modified_by modified_user_id modified_time
checked_out checked_out_time version hits path
Een content-type kan deze lijst overschrijven via de JSON content_history_options in #__content_types. Er is ook een lijst convertToInt (voor velden als publish_up, ordering en featured) die waarden normaliseert, zodat een "0" en een 0 dezelfde hash opleveren. Het praktische resultaat: Joomla detecteert betekenisvolle wijzigingen en negeert cosmetische.
8. Herstellen in detail
8.1 Wat Restore precies doet
Restore leest de JSON version_data van de gekozen versie, decodeert die en laadt de waarden in het bewerkformulier. Het is een laden, geen opslaan. Tot je op Save klikt blijft het live item ongewijzigd en ziet elke lezer op de site nog steeds de huidige tekst.
Dit ontwerp in twee stappen is bewust. Het laat je een oude versie herstellen en dan nog een detail of twee aanpassen voordat je vastlegt, in plaats van de huidige inhoud blindelings te overschrijven.
8.2 Restore is niet-destructief
Herstellen verwijdert nooit de versie waar je vandaan kwam. Stel je de tijdlijn voor:
v1 maandag "Eerste concept"
v2 dinsdag "Klantwijzigingen" ← huidige live tekst
v3 ...je herstelt v1 en klikt op Save
Na het opslaan bevat de lijst v1, v2 en een nieuwe v3 die een kopie van v1 is. Je kunt nog steeds terugspringen naar v2 als de klant van gedachten verandert. Er gaat nooit echt iets verloren zolang het binnen de limiet blijft en niet wordt opgeschoond.
8.3 De Check-out-connectie
Herstellen werkt op het open bewerkformulier, dus de normale bewerkingsregels gelden. Het item is naar jou uitgecheckt terwijl je werkt, en de herstelde gegevens worden pas vastgelegd wanneer je Save and Close doet. Als een andere editor het artikel vergrendeld heeft, kun je niet over hun sessie heen herstellen, Joomla's Check-in-systeem bewaakt de rij nog steeds.
Naar boven9. Rechten en toegang
9.1 Geschiedenis volgt het item, geen aparte ACL
Content History heeft geen eigen rechtenscherm. Of je een versie mag bekijken, herstellen of verwijderen, wordt bepaald door je rechten op het bovenliggende item. De regel die Joomla toepast is:
Als je het artikel mag bewerken (
core.edit), mag je de geschiedenis ervan beheren.
Een editor die een artikel mag bewerken kan dus de Versions-popup openen, bekijken, vergelijken, herstellen en versies verwijderen. Een gebruiker die het artikel niet mag bewerken, kan ook de geschiedenis ervan niet aanraken. Er is geen manier om "de geschiedenis te zien maar het item niet te bewerken".
9.2 Edit-own telt ook mee
De controle is iets ruimer dan een kale core.edit. Als een gebruiker Edit Own-rechten heeft en het artikel er een is dat ze momenteel bewerken, verleent Joomla ook toegang tot de geschiedenis van dat item via de actieve bewerksessie. Auteurs die hun eigen concepten beheren krijgen zo geschiedenis voor hun eigen werk zonder globale bewerkrechten nodig te hebben.
9.3 Een versie verwijderen
Het verwijderen van een enkele versie gebruikt hetzelfde recht als bewerken. Een waarborg: een versie die met Keep Forever is gemarkeerd, kan niet worden verwijderd voordat je de markering eerst uitzet. Dit voorkomt dat een onoplettende klik de ene mijlpaal wist die je wilde beschermen.
Naar boven10. Web Services API
10.1 Geschiedenis lezen via REST
Joomla's Web Services API kan de versiegeschiedenis van een item als JSON teruggeven. De Content History API-view is alleen-lezen: het toont versies en hun gegevens, maar je maakt versies aan door het item zelf op te slaan, niet door naar het geschiedenis-endpoint te posten.
Een verzoek heeft de type-alias van de inhoud, het type-id en de item-id nodig, plus de gebruikelijke API-token:
curl -H "X-Joomla-Token: <token>" \
"https://example.test/api/index.php/v1/contenthistory/history?type_alias=com_content.article&type_id=1&item_id=42"
10.2 Wat je terugkrijgt
Elke versie in het antwoord draagt dezelfde velden die je in de backend ziet:
id de versie-id
version_note de notitie, indien aanwezig
save_date wanneer het is opgeslagen
editor_user_id wie het opsloeg
character_count grootte van de momentopname
sha1_hash de vingerafdruk
version_data de volledige itemgegevens, gedecodeerd
keep_forever beschermingsmarkering
Dit is genoeg om een extern dashboard te bouwen dat toont "wie wat veranderde, en wanneer" over je inhoud, of om momentopnames in een ander systeem te archiveren. Omdat het endpoint alleen-lezen is, kun je de geschiedenis niet per ongeluk via de API beschadigen.
Naar boven11. Content History toevoegen aan je eigen extensie
11.1 Het recept
Als je een component bouwt, kun je Content History bijna gratis krijgen. Drie stappen:
1. Maak je Table versiebeheerbaar. Implementeer VersionableTableInterface en geef je type-alias terug:
use Joomla\CMS\Versioning\VersionableTableInterface;
class ItemTable extends Table implements VersionableTableInterface
{
public function getTypeAlias()
{
return 'com_myext.item';
}
}
De versionable-behaviour-plugin controleert op precies deze interface bij onTableAfterStore. Met dit op zijn plaats komen je keren opslaan in aanmerking voor versiebeheer.
2. Registreer het content-type. Voeg een rij toe aan #__content_types voor com_myext.item, die naar je tabel wijst en een JSON content_history_options meegeeft als je een eigen ignoreChanges-lijst wilt:
{
"ignoreChanges": ["modified", "modified_by", "checked_out", "checked_out_time", "hits"],
"convertToInt": ["publish_up", "publish_down", "ordering"]
}
3. Voeg de twee opties toe. Zet de velden save_history en history_limit in de config.xml van je component, precies zoals core doet. Voeg het veld Version Note en de Versions-werkbalkknop toe aan je bewerkview. Let op: core levert deze velden met default="0" maar zet de functie aan via zijn install-SQL (de geseede #__extensions-params bevatten "save_history":"1"). Je eigen component erft de default="0" tenzij je op dezelfde manier een waarde seedt, dus geschiedenis staat uit tot een beheerder Save History = Yes zet.
11.2 Wat je krijgt
Zodra die drie stukken op hun plaats staan, hergebruikt je component de volledige core-motor: momentopnames, SHA1-ontdubbeling, de limiet, Keep Forever, preview, compare, restore, de ACL-regel en het REST-endpoint. Je schrijft geen eigen versiebeheercode, je verklaart alleen dat je item versiebeheerbaar is en laat de behaviour-plugin het werk doen.
11.3 Een opmerking over de toekomst
De huidige versiebeheerklassen (Versioning, de table-event-handlers van de behaviour-plugin) zijn in Joomla 6 als deprecated gemarkeerd, met een nieuw versiebeheerconcept gepland voor een latere hoofdversie. De functie en de databasetabel verdwijnen niet; de interne API die ontwikkelaars aanroepen kan veranderen. Als je vandaag geschiedenis in een eigen extensie inbouwt, houd dan de migratienotities voor Joomla 8 in de gaten.
12. Content History vs Check-in vs Action Logs
Joomla heeft drie kleine functies die mensen vaak verwarren omdat ze allemaal antwoord geven op "wat is er met mijn inhoud gebeurd". Ze doen verschillend werk:
| Functie | Beantwoordt | Slaat op |
|---|---|---|
| Content History | Hoe zag dit item er eerder uit? | Volledige momentopnames in #__history |
| Action Logs | Wie deed wat, wanneer en vanaf waar? | Een auditregel per actie in #__action_logs |
| Check-in | Wie bewerkt dit op dit moment? | Een lock in de eigen rij van het item |
Ze vullen elkaar aan. Action Logs vertellen je dat Alice de homepage om 14:00 bewerkte. Content History laat je zien wat de homepage voor haar bewerking zei en het terugdraaien. Check-in voorkomt dat Bob Alice overschrijft terwijl zij nog typt. Zet alle drie aan voor een site waar je echt om geeft.
Naar boven13. SEO, metadata en de frontend
Een veelgestelde vraag: beinvloedt Content History de SEO of wat bezoekers zien? Het korte antwoord is nee, en dat is met opzet.
- Versies zijn alleen backend. Ze worden nooit op de frontend weergegeven. Er is geen openbare "versiegeschiedenis"-pagina en geen dubbele URL's, dus er is niets voor zoekmachines om te indexeren.
- Een versie herstellen verandert het live artikel pas nadat je opslaat. Op dat punt gelden de normale SEO-regels voor de herstelde inhoud, de metadata, alias en tekst die de versie had komen allemaal samen terug.
- Omdat een momentopname metadatavelden bevat, is Content History ook een stil vangnet voor SEO: als iemand een zorgvuldig geschreven meta-omschrijving wist, kun je die herstellen zonder opnieuw te typen.
Met andere woorden, Content History is een redactiegereedschap, geen publicatiefunctie. Het beschermt je werk zonder een enkele byte toe te voegen aan de pagina's die je bezoekers laden.
13.1 Ken de grenzen
Het helpt ook om duidelijk te zijn over wat Content History niet is. Mensen verwachten soms dat het zich als Git gedraagt, en dat doet het niet:
- Er is geen branching en geen merging. Geschiedenis is een rechte lijn van keren opslaan per item; je kunt geen twee parallelle concepten bijhouden en samenvoegen.
- De vergelijking is een eenvoudige veld-voor-veld-weergave, geen volledige broncode-achtige diff met inline woordwijzigingen.
- Het versiebeheert een inhoudsitem tegelijk. Het is geen vervanging voor een echte site- of database-back-up.
Zie het als redactioneel versiebeheer: een betrouwbare ongedaan-maken-en-herstellen-geschiedenis voor de inhoud die je in Joomla bewerkt, geen versiebeheersysteem op ontwikkelaarsniveau.
Naar boven14. Veelgemaakte fouten en valkuilen
14.1 "Er is geen Versions-knop"
Symptoom: De Versions-knop ontbreekt in de artikelwerkbalk.
Oplossing: Save History staat uit voor die component, of dit item heeft nog geen versies. Zet Content → Articles → Options → Save History = Yes, en sla het item dan een keer op om de eerste versie te maken.
14.2 "Oude artikelen hebben geen geschiedenis"
Symptoom: Je hebt geschiedenis ingeschakeld maar bestaande artikelen tonen niets.
Oplossing: Versiebeheer werkt niet met terugwerkende kracht. Geschiedenis begint bij de eerste keer opslaan na het inschakelen van de optie. Er is geen manier om versies van eerdere bewerkingen terug te halen.
14.3 "Nog een keer opslaan maakte geen versie"
Symptoom: Je hebt twee keer opgeslagen en er bestaat maar een versie.
Oplossing: Dit is correct gedrag. De SHA1-hash blokkeert dubbele momentopnames. Als er niets betekenisvols is veranderd, hergebruikt Joomla de bestaande versie in plaats van een kopie weg te schrijven. Verander een echt veld, of voeg een andere versienotitie toe, om een nieuwe rij af te dwingen.
14.4 "Mijn mijlpaalversie is verdwenen"
Symptoom: Een belangrijke oude versie is na veel bewerkingen weg.
Oplossing: Hij is opgeschoond door de limiet. Klik altijd op Keep On/Off bij versies die je moet behouden. Keep-Forever-rijen worden nooit opgeschoond en kunnen niet worden verwijderd voordat je de markering uitzet.
14.5 "Ik heb een versie hersteld maar de site toont nog de oude tekst"
Symptoom: Restore leek niets te doen op de frontend.
Oplossing: Restore laadt alleen gegevens in het formulier. Je moet op Save klikken (en eventuele paginacache wissen) om de wijziging live te maken.
14.6 "De history-tabel is enorm"
Symptoom: #__history is tot honderdduizenden rijen gegroeid.
Oplossing: Een component staat op onbeperkt (history_limit = 0) op een site met veel bewerkingen, of je versiebeheert veel grote items. Stel een verstandige limiet in, of schoon oude rijen op met een Scheduler SQL-taak, en houd Keep-Forever-rijen veilig.
15. Best practices
Als je maar een paar dingen uit dit artikel onthoudt, onthoud dan deze:
- Zet Save History minstens aan voor
com_content, het is de goedkoopste verzekering die je ooit zult kopen. - Stel een echte limiet in (10 tot 20 is een goed begin). Vermijd 0, tenzij je ook opschoont en Keep Forever gebruikt.
- Gebruik Version Notes. "Voor herschrijving door klant" verslaat elke keer een kale tijdstempel.
- Markeer mijlpaalversies met Keep Forever zodat de limiet ze nooit opeet.
- Onthoud dat restore een actie in twee stappen is: het laadt het formulier, jij klikt nog op Save.
- Toegang tot geschiedenis volgt de bewerkrechten van het item, er is geen apart recht om in te stellen.
- Combineer Content History met Action Logs en Check-in voor een compleet "wat is er gebeurd"-beeld.
16. In het kort
INSCHAKELEN Content → Articles → Options → Save History = Yes
LIMIET INSTELLEN Options → Maximum Versions (0 = onbeperkt)
VERSIES OPENEN Bewerk een item → Versions (werkbalk)
PREVIEW Klik op de datum van een versie
VERGELIJKEN Vink twee versies aan → Compare
HERSTELLEN Vink een versie aan → Restore → daarna Save
BESCHERMEN Vink een versie aan → Keep On/Off
NOTITIE TOEVOEGEN Typ in het veld Version Note voor het opslaan
WAAR HET LEEFT #__history (item_id = com_content.article.42)
DE MOTOR plg_behaviour_versionable op onTableAfterStore
ONTDUBBELEN sha1_hash, met ignoreChanges uit #__content_types
RECHT core.edit op het bovenliggende item (geen aparte ACL)
SINDS Joomla 3.2 (2013)
Naar boven17. Samenvatting
Content History is een van Joomla's stilste, meest bruikbare functies. Zet een optie aan en elke keer dat je je inhoud opslaat wordt een herstelbaar punt in de tijd, opgeslagen als een volledige momentopname die je kunt bekijken, vergelijken, herstellen en beschermen.
Het ontwerp is helder en voorspelbaar:
- Een behaviour-plugin bewaakt elke keer opslaan en schrijft een momentopname naar
#__history. - Een SHA1-hash houdt duplicaten buiten, zodat de geschiedenis betekenisvol blijft.
- Een limiet per component schoont de oudste versies op, terwijl Keep Forever de versies beschermt die ertoe doen.
- Toegang volgt het bewerkrecht van het item, dus er is niets extra's om in te stellen.
- Een alleen-lezen REST-endpoint stelt dezelfde gegevens beschikbaar aan externe tools.
Het is geen back-up en het werkt niet met terugwerkende kracht, dus zet het vroeg aan en stel een limiet in waar je mee kunt leven. Als je een Joomla-site beheert waar inhoud belangrijk is, en op de meeste sites is dat de hele bedoeling, dan betekent Content History vandaag aanzetten dat de volgende keer dat een artikel misgaat, de oplossing op een klik afstand is in plaats van een lange avond opnieuw typen. Als je niet zeker weet hoe je site is geconfigureerd, of je versiebeheer in een eigen component wilt laten inbouwen, loont het om er iemand naar te laten kijken voordat je het nodig hebt.
Naar boven

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


