Drupal Module moment: WYSIWYG Filter

04 Jan 2016

Zo nu en dan kom je module tegen waarvan je wilde dat je die eerder tegen gekomen was. En ik vraag me af waarom wij deze niet eerder zijn tegengekomen: WYSIWYG Filter. Hij bestaat zelfs al sinds Drupal 6.

WYSIWYG Filter lost het volgende probleem op:

Wanneer je de Wysiwyg module geïnstalleerd hebt - en bijvoorbeeld TinyMCE gebruikt als editor - dan kan je onder /admin/config/content/wysiwyg/profile/ gewenste buttons configureren:

Waardoor je een tekst-editor krijgt en de content managers geen HTML code hoeven te schrijven:

(Screenshot uit Drupal intranet OpenLucius)

Om vervolgens ervoor te zorgen dat deze HTML ook daadwerkelijk in het frontend (voor de bezoekers) getoond wordt, moet je betreffende elementen toestaan. Dit kan je instellen onder ‘text formats’ (/admin/config/content/formats). In een standaard Drupal installatie zal je daar het volgende filter in moeten schakelen (om jouw Drupal tegen onveilige en ongewenste html/js te beschermen): ‘Limit allowed HTML tags’. Waarin je vervolgens aan moet geven welke elementen zijn toegestaan:

Probleem is nu dat álles gestript wordt, behalve wat hier staat. Dus ook HTML attributen en properties die je nodig hebt. Zoals bijvoorbeeld inline styles om teksten uit te lijnen en kleur te geven, maar ook benodigde id’s en classes. Na installatie van deze module heb je dat probleem niet meer, omdat deze wél juiste configuratie tools biedt en dus jouw gewenste elementen, attributen en properties wel doorlaat voor de Drupal website bezoekers:

Een uitgebreid screenshot vind je hier. Daarin zie je dat je tevens whitelists kan toevoegen voor gewenste toegestane:

  • classes
  • element id’s
  • URL’s met inline styles
  • domeinen

De module kan bijvoorbeeld ook automatisch rel="nofollow" plaatsen, gebaseerd op je instellingen. Op deze manier bouw je de content flow voor zoekmachines beter begrijpbaar op, wat positief is voor je Drupal SEO.

Ingebakken standaard veiligheid

HTML attributen gerelateerd aan de DOM events (on*) worden niet toegestaan om veiligheidsredenen (om bv XSS tegen te gaan). Ook worden volgende elementen niet toegestaan om veiligheidsredenen: applet, area, base, basefont, body, button, embed, form, frame, frameset, head, html, iframe, input, isindex, label, link, map, meta, noframes, noscript, object, optgroup, option, param, script, select, style, textarea, title.

Wrap up

De module is opgenomen in de Drupal 8 core, maar omdat Drupal 7 nog wel even in de buurt zal zijn leek het me goed kennis over deze Drupal module te delen. Vragen of feedback, let me know!.

Comments

Nóg meer
kennis nodig?

Check ons ons blog archief >