phpzend-frameworkzend-framework-mvc

Zend_Framework -- How do I put Javascript in the layout?


I need a method of inserting javascript which is controller/action specific into a layout. That javascript needs to go inside the <head> of the document, far from where normal content is placed. I already have an infrastructure in place which allows use of multiple views per page, and the Zend_Layout I already have takes full advantage of this:

<?php
     $script = $this->layout()->script;
     if (!is_null($script)) : ?>
<script type="text/javascript"> // <![CDATA[
  <?php echo $script; ?>
// ]]>
</script>
<?php endif; ?>

However, I'd like the script output to be automatically selected, just like the normal view is automatically placed into $this->layout()->content of the layout by default. I understand this facility is provided by the ViewRenderer class. Basically, what I'd like to do is check for an instance of /VIEWPATH/scripts/CONTROLLER/ACTION.js.php, and render it as the script named output segment if it exists.

I could relatively simply create a Zend_Controller_Plugin which would automatically do that in post dispatch, but then controllers would have no way of setting values on the script's view. I also would need some way of replicating how the ViewRenderer controller plugin is inflecting the controller and action names.

Ideally I'd just somehow tack this on to the ViewRenderer helper, but it doesn't seem to support that kind of thing.

Am I going about this entirely wrong? Is there some mechanism for embedding page specific Javascript built into the framework? (I can't be the only person with this problem....)

Billy3


Solution

  • Extending my comment

    Here is the doc for what are you looking for:

    http://framework.zend.com/manual/1.12/en/zend.view.helpers.html#zend.view.helpers.initial.headscript

    You can use captureStart() and create your scripts dynamically inside each related view. With this approach you don't need to create *.js.php files.