web/lib/Zend/Dojo/View/Helper/ComboBox.php
changeset 64 162c1de6545a
parent 19 1c2f13fd785c
child 68 ecaf28ffe26e
equal deleted inserted replaced
63:5b37998e522e 64:162c1de6545a
       
     1 <?php
       
     2 /**
       
     3  * Zend Framework
       
     4  *
       
     5  * LICENSE
       
     6  *
       
     7  * This source file is subject to the new BSD license that is bundled
       
     8  * with this package in the file LICENSE.txt.
       
     9  * It is also available through the world-wide-web at this URL:
       
    10  * http://framework.zend.com/license/new-bsd
       
    11  * If you did not receive a copy of the license and are unable to
       
    12  * obtain it through the world-wide-web, please send an email
       
    13  * to license@zend.com so we can send you a copy immediately.
       
    14  *
       
    15  * @category   Zend
       
    16  * @package    Zend_Dojo
       
    17  * @subpackage View
       
    18  * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
       
    19  * @license    http://framework.zend.com/license/new-bsd     New BSD License
       
    20  * @version    $Id: ComboBox.php 20096 2010-01-06 02:05:09Z bkarwin $
       
    21  */
       
    22 
       
    23 /** Zend_Dojo_View_Helper_Dijit */
       
    24 require_once 'Zend/Dojo/View/Helper/Dijit.php';
       
    25 
       
    26 /**
       
    27  * Dojo ComboBox dijit
       
    28  *
       
    29  * @uses       Zend_Dojo_View_Helper_Dijit
       
    30  * @package    Zend_Dojo
       
    31  * @subpackage View
       
    32  * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
       
    33  * @license    http://framework.zend.com/license/new-bsd     New BSD License
       
    34   */
       
    35 class Zend_Dojo_View_Helper_ComboBox extends Zend_Dojo_View_Helper_Dijit
       
    36 {
       
    37     /**
       
    38      * Dijit being used
       
    39      * @var string
       
    40      */
       
    41     protected $_dijit  = 'dijit.form.ComboBox';
       
    42 
       
    43     /**
       
    44      * HTML element type
       
    45      * @var string
       
    46      */
       
    47     protected $_elementType = 'text';
       
    48 
       
    49     /**
       
    50      * Dojo module to use
       
    51      * @var string
       
    52      */
       
    53     protected $_module = 'dijit.form.ComboBox';
       
    54 
       
    55     /**
       
    56      * dijit.form.ComboBox
       
    57      *
       
    58      * @param  int $id
       
    59      * @param  mixed $value
       
    60      * @param  array $params  Parameters to use for dijit creation
       
    61      * @param  array $attribs HTML attributes
       
    62      * @param  array|null $options Select options
       
    63      * @return string
       
    64      */
       
    65     public function comboBox($id, $value = null, array $params = array(), array $attribs = array(), array $options = null)
       
    66     {
       
    67         $html = '';
       
    68         if (!array_key_exists('id', $attribs)) {
       
    69             $attribs['id'] = $id;
       
    70         }
       
    71         if (array_key_exists('store', $params) && is_array($params['store'])) {
       
    72             // using dojo.data datastore
       
    73             if (false !== ($store = $this->_renderStore($params['store'], $id))) {
       
    74                 $params['store'] = $params['store']['store'];
       
    75                 if (is_string($store)) {
       
    76                     $html .= $store;
       
    77                 }
       
    78                 $html .= $this->_createFormElement($id, $value, $params, $attribs);
       
    79                 return $html;
       
    80             }
       
    81             unset($params['store']);
       
    82         } elseif (array_key_exists('store', $params)) {
       
    83             if (array_key_exists('storeType', $params)) {
       
    84                 $storeParams = array(
       
    85                     'store' => $params['store'],
       
    86                     'type'  => $params['storeType'],
       
    87                 );
       
    88                 unset($params['storeType']);
       
    89                 if (array_key_exists('storeParams', $params)) {
       
    90                     $storeParams['params'] = $params['storeParams'];
       
    91                     unset($params['storeParams']);
       
    92                 }
       
    93                 if (false !== ($store = $this->_renderStore($storeParams, $id))) {
       
    94                     if (is_string($store)) {
       
    95                         $html .= $store;
       
    96                     }
       
    97                 }
       
    98             }
       
    99             $html .= $this->_createFormElement($id, $value, $params, $attribs);
       
   100             return $html;
       
   101         }
       
   102 
       
   103         // do as normal select
       
   104         $attribs = $this->_prepareDijit($attribs, $params, 'element');
       
   105         return $this->view->formSelect($id, $value, $attribs, $options);
       
   106     }
       
   107 
       
   108     /**
       
   109      * Render data store element
       
   110      *
       
   111      * Renders to dojo view helper
       
   112      *
       
   113      * @param  array $params
       
   114      * @return string|false
       
   115      */
       
   116     protected function _renderStore(array $params, $id)
       
   117     {
       
   118         if (!array_key_exists('store', $params) || !array_key_exists('type', $params)) {
       
   119             return false;
       
   120         }
       
   121 
       
   122         $this->dojo->requireModule($params['type']);
       
   123 
       
   124         $extraParams = array();
       
   125         $storeParams = array(
       
   126             'dojoType' => $params['type'],
       
   127             'jsId'     => $params['store'],
       
   128         );
       
   129 
       
   130         if (array_key_exists('params', $params)) {
       
   131             $storeParams = array_merge($storeParams, $params['params']);
       
   132             $extraParams = $params['params'];
       
   133         }
       
   134 
       
   135         if ($this->_useProgrammatic()) {
       
   136             if (!$this->_useProgrammaticNoScript()) {
       
   137                 require_once 'Zend/Json.php';
       
   138                 $this->dojo->addJavascript('var ' . $storeParams['jsId'] . ";\n");
       
   139                 $js = $storeParams['jsId'] . ' = '
       
   140                     . 'new ' . $storeParams['dojoType'] . '('
       
   141                     .     Zend_Json::encode($extraParams)
       
   142                     . ");\n";
       
   143                 $js = "function() {\n$js\n}";
       
   144                 $this->dojo->_addZendLoad($js);
       
   145             }
       
   146             return true;
       
   147         }
       
   148 
       
   149         return '<div' . $this->_htmlAttribs($storeParams) . '></div>';
       
   150     }
       
   151 }