Terug naar hoofdinhoud
Workflow in Joomla
Op deze pagina
# Topics

Workflow in Joomla

19 juni 2026

De meeste Joomla-sites publiceren een artikel zodra een redacteur op “Opslaan & Sluiten” klikt. Voor een eenpersoonsblog is dat prima. Maar zodra er een echt team bij betrokken is, wil je dat een concept wordt gecontroleerd voordat het online gaat, en wil je weten wie er op de publicatieknop mag drukken. Die controle is precies wat de Workflow-component van Joomla (com_workflow) je biedt.

Een workflow verandert de simpele schakelaar "gepubliceerd of niet" in een klein redactioneel proces met benoemde stappen: een schrijver maakt een concept, een redacteur beoordeelt het, een manager publiceert. Dit artikel begint bij de basis voor eigenaren en redacteuren, gaat daarna verder met het instelwerk voor beheerders en eindigt met de database, de PHP-API en de events voor ontwikkelaars.

Een workflow is een reeks benoemde stations waar je inhoud doorheen reist, met gecontroleerde deuren ertussen.

Het doel is eenvoudig: je Joomla Workflow goed genoeg laten begrijpen om een redactioneel proces te ontwerpen dat bij je team past, en om het te kunnen onderzoeken wanneer inhoud vastloopt.

1. De basis

1.1 Wat een workflow is

Standaard heeft een artikel één statusveld: het is gepubliceerd, gedepubliceerd, gearchiveerd of in de prullenbak, en elke redacteur met het juiste recht kan dat omzetten. Een workflow vervangt die ene schakelaar door een proces dat je zelf ontwerpt. In plaats van één schakelaar beweegt het artikel door fases die je benoemt (bijvoorbeeld Concept, Ter beoordeling, Gepubliceerd), en het beweegt alleen via overgangen die je toestaat.

Workflow is een optionele functie. Hij staat standaard uit, en je zet hem per component aan. Op dit moment levert de Joomla-kern workflow-ondersteuning voor artikelen (com_content); het systeem is zo gebouwd dat andere componenten het ook kunnen overnemen.

Zonder workflow is "publiceren" een vinkje. Met workflow is "publiceren" een deur die alleen bepaalde mensen kunnen openen, en het openen ervan kan extra acties starten.

1.2 De drie bouwstenen

Alles in Workflow bestaat uit slechts drie dingen. Leer deze drie woorden en het hele component wordt logisch:

BouwsteenWat het is
Workflow Het hele proces, gekoppeld aan één inhoudstype (zoals artikelen). Een houder voor fases en overgangen.
Fase Een station waar een item in kan zitten, zoals Concept of Gepubliceerd. Een item zit altijd in precies één fase.
Overgang Een deur van de ene fase naar de andere. Erop drukken verplaatst het item en kan acties uitvoeren (publiceren, uitlichten, e-mailen).

1.3 Een plaatje van het idee

Zie fases als dozen en overgangen als de pijlen ertussen. De pijlen zijn eenrichtingsverkeer en jij bepaalt welke bestaan:

  [ Concept ] --indienen--> [ Ter beoordeling ] --goedkeuren--> [ Gepubliceerd ]
                                    │
                                    └--afwijzen--> [ Concept ]

Een redacteur die aan een artikel in de fase Concept werkt, ziet alleen de deuren die uit Concept leiden (hier: "indienen"). Ze kunnen niet rechtstreeks naar Gepubliceerd springen, omdat geen enkele overgang die twee fases verbindt. Dat is precies de bedoeling: de workflow bepaalt wat mogelijk is.

1.4 Waar je het vindt

Workflow leeft alleen in het beheergedeelte. Zodra het voor artikelen is ingeschakeld, verschijnt er een item Workflows in het Inhoud-gedeelte van het beheermenu, dat het scherm opent op index.php?option=com_workflow&view=workflows&extension=com_content.article. Daar beheer je workflows, en binnen elke workflow beheer je de fases en overgangen.

Naar boven

2. Workflow inschakelen

Er is niets van workflow te zien totdat je hem aanzet. Dat is bewust: de meeste sites hebben hem niet nodig, dus Joomla houdt hem uit de weg.

2.1 Inschakelen voor artikelen

Open Inhoud → Opties (de knop Opties in het Artikelen-scherm), ga naar het tabblad Integratie en zoek de instelling Workflows. Zet Workflow inschakelen op Ja en sla op.

Inhoud → Opties → Integratie
   └─ Workflow inschakelen: Ja

Intern schrijft dit de parameter workflow_enabled = 1 in de configuratie van com_content. Vanaf dat moment worden artikelen door een workflow geregeld in plaats van door de simpele publicatieschakelaar.

