Zend_Dojo-Form-Examples.xml 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect2 id="zend.dojo.form.examples">
  5. <title>Dojo Formular Beispiele</title>
  6. <example id="zend.dojo.form.examples.dojoform">
  7. <title>Zend_Dojo_Form verwenden</title>
  8. <para>
  9. Der einfachste Weg um Dojo mit <classname>Zend_Form</classname> zu verwenden besteht
  10. darin <classname>Zend_Dojo_Form</classname> zu verwenden, entweder durch direkte
  11. Verwendung oder indem Sie erweitert wird. Dieses Beispiel zeigt die Erweiterung von
  12. <classname>Zend_Dojo_Form</classname> und die Verwendung aller Dijit Elemente. Es
  13. erstellt vier Unterformulare, und dekoriert das Formular damit ein TabContainer
  14. verwendet wird, welcher jedes Unterformular in seinem eigenen Tab zeigt.
  15. </para>
  16. <programlisting language="php"><![CDATA[
  17. class My_Form_Test extends Zend_Dojo_Form
  18. {
  19. /**
  20. * Optionen die mit Select Elementen verwendet werden
  21. */
  22. protected $_selectOptions = array(
  23. 'red' => 'Rouge',
  24. 'blue' => 'Bleu',
  25. 'white' => 'Blanc',
  26. 'orange' => 'Orange',
  27. 'black' => 'Noir',
  28. 'green' => 'Vert',
  29. );
  30. /**
  31. * Form Initialisierung
  32. *
  33. * @return void
  34. */
  35. public function init()
  36. {
  37. $this->setMethod('post');
  38. $this->setAttribs(array(
  39. 'name' => 'masterForm',
  40. ));
  41. $this->setDecorators(array(
  42. 'FormElements',
  43. array('TabContainer', array(
  44. 'id' => 'tabContainer',
  45. 'style' => 'width: 600px; height: 500px;',
  46. 'dijitParams' => array(
  47. 'tabPosition' => 'top'
  48. ),
  49. )),
  50. 'DijitForm',
  51. ));
  52. $textForm = new Zend_Dojo_Form_SubForm();
  53. $textForm->setAttribs(array(
  54. 'name' => 'textboxtab',
  55. 'legend' => 'Text Elements',
  56. 'dijitParams' => array(
  57. 'title' => 'Text Elements',
  58. ),
  59. ));
  60. $textForm->addElement(
  61. 'TextBox',
  62. 'textbox',
  63. array(
  64. 'value' => 'some text',
  65. 'label' => 'TextBox',
  66. 'trim' => true,
  67. 'propercase' => true,
  68. )
  69. )
  70. ->addElement(
  71. 'DateTextBox',
  72. 'datebox',
  73. array(
  74. 'value' => '2008-07-05',
  75. 'label' => 'DateTextBox',
  76. 'required' => true,
  77. )
  78. )
  79. ->addElement(
  80. 'TimeTextBox',
  81. 'timebox',
  82. array(
  83. 'label' => 'TimeTextBox',
  84. 'required' => true,
  85. )
  86. )
  87. ->addElement(
  88. 'CurrencyTextBox',
  89. 'currencybox',
  90. array(
  91. 'label' => 'CurrencyTextBox',
  92. 'required' => true,
  93. // 'currency' => 'USD',
  94. 'invalidMessage' => 'Ungültiger Wert. ' .
  95. 'Dollarzeichen, Komma und Cents ' .
  96. 'müssen vorhanden sein..',
  97. // 'fractional' => true,
  98. // 'symbol' => 'USD',
  99. // 'type' => 'currency',
  100. )
  101. )
  102. ->addElement(
  103. 'NumberTextBox',
  104. 'numberbox',
  105. array(
  106. 'label' => 'NumberTextBox',
  107. 'required' => true,
  108. 'invalidMessage' => 'Ungültiger Wert.',
  109. 'constraints' => array(
  110. 'min' => -20000,
  111. 'max' => 20000,
  112. 'places' => 0,
  113. )
  114. )
  115. )
  116. ->addElement(
  117. 'ValidationTextBox',
  118. 'validationbox',
  119. array(
  120. 'label' => 'ValidationTextBox',
  121. 'required' => true,
  122. 'regExp' => '[\w]+',
  123. 'invalidMessage' => 'Ungültiger nicht-leerzeichen Text.',
  124. )
  125. )
  126. ->addElement(
  127. 'Textarea',
  128. 'textarea',
  129. array(
  130. 'label' => 'Textarea',
  131. 'required' => true,
  132. 'style' => 'width: 200px;',
  133. )
  134. );
  135. $editorForm = new Zend_Dojo_Form_SubForm();
  136. $editorForm->setAttribs(array(
  137. 'name' => 'editortab',
  138. 'legend' => 'Editor',
  139. 'dijitParams' => array(
  140. 'title' => 'Editor'
  141. ),
  142. ))
  143. $editorForm->addElement(
  144. 'Editor',
  145. 'wysiwyg',
  146. array(
  147. 'label' => 'Editor',
  148. 'inheritWidth' => 'true',
  149. )
  150. );
  151. $toggleForm = new Zend_Dojo_Form_SubForm();
  152. $toggleForm->setAttribs(array(
  153. 'name' => 'toggletab',
  154. 'legend' => 'Toggle Elements',
  155. ));
  156. $toggleForm->addElement(
  157. 'NumberSpinner',
  158. 'ns',
  159. array(
  160. 'value' => '7',
  161. 'label' => 'NumberSpinner',
  162. 'smallDelta' => 5,
  163. 'largeDelta' => 25,
  164. 'defaultTimeout' => 1000,
  165. 'timeoutChangeRate' => 100,
  166. 'min' => 9,
  167. 'max' => 1550,
  168. 'places' => 0,
  169. 'maxlength' => 20,
  170. )
  171. )
  172. ->addElement(
  173. 'Button',
  174. 'dijitButton',
  175. array(
  176. 'label' => 'Button',
  177. )
  178. )
  179. ->addElement(
  180. 'CheckBox',
  181. 'checkbox',
  182. array(
  183. 'label' => 'CheckBox',
  184. 'checkedValue' => 'foo',
  185. 'uncheckedValue' => 'bar',
  186. 'checked' => true,
  187. )
  188. )
  189. ->addElement(
  190. 'RadioButton',
  191. 'radiobutton',
  192. array(
  193. 'label' => 'RadioButton',
  194. 'multiOptions' => array(
  195. 'foo' => 'Foo',
  196. 'bar' => 'Bar',
  197. 'baz' => 'Baz',
  198. ),
  199. 'value' => 'bar',
  200. )
  201. );
  202. $selectForm = new Zend_Dojo_Form_SubForm();
  203. $selectForm->setAttribs(array(
  204. 'name' => 'selecttab',
  205. 'legend' => 'Select Elements',
  206. ));
  207. $selectForm->addElement(
  208. 'ComboBox',
  209. 'comboboxselect',
  210. array(
  211. 'label' => 'ComboBox (select)',
  212. 'value' => 'blue',
  213. 'autocomplete' => false,
  214. 'multiOptions' => $this->_selectOptions,
  215. )
  216. )
  217. ->addElement(
  218. 'ComboBox',
  219. 'comboboxremote',
  220. array(
  221. 'label' => 'ComboBox (remoter)',
  222. 'storeId' => 'stateStore',
  223. 'storeType' => 'dojo.data.ItemFileReadStore',
  224. 'storeParams' => array(
  225. 'url' => '/js/states.txt',
  226. ),
  227. 'dijitParams' => array(
  228. 'searchAttr' => 'name',
  229. ),
  230. )
  231. )
  232. ->addElement(
  233. 'FilteringSelect',
  234. 'filterselect',
  235. array(
  236. 'label' => 'FilteringSelect (select)',
  237. 'value' => 'blue',
  238. 'autocomplete' => false,
  239. 'multiOptions' => $this->_selectOptions,
  240. )
  241. )
  242. ->addElement(
  243. 'FilteringSelect',
  244. 'filterselectremote',
  245. array(
  246. 'label' => 'FilteringSelect (remoter)',
  247. 'storeId' => 'stateStore',
  248. 'storeType' => 'dojo.data.ItemFileReadStore',
  249. 'storeParams' => array(
  250. 'url' => '/js/states.txt',
  251. ),
  252. 'dijitParams' => array(
  253. 'searchAttr' => 'name',
  254. ),
  255. )
  256. );
  257. $sliderForm = new Zend_Dojo_Form_SubForm();
  258. $sliderForm->setAttribs(array(
  259. 'name' => 'slidertab',
  260. 'legend' => 'Slider Elements',
  261. ));
  262. $sliderForm->addElement(
  263. 'HorizontalSlider',
  264. 'horizontal',
  265. array(
  266. 'label' => 'HorizontalSlider',
  267. 'value' => 5,
  268. 'minimum' => -10,
  269. 'maximum' => 10,
  270. 'discreteValues' => 11,
  271. 'intermediateChanges' => true,
  272. 'showButtons' => true,
  273. 'topDecorationDijit' => 'HorizontalRuleLabels',
  274. 'topDecorationContainer' => 'topContainer',
  275. 'topDecorationLabels' => array(
  276. ' ',
  277. '20%',
  278. '40%',
  279. '60%',
  280. '80%',
  281. ' ',
  282. ),
  283. 'topDecorationParams' => array(
  284. 'container' => array(
  285. 'style' => 'height:1.2em; ' .
  286. 'font-size=75%;color:gray;',
  287. ),
  288. 'list' => array(
  289. 'style' => 'height:1em; ' .
  290. 'font-size=75%;color:gray;',
  291. ),
  292. ),
  293. 'bottomDecorationDijit' => 'HorizontalRule',
  294. 'bottomDecorationContainer' => 'bottomContainer',
  295. 'bottomDecorationLabels' => array(
  296. '0%',
  297. '50%',
  298. '100%',
  299. ),
  300. 'bottomDecorationParams' => array(
  301. 'list' => array(
  302. 'style' => 'height:1em; ' .
  303. 'font-size=75%;color:gray;',
  304. ),
  305. ),
  306. )
  307. )
  308. ->addElement(
  309. 'VerticalSlider',
  310. 'vertical',
  311. array(
  312. 'label' => 'VerticalSlider',
  313. 'value' => 5,
  314. 'style' => 'height: 200px; width: 3em;',
  315. 'minimum' => -10,
  316. 'maximum' => 10,
  317. 'discreteValues' => 11,
  318. 'intermediateChanges' => true,
  319. 'showButtons' => true,
  320. 'leftDecorationDijit' => 'VerticalRuleLabels',
  321. 'leftDecorationContainer' => 'leftContainer',
  322. 'leftDecorationLabels' => array(
  323. ' ',
  324. '20%',
  325. '40%',
  326. '60%',
  327. '80%',
  328. ' ',
  329. ),
  330. 'rightDecorationDijit' => 'VerticalRule',
  331. 'rightDecorationContainer' => 'rightContainer',
  332. 'rightDecorationLabels' => array(
  333. '0%',
  334. '50%',
  335. '100%',
  336. ),
  337. )
  338. );
  339. $this->addSubForm($textForm, 'textboxtab')
  340. ->addSubForm($editorForm, 'editortab')
  341. ->addSubForm($toggleForm, 'toggletab')
  342. ->addSubForm($selectForm, 'selecttab')
  343. ->addSubForm($sliderForm, 'slidertab');
  344. }
  345. }
  346. ]]></programlisting>
  347. </example>
  348. <example id="zend.dojo.form.examples.decorating">
  349. <title>Ein existierendes Formular verändern um Dojo zu verwenden</title>
  350. <para>
  351. Ein bestehendes Formular kann verändert werden damit es auch Dojo verwendet, indem die
  352. statische Methode <methodname>Zend_Dojo::enableForm()</methodname> verwendet wird.
  353. </para>
  354. <para>
  355. Dieses erste Beispiel zeigt die eine bestehende Instanz eines Formulars dekoriert werden
  356. kann:
  357. </para>
  358. <programlisting language="php"><![CDATA[
  359. $form = new My_Custom_Form();
  360. Zend_Dojo::enableForm($form);
  361. $form->addElement(
  362. 'ComboBox',
  363. 'query',
  364. array(
  365. 'label' => 'Color:',
  366. 'value' => 'blue',
  367. 'autocomplete' => false,
  368. 'multiOptions' => array(
  369. 'red' => 'Rouge',
  370. 'blue' => 'Bleu',
  371. 'white' => 'Blanc',
  372. 'orange' => 'Orange',
  373. 'black' => 'Noir',
  374. 'green' => 'Vert',
  375. ),
  376. )
  377. );
  378. ]]></programlisting>
  379. <para>
  380. Alternativ kann die Formular Initialisierung auch leicht verschnellert werden:
  381. </para>
  382. <programlisting language="php"><![CDATA[
  383. class My_Custom_Form extends Zend_Form
  384. {
  385. public function init()
  386. {
  387. Zend_Dojo::enableForm($this);
  388. // ...
  389. }
  390. }
  391. ]]></programlisting>
  392. <para>
  393. Natürlich kann auch das getan werden... man könnte und sollte einfach die Klasse so
  394. verändern das Sie <classname>Zend_Dojo_Form</classname> ableitet, was eine eins-zu-eins
  395. Ersetzung von <classname>Zend_Form</classname> ist, die bereits Dojo versteht...
  396. </para>
  397. </example>
  398. </sect2>