Ga naar hoofdinhoud

Contacteer ons op +32 2 306 02 11 of mail ons op info@desk02.be

Opties om form elementen te verwijderen in Drupal

Het komt vaak voor als je met Drupal werkt dat je voor een rol of in een specifieke context een form veld moet verwijderen via hook_form_alter() omdat de huidige gebruiker op dat moment niet het recht heeft om die waarde aan te passen. Om dat te bereiken zijn er niet minder dan 3 verschillende methodes. Eén van die methodes zou eigenlijk niet moeten gebruikt worden en alhoewel de 2 andere schijnbaar hetzelfde doen is dat achter de schermen helemaal niet zo.

unset()

Dit was de methode dat ik in het begin zelf gebruikte. Gewoon het veld unsetten en voila het veld was niet meer zichtbaar in het formulier. Het probleem hiermee is dat andere modules misschien ook nog zaken aan dat veld willen veranderen of dat er in validate en submit callbacks zaken mee gebeuren. Als er op die plaatsen niet gecheckt wordt of die property wel gezet is veroorzaakt dit notices.

#printed = TRUE

De render API laat je toe om bepaalde elementen in een renderable array te verbergen via hide() alvorens je de array output met render(). Het enige wat hide() eigenlijk doet is de #printed property op TRUE zetten zodat render() die niet meer themen. Je kan dus ook in een hook_form_alter() #printed op TRUE zetten zodat het veld niet getoond wordt.

Het probleem met deze methode is dat form API niet weet dat de gebruiker eigenlijk geen toegang heeft tot dit veld en dat een kwaadwillige gebruiker dus zelf het element terug kan toevoegen in de html en de waarde er nog van kan veranderen.

#access = FALSE

De laatste, en volgens mij enige correcte, manier om een form element van een formulier te verwijderen is om de #access property op FALSE te zetten. Op het moment dat het formulier getoond wordt zal drupal_render() hierop checken en elementen met #access FALSE zullen niet geoutput worden.

Het voordeel tegenover de vorige methode is dat form API wel rekening houdt met #access en dus zelfs als een gebruiker de waarde zelf zou meesturen deze niet meekomt in $form_state[‘values’].

Andere methodes?

Ken je nog andere methodes of zijn er zaken die ik over het hoofd heb gezien? Laat het ons weten in de comments!

Tags: Drupal 7

Reacties

Nieuwe reactie inzenden

De inhoud van dit veld is privé en zal niet openbaar worden gemaakt.
  • Adressen van webpagina's en e-mailadressen worden automatisch naar links omgezet.
  • Toegelaten HTML-tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Regels en paragrafen worden automatisch gesplitst.
  • U kan syntax highlighting toepassen door gebruik te maken van volgende tags: <code>, <blockcode>, <c>, <cpp>, <drupal5>, <drupal6>, <java>, <javascript>, <php>, <python>, <ruby> De ondersteunde tag formaten zijn: <foo>, [foo]
  • Feweb
  • Drupal
  • AnySurfer, Belgisch kwaliteitslabel voor toegankelijke websites

© Desk02 • Sitemap