Hoe definieer je de functie
De functie verifier() van een formulier XXX (dat in een skelet wordt aangeduid met #FORMULAIRE_XXX
) wordt gedefinieerd in het bestand formulaires/xxx.php
of in het bestand formulaires/xxx/verifier.php
. De map formulaires/
moet zich in de map van een plugin bevinden of in de map squelettes/.
Deze functie zal worden genoemd
function formulaires_xxx_verifier_dist()
. De suffix _dist biedt een ontwikkelaar de mogelijkheid zijn eigen versie te maken door een functie te schrijven met de naam function formulaires_xxx_verifier()
De argumenten van de functie
De functie verifier() ontvangt automatisch in dezelfde volgorde de waarde van elke argument dat werd doorgegeven aan het baken #FORMULAIRE_XX. Door bijvoorbeeld te schrijven
#FORMULAIRE_XX{#ID_ARTICLE,#ID_RUBRIQUE}
met de functie
formulaires_xxx_verifier_dist($arg1,$arg2){
...
}
zal $arg1 de waarde #ID_ARTICLE hebben en $arg2 de waarde #ID_RUBRIQUE.
Wat moet de functie doen
De functie verifier() moet een tabel met invoerfouten terugsturen als resultaat van zijn verificaties.
Is alle invoer juist, dan is de tabel leeg en zal SPIP de functie traiter() van het formulier aanroepen om de verwerking uit te voeren.
Is de fouttabel die functie verifier() aanmaakt niet leeg, dan wordt traiter() ook niet aangeroepen en zal het formulier opnieuw worden weergegeven met de foutboodschappen, die de gebruiker vervolgens kan corrigeren.
Het is dus de bedoeling zoveel mogelijk verificaties te doen in functie verifier() om te zorgen voor de beste interactie.
Elke fout wordt teruggestuurd in de vorm van een associatie key=>waarde
, waarbij het gebruikelijk is de naam van de formuliervariabele als key te gebruiken.
Voorbeeld van een functie verifier()
Bekijk dit voorbeeld:
function formulaires_xxx_verifier_dist(){
$erreurs = array();
if (!_request('nom'))
$erreurs['nom'] = _T('info_obligatoire');
include_spip('inc/filtres');
if ($email = _request('email') AND !email_valide($email))
$erreurs['email'] = _T('form_email_non_valide');
return $erreurs;
}
Deze functie
- controleert dat de naam goed is vermeld en geeft anders een foutboodschap (in de vorm van een taalstring);
- controleert of een emailadres werd ingevoerd en geeft anders een foutboodschap (in de vorm van een taalstring).
Speciale velden
De functie verifier() kan enkele specifieke waardes in de tabel zetten:
message_erreur
Deze waarde wordt in een skelet gebruikt om een algemene foutmelding te tonen. Deze heeft betrekking op het gehele formulier.
message_ok
Deze waarde retourneert een succesmelding. Dit bericht kan bijvoorbeeld na de verificatie van een eerste invoer worden getoond, terwijl nog andere informatie moet worden ingevuld.
De aanwezigheid van deze boodschap verhindert het aanroepen van de functie traiter() van het formulier, wat uitsluitend gebeurt wanneer verifier() een lege tabel retourneert.
Personalisatie
Zoals bij charger() kan functie verifier() van een formulier via twee mechanismes worden gepersonaliseerd
Surcharge
Zoals hierboven aangegeven, kan de standaardfunctie verifier() worden overschreven met een eigen functie function formulaires_xxx_verifier()
die zal worden aangeroepen in plaats van de standaardfunctie, die de toevoeging _dist
heeft.
Deze overschrijvende functie kan worden gedefinieerd in het bestand formulaires/xxx/verifier.php
, of in een bestand options.php
dat wordt aangeroepen bij elke hit.
Pipeline
De pipeline formulaire_verifier kan het resultaat van de standaardfunctie verifier() aanpassen, ongeacht het CVT-formulier.
Dit is de methode die de voorkeur heeft in een plugin.
De pipeline ontvangt als argument een tabel in deze vorm:
array(
'args'=>array('form'=>$form,'args'=>$args),
'data'=>$res)
)
Door de functie pipeline als volgt te schrijven
function mijnplugin_formulaire_verifier($flux){
...
}
Zul je in $flux de volgende elementen terugvinden:
$flux['args']['form'] |
naam van het formulier (xxx in ons voorbeeld) |
$flux['args']['args'] |
argumenten van functie charger() in de volgorde waarin ze werden doorgegeven aan het baken #FORMULAIRE_XXX |
$flux['args']['data'] |
tabel $res geretourneerd door de standaardfunctie verifier() |
Alle formulieren passeren dezelfde pipeline. Je moet dus de waarde van $flux['args']['form']
testen om te zorgen dat je uitsluitend het gedrag van formulier xxx beïnvloedt.