2.2 De Basis-workflow die met Joomla meekomt

Joomla installeert één kant-en-klare workflow voor artikelen, de Basis-workflow. Hij is als standaard gemarkeerd en gekoppeld aan de extensiecontext com_content.article. Standaard bevat hij één fase en een handvol overgangen die simpelweg de oude publicatieknoppen nabootsen:

OvergangWat het doet
Publiceren Zet de artikelstatus op gepubliceerd
Depubliceren Zet de artikelstatus op gedepubliceerd
Archiveren Zet de artikelstatus op gearchiveerd
Naar prullenbak Zet de artikelstatus op in de prullenbak
Uitlichten / Niet uitlichten Markeert het artikel als uitgelicht of niet
Publiceren en uitlichten Doet beide in één klik

De Basis-workflow is bewust eenvoudig. Hij bestaat zodat het inschakelen van workflow niet meteen verandert hoe redacteuren werken; de echte waarde komt wanneer je er je eigen fases en overgangen bovenop bouwt.

2.3 Een workflow per categorie

Je bent niet beperkt tot één workflow voor de hele site. Elke artikelcategorie heeft een veld Workflow (onder de Opties van de categorie) dat ofwel de standaardworkflow kan overerven, ofwel een specifieke kan gebruiken. Zo kan de categorie Nieuws een streng beoordelingsproces draaien terwijl de categorie Blog simpel blijft.

Naar boven

3. Fases: de statussen waar je inhoud doorheen beweegt

Een fase is een benoemde status. Goede fases ontwerpen is de kern van het bouwen van een workflow, dus het loont om er helder over na te denken.

3.1 Eén fase tegelijk

Elk artikel dat bij een workflow hoort, zit in precies één fase. Die fase is de huidige positie van het artikel in het proces. Als je de artikellijst bekijkt met workflow ingeschakeld, toont de kolom Fase waar elk artikel staat (Concept, Ter beoordeling, Gepubliceerd, enzovoort).

3.2 De standaardfase

Elke workflow heeft precies één standaardfase. Nieuwe artikelen komen in die fase de workflow binnen. Joomla bewaakt deze regel: je kunt de standaardfase niet verwijderen en niet depubliceren, want elke workflow heeft een geldig startpunt nodig. Probeer je het toch, dan toont Joomla een foutmelding en weigert het.

3.3 Fases ontwerpen

Een typische redactionele workflow gebruikt drie of vier fases:

FaseBetekenis
Concept De schrijver is nog bezig. Niet zichtbaar op de site. (Vaak de standaardfase.)
Ter beoordeling Ingediend en wacht tot een redacteur het nakijkt.
Gepubliceerd Goedgekeurd en live op de website.
Gearchiveerd Oude inhoud die als naslag bewaard blijft, maar van de hoofdsite af is.

Houd het aantal fases klein. Elke extra fase betekent meer overgangen om te definiëren en meer keuzes voor je redacteuren. Begin met de minste fases die je echte proces beschrijven, en voeg er pas meer toe als je er een mist.

Naar boven

4. Overgangen: de deuren tussen fases

Als fases de kamers zijn, dan zijn overgangen de deuren. Een overgang is de enige manier waarop een item van de ene fase naar de andere beweegt, en het is waar het meeste van de kracht van Workflow zit.

4.1 Wat een overgang vastlegt

Elke overgang legt vier dingen vast: een naam (de knop die de redacteur ziet), een van-fase, een naar-fase en een set acties die uitgevoerd worden wanneer hij afgaat.

Overgang "Goedkeuren"
   ├─ Van fase:  Ter beoordeling
   ├─ Naar fase: Gepubliceerd
   └─ Actie:     zet de artikelstatus op Gepubliceerd

4.2 "Vanuit elke fase"

De van-fase van een overgang kan op een specifieke fase staan of op Elke. "Elke" betekent dat de overgang beschikbaar is, ongeacht waar het item op dat moment zit. In de database wordt dit opgeslagen als een van-fasewaarde van -1. De Basis-workflow gebruikt "Elke" voor al zijn overgangen, daarom kun je een artikel publiceren, in de prullenbak gooien of archiveren vanaf waar het ook staat.

4.3 Overgangen bepalen wat redacteuren kunnen doen

Wanneer een redacteur de artikellijst opent, worden de batch-acties en de knoppen per rij opgebouwd uit de overgangen die uit de huidige fase van elk artikel leiden. Een artikel in Concept biedt alleen de deuren uit Concept. Zo dwingt een workflow stilletjes je proces af: redacteuren zien de stappen die je niet toestond gewoon niet.

Naar boven

5. Overgangsacties: publiceren, uitlichten en notificatie

