Here is a "manipulated" version of my layout file (in other words, I have 
replaced some PHP code with hard-coded values in order to shorten its length):

<html>
<head>

<?= $this->headTitle() . "\n"; ?>
<?= $this->headMeta() . "\n"; ?>
<?= $this->headLink() . "\n"; ?>
<?= $this->headStyle() . "\n"; ?>
<?
if ( $this->dojo()->isEnabled() ):
                $this->dojo()->setCdnBase( Zend_Dojo::CDN_BASE_GOOGLE )
                                                                
->setCdnDojoPath( Zend_Dojo::CDN_DOJO_PATH_GOOGLE )
                                                                
->addStyleSheetModule( 'dijit.themes.tundra' )
                                                                ->useCdn();
                echo $this->dojo() . "\n";
endif;
?>
<?= $this->headScript() . "\n"; ?>

</head>

<body class="tundra">

<div id="main">
                <div>
                                <form>
                                <select name="setQuarterID" 
onChange="updateQuarterID()"/>
                                <option value="2">2008: Quarter 3</option>
                                <option value="3">2008: Quarter 4</option>
                                </select>
                                </form>
                                <?
                                $this->dojo()->enable()
                                                                                
->requireModule( 'dojo.rpc.JsonService' );

                                $this->headScript()->captureStart(); ?>
                                function updateQuarterID()
                                {
                                                var jsonQuarterSelect = new 
dojo.rpc.JsonService( '/manage/json/environment' );
                                                console.log( 
jsonQuarterSelect.setQuarterID() );
                                }
                                <? $this->headScript()->captureEnd() ?>
                </div>

                <div id="content">
                                <?= $this->layout()->content ?>
                </div>
</div>

</body>
</html>

If I call the following from any of the view scripts associated with 
controllers, then the expected Dojo-related code is placed in/near the header 
of my document:

<?
$this->dojo()->enable()
                                                ->requireModule( 
'dojo.rpc.JsonService' );

$this->headScript()->captureStart(); ?>
function demoRpc()
{
    var myObject = new dojo.rpc.JsonService( 'manage/json/environment' );
    console.log( myObject.setQuarterID() );
}
<? $this->headScript()->captureEnd() ?>


However, if I place the same code WITHIN the actual layout file itself, so that 
it is above the <?= $this->layout()->content ?> call let's say, and I remove it 
from the aforementioned view script (so won't be called/rendered twice), then 
the expected Dojo-related code is not displayed in/near the head.  Maybe I'm 
not understanding how all of the pieces are being rendered and in what order 
they are, but shouldn't I be able to call this from the layout itself?  How 
does this differ from a view in that aren't they "put back together" at the end?

Regards

----
Jeremy Brown
Senior Web Developer
Spear One
972.661.6038
www.spearone.com<http://www.spearone.com>

Reply via email to