-- Peter Wansch <[EMAIL PROTECTED]> wrote
(on Tuesday, 09 September 2008, 12:46 AM -0700):
> 
> I am trying to find out what the best practice for using Dojo widgets in a
> Zend MVC application is. 
> The following works:
> 
> 1) In my view script xxxx.phtml I have the following:
> <?php
> 
> // Render common HTML header
> echo $this->render('partials/html_header.phtml');
> 
> ?>
> <div>
> <?= $this->dateTextBox('foo', '2008-07-11', array('required' => true)) ?>
> <?= $this->dojo() ?>
> <?= $this->render('partials/html_footer.phtml'); ?>
> 
> 2) My partial html_header.phtml looks like this:

Stop. First, you need to refactor to use Zend_Layout; including a header
and footer in each page is a really, really bad idea for long term
maintainability. Additionally, The dojo() view helper is designed to
work *with* a layout strategy -- define your various modules, etc,
directly in your view scripts, and then simply echo the dojo() view
helper in your layout -- and all will just work.

Give Zend_Layout a try, and then let us know if you're still having
issues.

> <?= $this->doctype('XHTML1_STRICT') ?>
> <html xmlns="http://www.w3.org/1999/xhtml";>
> <head>
>     <?= $this->headTitle($this->page_title) ?> 
>     <?php $this->headMeta()->appendHttpEquiv('Content-Type', 'text/html;
> charset=UTF-8'); echo $this->headMeta(); ?> 
>     <?php
> $this->headLink()->appendStylesheet(Zend_Controller_Front::getInstance()->getBaseUrl()
> . '/css/common.css'); echo $this->headLink(); ?> 
>     <?= $this->headStyle() ?>
>     <?= $this->dojo() ?>  
>     <?= $this->headScript() ?> 
> </head>
> <body class="tundra">
> 
> 3) In my controller base class in the init method I do this:
> 
>             Zend_Dojo::enableView($this->view); 
>            
> $this->view->dojo()->setLocalPath(Zend_Controller_Front::getInstance()->getBaseUrl()
> . '/js/dojo/dojo/dojo.js')
>                        ->addStyleSheetModule('dijit.themes.tundra')
>                        ->disable();
> 4) When needed in the specific controller action method, I enable dojo:
>     public function xxxxAction()
>     {
>         // Enable Dojo
>         $this->view->dojo()->enable();        
> 
> This works, but the this->dojo in my header is pointless. It only includes
> the main dojo.js. If I don't print this->dojo() after I declare my Dojo
> widget in the view script, the dijit code :
> 
> <script type="text/javascript">
> //<![CDATA[
> dojo.require("dijit.form.DateTextBox");
>     dojo.require("dojo.parser");
> dojo.addOnLoad(function() {
>     dojo.forEach(zendDijits, function(info) {
>         var n = dojo.byId(info.id);
>         if (null != n) {
>             dojo.attr(n, dojo.mixin({ id: info.id }, info.params));
>         }
>     })
>     dojo.parser.parse();
> });
> var zendDijits =
> [{"id":"foo","params":{"required":"true","dojoType":"dijit.form.DateTextBox"}}];
> //]]>
> 
> does not get generated. Somehow this does not look right. All the examples I
> have seen just have the call to dojo() in their respective layout scripts.
> Is that only when I use ZendLayout that the layout content gets parsed
> first?
> -- 
> View this message in context: 
> http://www.nabble.com/Where-to-put-tp19387497p19387497.html
> Sent from the Zend Framework mailing list archive at Nabble.com.
> 

-- 
Matthew Weier O'Phinney
Software Architect       | [EMAIL PROTECTED]
Zend Framework           | http://framework.zend.com/

Reply via email to