Een overgang verplaatst een item tussen fases, maar op zichzelf is dat slechts een labelwijziging. De echte effecten komen van workflow-plugins, die acties toevoegen die een overgang kan uitvoeren. Joomla levert er drie.

5.1 De Publishing-plugin

De plugin plg_workflow_publishing laat een overgang de werkelijke status van het artikel instellen. In de Opties van de overgang kies je één waarde:

Publicatie-optieToegepaste status
Gepubliceerd 1
Gedepubliceerd 0
Gearchiveerd 2
In de prullenbak -2
(niet gebruiken) Status blijft ongewijzigd

Dit is de brug tussen je workflow en het daadwerkelijk verschijnen van het artikel op de site. Een overgang naar je fase "Gepubliceerd" draagt normaal de publicatieactie "Gepubliceerd"; een overgang naar "Concept" draagt "Gedepubliceerd".

5.2 De Featuring-plugin

De plugin plg_workflow_featuring laat een overgang een artikel als uitgelicht markeren of niet, wat bepaalt of het in de lijst Uitgelichte artikelen verschijnt. De optie is simpelweg Uitgelicht (1), Niet uitgelicht (0) of "niet gebruiken".

5.3 De Notification-plugin

De plugin plg_workflow_notification stuurt een e-mail wanneer een overgang afgaat. Dit is wat een workflow tot leven brengt: wanneer een schrijver een concept indient, krijgen de redacteuren een bericht. In de opties van de overgang stel je in:

  • E-mail versturen: aan of uit voor deze overgang.
  • Notificatietekst: een eigen bericht om mee te sturen.
  • Gebruikersgroepen: welke groepen je e-mailt (bijvoorbeeld alle Redacteuren).
  • Ontvangers: specifieke individuele gebruikers om te e-mailen.

Omdat dit plugins zijn, hangen de actie-opties die je op een overgang ziet af van welke workflow-plugins zijn ingeschakeld. Schakel je de notificatie-plugin uit, dan verdwijnen de e-mailopties van elke overgang.

Naar boven

6. Een echte redactionele workflow, stap voor stap

Theorie is makkelijker te vatten met een concrete opbouw. Hier lees je hoe je de kale Basis-workflow omtovert tot een beoordelingsproces met drie fases voor een Nieuws-categorie.

6.1 Maak de fases

Open de workflow en voeg drie fases toe. Markeer Concept als de standaard zodat nieuwe artikelen daar beginnen:

Fases
   ├─ Concept          (standaard)
   ├─ Ter beoordeling
   └─ Gepubliceerd

6.2 Maak de overgangen

Voeg nu de deuren tussen die fases toe, elk met de juiste acties:

OvergangVan → NaarActies
Indienen ter beoordeling Concept → Ter beoordeling De groep Redacteuren notificeren
Goedkeuren Ter beoordeling → Gepubliceerd Publiceren: Gepubliceerd
Afwijzen Ter beoordeling → Concept De auteur notificeren
Depubliceren Elke → Concept Publiceren: Gedepubliceerd

6.3 Wat het team ervaart

Een schrijver maakt een artikel. Het begint in Concept, dus het is niet live. Ze drukken op Indienen ter beoordeling; de redacteuren krijgen een e-mail. Een redacteur leest het en drukt op Goedkeuren, wat het naar Gepubliceerd verplaatst en de status in één stap op gepubliceerd zet, zodat het op de site verschijnt. Is het nog niet klaar, dan drukt de redacteur op Afwijzen, valt het artikel terug naar Concept en wordt de auteur op de hoogte gebracht. Niemand hoefde een aparte stap "op gepubliceerd zetten" te onthouden, en een schrijver kan zijn eigen werk nooit zelf live duwen.

Naar boven

7. De visuele workfloweditor

Sinds Joomla 6.1 hoef je fases en overgangen niet meer alleen via lijstschermen te bouwen. Elke workflow heeft een visuele grafiek-editor die het hele proces toont als een diagram dat je met de hand kunt bewerken. Voor een workflow met meerdere fases is dat veel makkelijker te overzien dan twee aparte lijsten.

7.1 De grafiek openen

In Inhoud → Workflows heeft elke workflow-rij een koppeling Grafiek, die het canvas opent op index.php?option=com_workflow&view=graph&id=1&extension=com_content.article (met het eigen id van de workflow). Op het canvas is elke fase een doos (een knooppunt) en elke overgang een pijl (een verbinding) tussen twee fases, zodat je de vorm van je proces in één oogopslag ziet:

   +-----------+  indienen    +-------------------+  goedkeuren  +----------------+
   |  Concept  |------------>| Ter beoordeling   |------------>|  Gepubliceerd  |
   +-----------+             +-------------------+             +----------------+
        ^   afwijzen                  │
        └----------------------------└

