From ba79710d5f8653877c8b19c23efb3a7a20f693a4 Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Wed, 23 Dec 2015 02:16:02 +0000 Subject: [PATCH] Added blog post --- source/_posts/2015-12-22-entityform.md | 54 ++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 source/_posts/2015-12-22-entityform.md diff --git a/source/_posts/2015-12-22-entityform.md b/source/_posts/2015-12-22-entityform.md new file mode 100644 index 00000000..2c3f9fc7 --- /dev/null +++ b/source/_posts/2015-12-22-entityform.md @@ -0,0 +1,54 @@ +--- +nav: blog +title: Programmatically Load an Entityform in Drupal 7 +tags: + - drupal + - drupal-7 + - drupal-planet + - entityform +meta: + description: How to programmatically load, render and embed an entityform in Drupal 7. +--- +{% block excerpt %} +I recently had my first experience using the [Entityform module](https://www.drupal.org/project/entityform) 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. +{% endblock %} + +{% block content %} +I recently had my first experience using the [Entityform module](https://www.drupal.org/project/entityform) 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. + +```php +$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. + +```php +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](https://www.drupal.org/node/2639584) 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 + +* [The entityform module](https://www.drupal.org/project/entityform) +* [My issue and patch to add the type hint to the entityform_form_wrapper function](https://www.drupal.org/node/2639584) +{% endblock %}