00001 <?php 00026 require_once "Zend/Form/Decorator/ViewHelper.php"; 00027 00031 require_once "ZendX/JQuery/Form/Decorator/UiWidgetElementMarker.php"; 00032 00041 class ZendX_JQuery_Form_Decorator_UiWidgetElement 00042 extends Zend_Form_Decorator_ViewHelper 00043 implements ZendX_JQuery_Form_Decorator_UiWidgetElementMarker 00044 { 00050 protected $_attribs; 00051 00057 public $helper; 00058 00064 protected $_jQueryParams = array(); 00065 00071 public function getElementAttribs() 00072 { 00073 if (null === $this->_attribs) { 00074 if($this->_attribs = parent::getElementAttribs()) { 00075 if (array_key_exists('jQueryParams', $this->_attribs)) { 00076 $this->setJQueryParams($this->_attribs['jQueryParams']); 00077 unset($this->_attribs['jQueryParams']); 00078 } 00079 } 00080 } 00081 00082 return $this->_attribs; 00083 } 00084 00092 public function setJQueryParam($key, $value) 00093 { 00094 $this->_jQueryParams[(string) $key] = $value; 00095 return $this; 00096 } 00097 00104 public function setJQueryParams(array $params) 00105 { 00106 $this->_jQueryParams = array_merge($this->_jQueryParams, $params); 00107 return $this; 00108 } 00109 00116 public function getJQueryParam($key) 00117 { 00118 $this->getElementAttribs(); 00119 $key = (string) $key; 00120 if (array_key_exists($key, $this->_jQueryParams)) { 00121 return $this->_jQueryParams[$key]; 00122 } 00123 00124 return null; 00125 } 00126 00132 public function getJQueryParams() 00133 { 00134 $this->getElementAttribs(); 00135 return $this->_jQueryParams; 00136 } 00137 00145 public function render($content) 00146 { 00147 $element = $this->getElement(); 00148 $view = $element->getView(); 00149 if (null === $view) { 00150 require_once 'Zend/Form/Decorator/Exception.php'; 00151 throw new Zend_Form_Decorator_Exception('UiWidgetElement decorator cannot render without a registered view object'); 00152 } 00153 00154 if(method_exists($element, 'getJQueryParams')) { 00155 $this->setJQueryParams($element->getJQueryParams()); 00156 } 00157 $jQueryParams = $this->getJQueryParams(); 00158 00159 $helper = $this->getHelper(); 00160 $separator = $this->getSeparator(); 00161 $value = $this->getValue($element); 00162 $attribs = $this->getElementAttribs(); 00163 $name = $element->getFullyQualifiedName(); 00164 00165 $id = $element->getId(); 00166 $attribs['id'] = $id; 00167 00168 $elementContent = $view->$helper($name, $value, $jQueryParams, $attribs); 00169 switch ($this->getPlacement()) { 00170 case self::APPEND: 00171 return $content . $separator . $elementContent; 00172 case self::PREPEND: 00173 return $elementContent . $separator . $content; 00174 default: 00175 return $elementContent; 00176 } 00177 } 00178 }