7.2 Bewerken op het canvas

Je bouwt en wijzigt de workflow rechtstreeks op het diagram, met de muis of het toetsenbord:

  • Fase toevoegen (Alt+N) zet een nieuw fase-knooppunt op het canvas.
  • Overgang toevoegen (Alt+M) tekent een pijl van de ene fase naar de andere.
  • Bewerk een geselecteerd knooppunt of pijl met E; verwijder het met Delete.
  • Passend maken (F) zoomt het hele diagram terug in beeld.
  • Sleep de fase-dozen om ze te ordenen zoals je proces het prettigst leest.

De editor respecteert je rechten: hij biedt alleen de knoppen voor bewerken, verwijderen en uitvoeren die je daadwerkelijk mag gebruiken, met dezelfde controles core.edit, core.delete en core.execute.transition die in sectie 9 worden beschreven.

7.3 Waar de indeling wordt opgeslagen

Wanneer je fases versleept, onthoudt Joomla hun posities. De coördinaten van elk fase-knooppunt worden als JSON opgeslagen in de kolom position van #__workflow_stages, een kolom die in Joomla 6.1 precies hiervoor is toegevoegd. Het canvas laadt zijn gegevens via kleine JSON-eindpunten die de workflow, zijn fases en zijn overgangen teruggeven, zodat het plaatje altijd overeenkomt met de onderliggende tabellen. De grafiek is alleen een vriendelijker gezicht op dezelfde fases en overgangen uit secties 3 en 4: wat je hier tekent, schrijft dezelfde rijen die je met de hand zou aanmaken.

Naar boven

8. Workflow versus de oude publicatieknoppen

Het inschakelen van workflow verandert hoe de vertrouwde publicatieknoppen zich gedragen. Deze verandering begrijpen voorkomt veel verwarring.

8.1 De publicatieschakelaar wordt een overgang

Zonder workflow bewerkt het groene vinkje / rode kruis in de artikellijst rechtstreeks de kolom state, beheerd door het recht core.edit.state. Met workflow actief wordt die rechtstreekse bewerking overgenomen: de publishing-plugin grijpt in en blokkeert het wijzigen van de status buiten een overgang om. In plaats daarvan wijzig je de status door een overgang uit te voeren, beheerd door een ander recht, core.execute.transition.

Geen workflow:  klik "publiceren"      → statuskolom verandert direct   (core.edit.state)
Met workflow:   voer een overgang uit  → overgang zet de status        (core.execute.transition)

8.2 De status bestaat nog steeds

Workflow gooit de status van het artikel niet weg. Het artikel heeft nog steeds een waarde gepubliceerd / gedepubliceerd / gearchiveerd / in de prullenbak, want dat is wat de voorkant en de rest van Joomla lezen om de zichtbaarheid te bepalen. Het verschil is hoe die waarde wordt gezet: via de publicatieactie van een overgang in plaats van een rechtstreekse klik. De fase vertelt je waar het artikel in je proces staat; de status vertelt de website of het getoond moet worden.

8.3 Waarom een redacteur ineens niet kan publiceren

Na het inschakelen van workflow kan een redacteur die gisteren nog kon publiceren, vandaag merken dat het niet lukt. Dat komt doordat publiceren nu core.execute.transition op de betreffende overgang vereist, wat een apart recht is van core.edit.state. Dit is een functie, geen fout: het is precies hoe je de publicatieknop alleen aan managers geeft.

Naar boven

9. Rechten en ACL

Workflow is alleen nuttig als de juiste mensen de juiste stappen kunnen doen, dus het is nauw verbonden met de toegangscontrole van Joomla.

9.1 De twee belangrijkste acties

ACL-actieLaat een gebruiker…
core.manage.workflow Workflows, fases en overgangen aanmaken en bewerken (het ontwerpwerk).
core.execute.transition Een overgang uitvoeren om een item tussen fases te verplaatsen (het dagelijkse werk).

9.2 Recht per overgang

Het slimme is dat core.execute.transition op een enkele overgang kan worden ingesteld, niet alleen op het hele component. Elke overgang is zijn eigen ACL-bron. Zo kun je de groep Schrijvers "Indienen ter beoordeling" laten uitvoeren terwijl alleen de groep Managers "Goedkeuren" mag uitvoeren. De workflow plus de rechten beschrijven samen wie inhoud vooruit mag duwen.

Overgang "Goedkeuren"  → tabblad Rechten
   ├─ Schrijvers: Overgang uitvoeren = Geweigerd
   └─ Managers:   Overgang uitvoeren = Toegestaan

9.3 Fases en workflows zijn ook bronnen

