I have my main (phptemplate) page template working fine, but when i view system areas (like user profile, login), there's a small layout break which I think is attributed to me removing the tag print $closure;.

Can anybody tell exactly what this tag does? Does it just render a closing div tag ?

Thanks for any help.

Comments

sepeck’s picture

search http://drupal.org/search/node/%24closure%3B+type%3Abook
takes you to this page
http://drupal.org/node/11812
which has this line

closure: Needs to be displayed at the bottom of the page, for any dynamic javascript that needs to be called once the page has already been displayed.

-Steven Peck
---------
Test site, always start with a test site.
Drupal Best Practices Guide -|- Black Mountain

-Steven Peck
---------
Test site, always start with a test site.
Drupal Best Practices Guide

luyendao’s picture

Thanks Steven for the reference and link, i'll know where to look in the future as well.

Lu

sepeck’s picture

Learning the tools of an environment is just one of the steps of learning a given product. That's why I laid out the steps of how I found the answer. For you and others who cme across the thread.

-Steven Peck
---------
Test site, always start with a test site.
Drupal Best Practices Guide -|- Black Mountain

-Steven Peck
---------
Test site, always start with a test site.
Drupal Best Practices Guide

Avalanche’s picture

And 5 years later, your advice is still good. :)

nasi’s picture

closure: Needs to be displayed at the bottom of the page, for any dynamic javascript that needs to be called once the page has already been displayed.

I have already found the above reference to $closure, but what exactly does that mean?

Can I use it to insert some javascript at the end of the page? This is something I need to do and currently I have the code directly in page.tpl.php but this is not a very elegant solution. If I could store it somewhere in the database so it is rendered as $closure then that would be a) much neater and b) mean that I don't have to remember to hack every theme I use.

There seems to be nowhere to set $closure through the admin interface. Perhaps it is something that has to be set through a hook function, possibly in template.php (although that would still necessitate changes to every theme used)?

Any light that could be shed would be appreciated.

voidengine’s picture

nasi - I am curious about this too, and I am very new to Drupal and PHP. Here's some relevant info:

from theme_closure() on api.drupal.org:

Description: Execute hook_footer() which is run at the end of the page right before the close of the body tag.

from hook_footer() on api.drupal.org:

Description: Insert closing HTML. This hook enables modules to insert HTML just before the (body) closing tag of web pages. This is useful for including javascript code and for outputting debug information.

From what I can tell so far, various modules (such as WYSIWYG editors) can put javascript info into the $closure variable by using the hook_footer() function. Being a super-newbie, I don't know how to use hooks yet, or where I might use this function outside of building a new module. Bet here's a page talking about what hooks are for what it's worth...

gav240z’s picture

If you don't include the print $closure; in the footer or below the footer of your template file. The Google Analytics module will not properly work. ;).