Programmatically Load an Entityform in Drupal 7

22nd December 2015

I recently had my first experience using the Entityform module in a project. It was quite easy to configure with different form types, but then I needed to embed the form into an overlay. I was expecting to use the drupal_get_form() function and render it, but this didn’t work.

Here are the steps that I took to be able to load, render and embed the form.

Loading the Form

The first thing that I needed to do to render the form was to load an empty instance of the entityform using entityform_empty_load(). In this example, newsletter is the name of my form type.

$form = entityform_empty_load('newsletter');

This returns an instance of a relevant Entityform object.

Rendering the Form

The next step was to be able to render the form. I did this using the entity_form_wrapper() function.

As this function is within the entityform.admin.inc file and not autoloaded by Drupal, I needed to include it using module_load_include() so that the function was available.

module_load_include('inc', 'entityform', 'entityform.admin');

$output = entityform_form_wrapper($form, 'submit', 'embedded'),

The first argument is the Entityform object that was created in the previous step (I’ve submitted a patch to type hint this within entityform so that it’s clearer what is expected), which is required.

The other two arguments are optional. The second argument is the mode (submit is the default value), and the last is the form context. page is the default value, for use on the submit page, however I changed this to embedded.

I could then pass this result into my theme function to render it successfully within the relevant template file.

Resources

Questions? Comments? I’m @opdavies on Twitter.

About the Author

Picture of Oliver

Oliver Davies is a Web Developer, System Administrator and Drupal specialist based in the UK. He is a Senior Developer at Microserve and also provides freelance consultancy services for Drupal, Symfony and Laravel applications and Linux servers.

Availability

  • Currently no spare part-time capacity.
  • Currently no spare full-time capacity.