Workflows, fases en overgangen worden elk een ACL-bron wanneer ze opgeslagen worden, genest onder het component. Daarom dragen de workflow-tabellen een kolom asset_id: hiermee kun je rechten instellen op elk niveau van de hiërarchie, net als bij categorieën en artikelen.

Naar boven

10. Onder de motorkap: de databasetabellen

Het hele component rust op vier tabellen. Hun kolommen lezen maakt de functie concreet.

10.1 De vier tabellen

TabelBevat
#__workflows Eén rij per workflow.
#__workflow_stages Eén rij per fase, gekoppeld aan een workflow.
#__workflow_transitions Eén rij per overgang, met zijn acties.
#__workflow_associations Welk item op dit moment in welke fase zit.

10.2 #__workflows en #__workflow_stages

Een workflow-rij draagt een title, een description, de extension waartoe hij behoort (voor artikelen is dat com_content.article), een vlag default en een asset_id. Een fase-rij draagt een title, zijn bovenliggende workflow_id, een vlag default, een vlag published, een ordering en (sinds Joomla 6.1) een position voor de grafiek-editor.

#__workflows           id | title | extension          | default
                        1 | Basic | com_content.article | 1

#__workflow_stages     id | workflow_id | title     | default
                        7 | 1           | Concept   | 1
                        8 | 1           | Beoordeel | 0
                        9 | 1           | Publiceer | 0

10.3 #__workflow_transitions

De overgang-rij is waar de acties leven. Naast workflow_id, title, from_stage_id en to_stage_id heeft hij een kolom options. Die kolom is JSON en bevat de instellingen van de plugin-acties:

id | title    | from_stage_id | to_stage_id | options
 2 | Approve  | 8             | 9           | {"publishing":"1"}
 5 | Feature  | -1            | 7           | {"featuring":"1"}
 7 | Pub+Feat | -1            | 7           | {"publishing":"1","featuring":"1"}

Let op from_stage_id = -1: dat is de waarde "Elke fase" uit sectie 4.2. De JSON in options wordt door de workflow-plugins gelezen om te weten wat ze moeten doen.

10.4 #__workflow_associations: de huidige fase van het item

Dit is de tabel die een artikel aan een fase koppelt. Hij is bewust piepklein, met slechts drie kolommen:

