I finally created a Google Code project for all my source code. You can find it at http://bit.ly/bgVXTq.
Archive for March, 2010
Updated Zend_Dojo_View_Helper_Dialog
Monday, March 15th, 2010Update!
I’ve been tinkering around with view helpers quite a bit now and I realized that a lot of what I did in the Dialog could be done much easier by extending the DijitContainer view helper. So, I rewrote the dialog view helper to extend DijitContainer and moved Zend_Dojo_View_Helper_Dijit_Extended to Zend_Dojo_View_Helper_Dojo_Extended because the methods are meant to be used statically similar to Zend_Dojo_View_Helper::setUseDeclarative(). For those of you that have no idea what I’m talking about you should read Zend_Dojo_View_Helper_Dialog first.
New code!
Zend_Dojo_View_Helper_Dojo_Extended
This little puppy exists for the sole purpose of adding stylesheets based on the set dojo path (local/CDN) and version (if CDN).
Usage
// Code from Zend_Dojo_View_Helper_Dialog which adds the stylesheet for enhanced dialogs Zend_Dojo_View_Helper_Dojo_Extended::addStylesheet('/dojox/widget/Dialog/Dialog.css');
Code
/** * Zend Framework * * LICENSE * * This source file is subject to the new BSD license that is bundled * with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://framework.zend.com/license/new-bsd * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to so we can send you a copy immediately. * * @category Zend * @package Zend_Dojo_View_Helper * @copyright Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License * @version $Id$ */ /** * Zend_Calendar * * @category Zend * @package Zend_Dojo_View_Helper * @copyright Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */ class Zend_Dojo_View_Helper_Dojo_Extended extends Zend_Dojo_View_Helper_Dojo { /** * Holds the base path for scripts. */ protected static $_scriptBase = null; /** * Dojo for static methods. */ protected static $_dojo = null; /** * View for static methods. */ protected static $_view = null; /** * Static setting for script base. * @param string $scriptBase Path to the base script directory. */ public static function setScriptBase($scriptBase) { self::$_scriptBase = $scriptBase; } /** * Static getter for script base. * @return string */ public static function getScriptBase() { return self::$_scriptBase; } /** * Adds a stylesheet based on the dojo path (local or cdn). * Method is static for situations where you need the stylesheets * to render even if even the dijits haven't been called but * will during execution (AJAX calls). * * @param string $stylesheet Path to stylesheet from base path. */ public static function addStylesheet($path) { // Set static view if necessary if (null === self::$_view) { $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer'); self::$_view = $viewRenderer->view; self::$_dojo = self::$_view->dojo(); } // Determine path to use if (null === self::getScriptBase()) { if (self::$_dojo->useLocalPath()) { self::setScriptBase(self::$_dojo->getLocalPath()); } else { self::setScriptBase(self::$_dojo->getCdnBase() . self::$_dojo->getCdnVersion()); } } self::$_dojo->addStylesheet(self::getScriptBase() . $path); } }
Zend_Dojo_View_Helper_Dialog
Usage
This view helper can be used similar to other layout view helpers.
// Simple dialog with premade content =$this->dialog('myDialog', 'I am a dialog with some content.', array('title' => 'I am a title'), array('style' => 'height: 50%; width: 50%')); // Enhanced (dojox.widget.Dialog) dialog =$this->dialog('myDialog', 'I am a dialog with some content.', array('enhanced' => true, 'title' => 'I am a title'), array('style' => 'height: 50%; width: 50%')); // Dialog using capturing dialog()->captureStart('dialog', array('title' => 'I am a title'), array());?> I am a dialog with some content! =$this->dialog()->captureEnd('dialog');?>
Code
/** * Zend Framework * * LICENSE * * This source file is subject to the new BSD license that is bundled * with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://framework.zend.com/license/new-bsd * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to so we can send you a copy immediately. * * @category Zend * @package Zend_Dojo_View_Helper_Dialog * @copyright Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License * @version $Id$ */ /** * Zend_Calendar * * @category Zend * @package Zend_Dojo_View_Helper_Dialog * @copyright Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */ class Zend_Dojo_View_Helper_Dialog extends Zend_Dojo_View_Helper_DijitContainer { const DIALOG_DOJO = 'dijit.Dialog'; const DIALOG_DOJOX = 'dojox.widget.Dialog'; /** * Holds the default dialog type. */ public static $_dialogType = self::DIALOG_DOJO; /** * Sets the default dialog type to use. * * @param string $dojoType Type of dijit to use. */ public static function setDialogType($dojoType) { switch ($dojoType) { case self::DIALOG_DOJOX: self::$_dialogType = $dojoType; break; default: self::$_dialogType = self::DIALOG_DOJO; break; } } /** * Dialog view helper. * * @param string $id JavaScript id for the dialog. * @param array $attribs Attributes for the dialog. * @param array $options Options for the dialog. */ public function dialog($id = null, $content = '', array $params = array(), array $attribs = array()) { if (0 === func_num_args()) { return $this; } $this->_setup($params); return $this->_createLayoutContainer($id, $content, $params, $attribs); } /** * Begin capturing content for layout container * * @param string $id * @param array $params * @param array $attribs * @return void */ public function captureStart($id, array $params = array(), array $attribs = array()) { $this->_setup($params); return parent::captureStart($id, $params, $attribs); } /** * Setup the dialog type and add stylesheets if needed. */ protected function _setup($params) { $this->_module = self::$_dialogType; if (array_key_exists('enhanced', $params)) { switch ($params['enhanced']) { case self::DIALOG_DOJOX: Zend_Dojo_View_Helper_Dojo_Extended::addStylesheet('/dojox/widget/Dialog/Dialog.css'); $this->_module = self::DIALOG_DOJOX; break; default: $this->_module = self::DIALOG_DOJO; } unset($params['enhanced']); } $this->_dijit = $this->_module; } }
Cya’s
Thanks for reading! Keep in touch for updates to the DataGrid view helper.
Zend_Dojo_View_Helper_Dialog
Friday, March 12th, 2010Quickie
I’m going to make this one short & sweet. I’ve created a view helper for Dialogs (and an extended Dijit view helper).
Zend_Dojo_View_Helper_Dijit_Extended (wtb: namespaces)
view; self::$_dojo = self::$_view->dojo(); } // Determine path to use if (null === self::getScriptBase()) { if (self::$_dojo->useLocalPath()) { self::setScriptBase(self::$_dojo->getLocalPath()); } else { self::setScriptBase(self::$_dojo->getCdnBase() . self::$_dojo->getCdnVersion()); } } self::$_dojo->addStylesheet(self::getScriptBase() . $path); } }
Zend_Dojo_View_Helper_Dialog
Pretty simple view helper that renders a dialog using the regular (dijit.Dialog) method or the dojox (dojox.widget.Dialog) method.
Usage
// Regular dialog =$this->dialog('myDialog', array('title' => 'w00t!', 'content' => 'I am a w00tastic dialog'));?> // Enhanced dojox dialog =$this->dialog('myDialog', array('title' => 'w00t!', 'content' => 'I am a w00tastic dialog'), array('useDojox' => true);?>
Code
dojo->requireModule($dialogType); // Add styles if ($dialogType == self::DIALOG_DOJOX) { self::addStylesheet('/dojox/widget/Dialog/Dialog.css'); } // Programmatic if ($this->_useProgrammatic()) { if (!$this->_useProgrammaticNoScript()) { $this->dojo->addJavascript('var ' . $id . ";\n"); $js = $id . ' = ' . 'new ' . $dialogType . '(' . Zend_Json::encode($attribs) . ");"; $this->dojo->_addZendLoad("function(){{$js}}"); } return ''; } // Set extra attribs for declarative if (!array_key_exists('id', $attribs)) { $attribs['id'] = $id; } if (!array_key_exists('jsId', $attribs)) { $attribs['jsId'] = $id; } if (!array_key_exists('dojoType', $attribs)) { $attribs['dojoType'] = $dialogType; } if (array_key_exists('content', $attribs)) { $content = $attribs['content']; unset($attribs['content']); } return '_htmlAttribs($attribs) . '>' . $content . "\n"; } }
Hope it makes life a little easier. Enjoy!