Using simplehtmldom API with Drupal to radically change node editing UI

Ryan Weal

April 12, 2012

In mid 2011 I took on an interesting code challenge and never got around to posting about it. The technique I describe here is available as part of my Drupal 6 module

translation wysiwyg if you would like to see a demonstration of the result. This blog post talks about the way we use simplehtmldom API module to traverse the node body content produced by a wysiwyg editor - and pick out all of the translatable elements which we then render as individual fields in the node editor UI. Still following? Awesome.

What simplehtmldom API does This module brings the

PHP Simple HTML DOM Parser into Drupal for use with your custom modules. It renders all of your HTML that you feed it as a tree of objects that you can perform operations on. If you have used JavaScript and/or JQuery you will probably feel somewhat comfortable working with it. It provides simple dom traversal, and then re-assembly of the HTML all in your PHP code.

How and what we want to parse In the

translation wysiwyg module we want to take the code from the default language version of a node and break it into strings.

How we want to put it back together The obvious problem that we're going to run into with all of these new form fields on our edit form is that we now must re-capture all of the items in the fields and put them in the appropriate places. Re-enter simplehtmldom API! Here are all of our steps to re-create the structure of our HTML body content

while preserving all of the images, hr tags, object tags... all other tags!

return to a node after the original has been updated. If a new paragraph was added to the node, the only thing to translate is a blank field where the untranslated content occurs. This can be extremely handy.