KolomBevat
item_id Het id van het item (voor een artikel de #__content.id).
stage_id De fase waar het item op dit moment in zit (#__workflow_stages.id).
extension De context, zoals com_content.article.

De primaire sleutel is het paar (item_id, extension), wat de regel uit sectie 3.1 afdwingt: een item heeft precies één huidige fase per context. Om te vinden waar artikel 42 staat, leest Joomla de ene rij waar item_id = 42 en extension = 'com_content.article'.

Naar boven

11. Onder de motorkap: de PHP-API

Ontwikkelaars raken deze tabellen zelden rechtstreeks aan. Joomla biedt een kleine set klassen die het werk veilig doen.

11.1 De Workflow-klasse

De kernklasse Joomla\CMS\Workflow\Workflow stuurt overgangen aan. Je maakt hem voor een extensie en roept executeTransition() aan om items te verplaatsen. Hij leest de overgang, vuurt de events af, voert de plugin-acties uit en werkt #__workflow_associations voor je bij:

use Joomla\CMS\Workflow\Workflow;

$workflow = new Workflow('com_content.article');

// Verplaats artikel 42 en 43 via overgang id 2 ("Goedkeuren")
$workflow->executeTransition([42, 43], 2);

Achter die ene aanroep controleert de klasse of de overgang geldig is voor de huidige fase van elk item, verstuurt hij de events voor/na (sectie 12), laat hij de publishing- en notification-plugins hun werk doen, en schrijft hij ten slotte de nieuwe stage_id in de associatietabel.

11.2 Hoe een component workflow-ondersteuning aangeeft

Een component kiest voor Workflow door WorkflowServiceInterface te implementeren en WorkflowServiceTrait te gebruiken. Het component voor inhoud doet precies dit. De interface beantwoordt de vragen die de workflow-motor moet stellen:

use Joomla\CMS\Extension\Component;
use Joomla\CMS\Workflow\WorkflowServiceInterface;
use Joomla\CMS\Workflow\WorkflowServiceTrait;

class ContentComponent extends Component implements WorkflowServiceInterface
{
    use WorkflowServiceTrait;

    // Welke functies kan een overgang aansturen voor dit component?
    //   'core.state'    => true   (publiceren / depubliceren / archiveren / prullenbak)
    //   'core.featured' => true   (uitlichten / niet uitlichten)
}

Belangrijke methoden zijn onder meer isWorkflowActive($context) (staat workflow_enabled aan en ondersteunt het model het?), supportFunctionality($functionality, $context) (biedt dit component core.state of core.featured?) en filterTransitions() (welke overgangen zijn nu geldig voor een item?). Dit is de naad waar andere componenten in haken om workflow te krijgen.

Naar boven

12. Events en het uitbreiden van workflow

Workflow is event-gestuurd, en dat is wat het uitbreidbaar maakt. De drie kernplugins zijn niets bijzonders; ze luisteren gewoon naar dezelfde events als waar je eigen plugin naar kan luisteren.

12.1 De overgang-events

EventWanneer het afgaat
onWorkflowBeforeTransition Vóór de stap. Een plugin kan hem annuleren.
onWorkflowAfterTransition Ná de stap. Plugins voeren hier hun acties uit.
onWorkflowFunctionalityUsed Laat een plugin een functie (zoals status) als afgehandeld markeren.

Het before-event draagt een object WorkflowTransitionEvent. Een plugin kan er setStopTransition(true) op aanroepen om de stap tegen te houden, bijvoorbeeld als een verplicht veld leeg is. De publishing-plugin gebruikt het after-event om de artikelstatus daadwerkelijk te wijzigen.

12.2 Een minimale workflow-plugin

Om je eigen overgangsactie toe te voegen, schrijf je een plugin in de groep workflow die zich abonneert op de overgang-events:

public static function getSubscribedEvents(): array
{
    return [
        'onWorkflowBeforeTransition' => 'onBefore',
        'onWorkflowAfterTransition'  => 'onAfter',
    ];
}

public function onAfter(WorkflowTransitionEvent $event): void
{
    // $event->getExtension(), $event->getPks(), $event->getTransition()
    // voer hier je eigen actie uit: pushen naar een CDN, posten naar Slack, enz.
}

Om je overgang zijn eigen optie te geven (zoals de publicatie-keuzelijst), lever je een kleine forms/action.xml mee in de plugin. Joomla voegt die velden automatisch samen in het tabblad Opties van de overgang.

12.3 De events aan de inhoudskant

Wanneer een overgang de status van een artikel wijzigt, vuurt de publishing-plugin nog steeds de normale inhouds-events af, zoals onContentBeforeChangeState. Zo blijven bestaande plugins die op publiceren reageren werken, of er nu een workflow voor staat of niet.

Naar boven

13. Prestaties en probleemopsporing

Workflow voegt een klein beetje werk toe wanneer items worden opgeslagen en een paar extra tabellen aan de database, maar de kosten zijn klein, en die tabellen maken problemen makkelijk te traceren.

13.1 De prestatiekosten zijn klein

Een workflow-opzoeking is goedkoop. De huidige fase van een item vinden is een enkele geïndexeerde lezing op #__workflow_associations via zijn primaire sleutel (item_id, extension). De tabellen voor workflows, fases en overgangen zijn nietig naast #__content: een site met één workflow heeft één workflow-rij, een handvol fases en een handvol overgangen, hoeveel duizenden artikelen hij ook bevat. Het extra werk gebeurt wanneer een item wordt opgeslagen of een overgang afgaat, niet bij elke paginaweergave aan de voorkant, dus bezoekers merken er niets van.

13.2 De tabellen lezen om te debuggen

Omdat de status in vier kleine tabellen leeft, zie je met een paar query's precies waar elk item staat. Om de fase van artikel 42 te vinden:

SELECT s.title AS stage
FROM   #__workflow_associations AS a
JOIN   #__workflow_stages AS s ON s.id = a.stage_id
WHERE  a.item_id = 42
AND    a.extension = 'com_content.article';

Om de stappen op te sommen die een redacteur vanuit een bepaalde fase kan maken, lees je de gepubliceerde overgangen waarvan from_stage_id die fase is of -1 (Elke):

SELECT id, title, from_stage_id, to_stage_id
FROM   #__workflow_transitions
WHERE  workflow_id = 1
AND    from_stage_id IN (<huidige_fase_id>, -1)
AND    published = 1;

13.3 Veelvoorkomende dingen om te controleren

Wanneer inhoud zich vreemd gedraagt, ligt de oorzaak bijna altijd in deze tabellen of in de ACL:

  • Geen rij in #__workflow_associations voor een item betekent dat het nooit de workflow is binnengekomen. Sla het item opnieuw op zodat het zijn standaardfase krijgt.
  • Een overgang die de fase verplaatst maar niet publiceert, heeft een lege publicatiewaarde in zijn kolom options.
  • Een item dat niet verder kan, heeft geen gepubliceerde overgang uit zijn fase, of de gebruiker mist core.execute.transition op de overgang die het zou verplaatsen.
Naar boven

14. Webservices-API en headless

Dit komt op bij ontkoppelde en headless opstellingen, en het eerlijke antwoord weerspiegelt de manier waarop associaties werken: Workflow is vooral een redactioneel hulpmiddel aan de beheerkant.

  • Er is geen apart openbaar com_workflow REST-eindpunt in de Joomla-kern. Het component heeft geen API-map aan de sitekant; het draait alleen in het beheergedeelte.
  • Je leest en schrijft artikelen via de normale inhoudseindpunten. De status van het artikel (gepubliceerd / gedepubliceerd) is daar zichtbaar, want status is een echt veld op het artikel.
curl -H "X-Joomla-Token: <token>" \
  "https://example.test/api/index.php/v1/content/articles/42"

Moet een headless voorkant de workflow-fase van een artikel weten, dan is de bron van waarheid de tabel #__workflow_associations: koppel de id van een artikel aan item_id voor de extensie com_content.article. Overgangen aansturen van buiten het CMS is geen kernfunctie; je voert ze uit via de PHP-klasse Workflow (sectie 11) binnen Joomla, bijvoorbeeld vanuit een geplande taak of een eigen eindpunt dat je bouwt.

Naar boven

15. SEO en metadata

Workflow heeft geen eigen tags in de paginakop, maar het heeft een echt, indirect effect op je SEO, omdat het bepaalt wat er überhaupt gepubliceerd wordt.

15.1 Niets halfaf gaat live

De meest voorkomende SEO-schade op teamsites is dat halfbewerkte of dubbele concepten op de live site glippen en geïndexeerd raken. Een workflow met een beoordelingsfase stopt dat: een artikel bereikt de status Gepubliceerd pas nadat iemand het goedkeurt, zodat zoekmachines afgeronde pagina's zien, geen werk in uitvoering.

15.2 Archiveren in plaats van verwijderen

Een fase Gearchiveerd (gekoppeld aan de gearchiveerde status) laat je oude inhoud netjes met pensioen sturen. Gearchiveerde artikelen verlaten de hoofdlijsten maar behouden hun URL, wat voor SEO veel beter is dan een pagina verwijderen en zo een dode link maken. Combineer een overgang "Archiveren" met een redirect-strategie voor inhoud die je echt weghaalt.

15.3 Consistente publicatiediscipline

Omdat publiceren door overgangen wordt geleid, worden je publicatiedatums en uitlicht-vlaggen consistent door de workflow gezet in plaats van ad hoc door elke redacteur. Consistent, bewust publiceren is stilletjes goed voor zowel lezers als crawlers.

Naar boven

16. Veelgemaakte fouten en valkuilen

16.1 Redacteuren zijn de publicatieknop kwijt

Symptoom: na het inschakelen van workflow klagen redacteuren dat ze niet meer kunnen publiceren.

Oplossing: dit is verwacht gedrag. Geef het recht core.execute.transition op de publicatie-overgang aan de groepen die mogen publiceren. Het oude recht core.edit.state regelt publiceren niet meer zodra een workflow actief is.

16.2 Een artikel zit vast in een fase

Symptoom: een artikel zit in "Ter beoordeling" en niemand kan het verder krijgen.

Oplossing: er is geen overgang die uit die fase leidt naar waar je heen wilt, of de gebruiker mist het recht om hem uit te voeren. Voeg de ontbrekende overgang toe, of geef de juiste groep core.execute.transition erop.

16.3 Overgang publiceert niet

Symptoom: een overgang uitvoeren verplaatst het artikel naar een nieuwe fase, maar het verschijnt nooit op de site.

Oplossing: de overgang heeft geen publicatieactie, of de publicatie-optie staat op "niet gebruiken". Open de Opties van de overgang en zet Publiceren op Gepubliceerd. Fase verplaatsen en status zetten zijn twee aparte effecten.

16.4 Geen notificatie-e-mails

Symptoom: een overgang zou redacteuren moeten e-mailen, maar er komt niets aan.

Oplossing: controleer of de workflow-notificatieplugin is ingeschakeld, of de overgang "E-mail versturen" aan heeft staan met minstens één groep of ontvanger, en of de site echt mail kan versturen (test de mailinstellingen van Joomla).

16.5 Kan een fase niet verwijderen

Symptoom: Joomla weigert een fase te verwijderen.

Oplossing: je probeert de standaardfase te verwijderen, of een fase waar nog items in zitten. Maak eerst een andere fase de standaard, en haal eventuele items uit de fase voordat je hem verwijdert.

16.6 Workflow ingeschakeld maar er is niets veranderd

Symptoom: je hebt workflow aangezet maar bewerken voelt identiek.

Oplossing: je zit nog op de Basis-workflow, die de oude knoppen met opzet nabootst. Voeg je eigen fases en overgangen toe, of wijs een eigen workflow aan de categorie toe, om een echt proces te zien.

Naar boven

17. Beste praktijken

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

  • Schakel workflow alleen in als je een team of een proces hebt. Een solosite heeft er zelden baat bij en voegt klikken toe voor niets.
  • Houd het aantal fases klein. Drie of vier benoemde fases dekken de meeste redactionele behoeften. Elke extra fase vermenigvuldigt de overgangen die je moet definiëren.
  • Koppel publiceren zorgvuldig. Zorg dat de overgang naar je "live"-fase de actie Publiceren: Gepubliceerd draagt, anders verplaatst inhoud wel maar verschijnt hij nooit.
  • Gebruik rechten per overgang. Dit is de echte reden om een workflow te draaien: laat schrijvers indienen maar alleen managers goedkeuren, met core.execute.transition.
  • Schets de flow in de grafiek-editor voordat je de acties aansluit. De fases en pijlen zien maakt gaten en doodlopende wegen meteen duidelijk.
  • Wijs workflows per categorie toe wanneer maar een deel van de site beoordeling nodig heeft. Laat de rest op de simpele standaard staan.
  • Test de hele lus op een staging-kopie voordat je live gaat: indienen, goedkeuren, afwijzen, en controleer of de e-mails en de gepubliceerde status zich allemaal goed gedragen.
Naar boven

18. In het kort

INSCHAKELEN   Inhoud -> Opties -> Integratie -> Workflow inschakelen: Ja
BEHEREN       Inhoud -> Workflows (com_workflow, extensie com_content.article)
VISUEEL       Inhoud -> Workflows -> Grafiek (sleep fases/overgangen; sinds 6.1)
PER CATEGORIE Categorie -> Opties -> Workflow (overerven of er een kiezen)
ONDERDELEN    Workflow  > Fases  > Overgangen
FASE          een status waar een item in zit; precies een standaard per workflow
OVERGANG      een deur: van-fase -> naar-fase + acties (van = -1 betekent Elke)
ACTIES        publishing (status), featuring (uitgelicht), notification (e-mail)
STATUSWAARDEN gepubliceerd 1 | gedepubliceerd 0 | gearchiveerd 2 | prullenbak -2
ACL           core.manage.workflow (ontwerp) ; core.execute.transition (uitvoeren)
TABELLEN      #__workflows | #__workflow_stages | #__workflow_transitions
              #__workflow_associations (item_id, stage_id, extension)
DEBUG         koppel #__workflow_associations -> #__workflow_stages op stage_id
PHP UITVOEREN (new Workflow('com_content.article'))->executeTransition($ids, $tId)
EVENTS        onWorkflowBeforeTransition (annuleerbaar) ; onWorkflowAfterTransition
SERVICE       component implementeert WorkflowServiceInterface + WorkflowServiceTrait
API           geen openbaar com_workflow REST-eindpunt ; lees status via inhouds-API
Naar boven

19. Samenvatting

Joomla Workflow verandert de simpele schakelaar "gepubliceerd of niet" in een redactioneel proces dat je zelf ontwerpt. Hij staat standaard uit en wordt per component ingeschakeld, te beginnen met artikelen:

  • Voor redacteuren: inhoud beweegt door benoemde fases, en de enige stappen die je ziet, zijn de overgangen die toegestaan zijn vanaf waar het item staat.
  • Voor beheerders: workflows, fases en overgangen, plus rechten per overgang, bepalen wie mag indienen, wie mag goedkeuren en wie mag publiceren, en met de visuele grafiek-editor ontwerp je de hele flow als een diagram.
  • Voor ontwikkelaars: vier kleine tabellen, een enkele klasse Workflow, de WorkflowServiceInterface en de overgang-events voor/na leggen de hele motor netjes bloot, en de drie kernacties zijn gewoon plugins die je kunt kopiëren.
  • Voor SEO: een beoordelingsfase houdt onafgewerkt werk uit de index, en een archiveerfase stuurt oude pagina's met pensioen zonder hun URL's te breken.

Zodra je de drie bouwstenen begrijpt, hoe de publicatieactie van een overgang de echte status zet, en waar de huidige fase wordt opgeslagen, kun je een proces ontwerpen dat bij je team past en precies traceren waarom een stuk inhoud wel of niet live is.

Als je redacteuren steeds per ongeluk dingen publiceren, of inhoud blijft halverwege hangen, lost een goed gevormde workflow dat meestal op. Het loont om de fases en rechten bewust te ontwerpen, want een workflow die bij je team past, verandert publiceren van een vrijbuiterij in een rustige, voorspelbare routine.

Naar boven
Workflow in Joomla
Peter Martin
Peter Martin

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