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!