Zend_Dojo-View-Dojo.xml 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 17987 -->
  3. <!-- Reviewed: no -->
  4. <sect2 id="zend.dojo.view.dojo">
  5. <title>dojo() Ayudante de Vista</title>
  6. <para>
  7. El ayudante de vista
  8. <methodname>dojo()</methodname>
  9. está destinado a simplificar el
  10. establecimiento del medio ambiente de Dojo, incluyendo las
  11. siguientes responsabilidades:
  12. </para>
  13. <itemizedlist>
  14. <listitem>
  15. <para>Especificar bien un CDN o un path local para instalar Dojo.</para>
  16. </listitem>
  17. <listitem>
  18. <para>Especificando paths a módulos Dojo personalizados.</para>
  19. </listitem>
  20. <listitem>
  21. <para>Especificando sentencias dojo.require.</para>
  22. </listitem>
  23. <listitem>
  24. <para>Especificando hojas de estilo dijit a usar.</para>
  25. </listitem>
  26. <listitem>
  27. <para>Especificando eventos dojo.addOnLoad().</para>
  28. </listitem>
  29. </itemizedlist>
  30. <para>
  31. La implementación del ayudante de vista
  32. <methodname>dojo()</methodname>
  33. es un ejemplo de
  34. implementación de un marcador de posición. El conjunto de datos en él,
  35. persiste entre los
  36. objetos vista y puede ser directamente activado con en "echo" de
  37. <acronym>PHP</acronym>
  38. desde su script.
  39. </para>
  40. <example id="zend.dojo.view.dojo.usage">
  41. <title>dojo() Ejemplo de Uso del Ayudante de Vista</title>
  42. <para>En este ejemplo, asumamos que el desarrollador estará usando Dojo desde un path
  43. local,
  44. se necesitarán varios dijits, y se utilizará el tema de dijit Tundra.</para>
  45. <para>En muchas páginas, el desarrollador no podrá utilizar Dojo para nada. Así, vamos a
  46. centrarnos primero en un view script donde Dojo es necesario y luego en el layout
  47. script, en donde vamos a configurar algo del medio ambiente de Dojo y luego lo
  48. mostraremos.</para>
  49. <para>En primer lugar, tenemos que decir nuestro objeto vista que utilice el path del
  50. ayudante de vista de Dojo. Esto puede hacerse en el arranque o en un plugin de ejecución
  51. temprana; simplemente apoderarse de su objeto vista y ejecutar lo siguiente:</para>
  52. <programlisting language="php"><![CDATA[
  53. $view->addHelperPath('Zend/Dojo/View/Helper/', 'Zend_Dojo_View_Helper');
  54. ]]></programlisting>
  55. <para>El paso siguiente, el view script. En este caso, vamos a especificar que vamos a
  56. estar
  57. utilizando un FilteringSelect -- que consumirá un almacén personalizado basado en
  58. QueryReadStore, al que llamamos 'PairedStore' y almacenado en nuestro módulo 'custom'.</para>
  59. <programlisting language="php"><![CDATA[
  60. <?php // establecer el data store para FilteringSelect ?>
  61. <div dojoType="custom.PairedStore" jsId="stateStore"
  62. url="/data/autocomplete/type/state/format/ajax"
  63. requestMethod="get"></div>
  64. <?php // Elemento de entrada: ?>
  65. State: <input id="state" dojoType="dijit.form.FilteringSelect"
  66. store="stateStore" pageSize="5" />
  67. <?php // establecer elementos requeridos por dojo:
  68. $this->dojo()->enable()
  69. ->setDjConfigOption('parseOnLoad', true)
  70. ->registerModulePath('custom', '../custom/')
  71. ->requireModule('dijit.form.FilteringSelect')
  72. ->requireModule('custom.PairedStore'); ?>
  73. ]]></programlisting>
  74. <para>En nuestro script de esquema, vamos entonces a comprobar si Dojo está habilitado, y
  75. si
  76. es así, haremos algunas configuraciones más generales y lo ensamblaremos:</para>
  77. <programlisting language="php"><![CDATA[
  78. <?php echo $this->doctype() ?>
  79. <html>
  80. <head>
  81. <?php echo $this->headTitle() ?>
  82. <?php echo $this->headMeta() ?>
  83. <?php echo $this->headLink() ?>
  84. <?php echo $this->headStyle() ?>
  85. <?php if ($this->dojo()->isEnabled()){
  86. $this->dojo()->setLocalPath('/js/dojo/dojo.js')
  87. ->addStyleSheetModule('dijit.themes.tundra');
  88. echo $this->dojo();
  89. }
  90. ?>
  91. <?php echo $this->headScript() ?>
  92. </head>
  93. <body class="tundra">
  94. <?php echo $this->layout()->content ?>
  95. <?php echo $this->inlineScript() ?>
  96. </body>
  97. </html>
  98. ]]></programlisting>
  99. <para>En este punto, sólo necesita asegurarse de que sus archivos están en el lugar
  100. correcto
  101. y que ha creado el punto final de acción para su FilteringSelect!</para>
  102. </example>
  103. <sect3 id="zend.dojo.view.dojo.declarative">
  104. <title>Uso Programático y Declarativo de Dojo</title>
  105. <para>
  106. Dojo permite usar a ambos
  107. <emphasis>declarative</emphasis>
  108. y
  109. <emphasis>programmatic</emphasis>
  110. en muchas de sus características. El uso de
  111. <emphasis>Declarative</emphasis>
  112. utiliza elementos
  113. <acronym>HTML</acronym>
  114. con atributos no estándar
  115. que se parsean cuando la página se está cargado. Mientras que
  116. ésta es una sintaxis
  117. poderosa y simple de utilizar, para muchos desarrolladores esto
  118. puede causar problemas
  119. con la validación de páginas.
  120. </para>
  121. <para>
  122. El uso de
  123. <emphasis>Programmatic</emphasis>
  124. permite al desarrollador decorar los
  125. elementos existentes tirando de ellos por ID o
  126. selectores
  127. <acronym>CSS</acronym>
  128. y
  129. pasarlos a los constructores apropiados de objetos en Dojo. Debido a que no se usan
  130. atributos
  131. <acronym>HTML</acronym>
  132. no standard, las páginas continúan con la validación.
  133. </para>
  134. <para>
  135. En la práctica, ambos casos de uso permiten una degradación elegante cuando
  136. javascript
  137. está desactivado o los diversos recursos de Dojo script están fuera de
  138. alcance. Para
  139. promover las normas y validación de documentos, Zend Framework hace uso de
  140. los usos
  141. programáticos por defecto; los diversos ayudantes de vista generarán javascript
  142. y lo
  143. empujan al ayudante de vista
  144. <methodname>dojo()</methodname>
  145. para su inclusión
  146. cuando sean presentados.
  147. </para>
  148. <para>Utilizando esta técnica los desarrolladores pueden también desear explorar la
  149. posibilidad de escribir sus propia decoración programática de la página. Uno de los
  150. beneficios sería la posibilidad de especificar handlers para eventos dijit.</para>
  151. <para>Para permitir esto, así como la posibilidad de usar sintaxis declarativa, hay
  152. disponibles una serie de métodos estáticos para establecer globamente este
  153. comportamiento.</para>
  154. <example id="zend.dojo.view.dojo.declarative.usage">
  155. <title>Especificando el Uso Declarativo y Programático de Dojo</title>
  156. <para>
  157. Para especificar el uso declarativo, simplemente llame al método estático
  158. <methodname>setUseDeclarative()</methodname>
  159. :
  160. </para>
  161. <programlisting language="php"><![CDATA[
  162. Zend_Dojo_View_Helper_Dojo::setUseDeclarative();
  163. ]]></programlisting>
  164. <para>
  165. Si decide más bien utilizar el uso programático, llame al método estático
  166. <methodname>setUseProgrammatic()</methodname>
  167. :
  168. </para>
  169. <programlisting language="php"><![CDATA[
  170. Zend_Dojo_View_Helper_Dojo::setUseProgrammatic();
  171. ]]></programlisting>
  172. <para>Por último, si quiere crear sus propias normas programáticas, debe especificar el
  173. uso programático, pero al pasarle el valor '-1'; en esta situación, no se creará
  174. ningún javascript para decorar cualquier dijit usado.</para>
  175. <programlisting language="php"><![CDATA[
  176. Zend_Dojo_View_Helper_Dojo::setUseProgrammatic(-1);
  177. ]]></programlisting>
  178. </example>
  179. </sect3>
  180. <sect3 id="zend.dojo.view.dojo.themes">
  181. <title>Temas</title>
  182. <para>Dojo permite la creación de los temas de su dijits (widgets). Puede seleccionar uno
  183. pasándolo en un path de módulo:</para>
  184. <programlisting language="php"><![CDATA[
  185. $view->dojo()->addStylesheetModule('dijit.themes.tundra');
  186. ]]></programlisting>
  187. <para>
  188. La ruta del módulo es descubierta por utilizar el carácter '.' como separador de
  189. directorio y utilizando el último valor en la lista como el nombre del archivo
  190. <acronym>CSS</acronym>
  191. en ese directorio del tema a usar; en el ejemplo de arriba,
  192. Dojo buscará el tema en
  193. 'dijit/themes/tundra/tundra.css'.
  194. </para>
  195. <para>Cuando se utiliza un tema, es importante recordar pasar la calse del tema a, por lo
  196. menos un contenedor rodeando cualquier dijits que se utilice; el caso de uso más común
  197. es pasárselo en el body:</para>
  198. <programlisting language="html"><![CDATA[
  199. <body class="tundra">
  200. ]]></programlisting>
  201. </sect3>
  202. <sect3 id="zend.dojo.view.dojo.layers">
  203. <title>Usando Layers (Construcciones Personalizadas)</title>
  204. <para>Por defecto, cuando utilice uns sentencia dojo.require, dojo hará una solicitud de
  205. retorno al servidor para agarrar al archivo javascript apropiado. Si hay muchos dijits
  206. en el lugar, esto se traduce en muchas peticiones al servidor -- lo que no es óptimo.</para>
  207. <para>
  208. La respuesta de Dojo a esto es proporcionar la capacidad de crear
  209. <emphasis>custom
  210. builds (construcciones personalizadas</emphasis>
  211. . Las contrucciones hacen varias
  212. cosas:
  213. </para>
  214. <itemizedlist>
  215. <listitem>
  216. <para>
  217. Grupos de archivos necesarios en
  218. <emphasis>layers</emphasis>
  219. ; una capa
  220. (layer) agrupa a todos archivos necesarios en un único archivo JS. (De
  221. ahí el
  222. nombre de esta sección.)
  223. </para>
  224. </listitem>
  225. <listitem>
  226. <para>"Interns" no son archivos javascript usados por dijits (típicamente, archivos
  227. de plantilla). También están agrupados en el mismo archivo JS como la capa.
  228. </para>
  229. </listitem>
  230. <listitem>
  231. <para>Pasa el archivo a través de ShrinkSafe, que elimina espacios en blanco y
  232. comentarios, así como acorta nombres de variables.</para>
  233. </listitem>
  234. </itemizedlist>
  235. <para>Algunos archivos pueden no ser superpuestos, pero el proceso creará una versión
  236. especial del directorio con la archivo capa y todos los otros archivos. Esto le permite
  237. tener una distribución reducida adaptada a su sitio o necesidades de aplicación.</para>
  238. <para>
  239. Para usar una capa, el ayudante de vista
  240. <methodname>dojo()</methodname>
  241. tiene el
  242. método
  243. <methodname>addLayer()</methodname>
  244. para añadir paths de capas requeridas:
  245. </para>
  246. <programlisting language="html"><![CDATA[
  247. $view->dojo()->addLayer('/js/foo/foo.js');
  248. ]]></programlisting>
  249. <para>
  250. Para más información sobre la creación de construcciones personalizadas, por favor
  251. <ulink
  252. url="http://dojotoolkit.org/book/dojo-book-0-9/part-4-meta-dojo/package-system-and-custom-builds"
  253. > consulte la docuemntación de Build de Dojo</ulink>
  254. .
  255. </para>
  256. </sect3>
  257. <sect3 id="zend.dojo.view.dojo.methods">
  258. <title>Métodos Disponibles</title>
  259. <para>
  260. El ayudante de vista
  261. <methodname>dojo()</methodname>
  262. siempre devuelve una instancia
  263. del contenedor del marcador de posición dojo. Ese objeto
  264. contenedor dispone de los
  265. siguientes métodos:
  266. </para>
  267. <itemizedlist>
  268. <listitem>
  269. <para>
  270. <methodname>setView(Zend_View_Interface $view)</methodname>
  271. : establecer una
  272. instancia de vista en el contenedor.
  273. </para>
  274. </listitem>
  275. <listitem>
  276. <para>
  277. <methodname>enable()</methodname>
  278. : habilitar explícitamente la integración de
  279. Dojo.
  280. </para>
  281. </listitem>
  282. <listitem>
  283. <para>
  284. <methodname>disable()</methodname>
  285. : deshabilitar la integración de
  286. Dojo.
  287. </para>
  288. </listitem>
  289. <listitem>
  290. <para>
  291. <methodname>isEnabled()</methodname>
  292. : determinar cuándo la integración de Dojo
  293. está habilitada o no.
  294. </para>
  295. </listitem>
  296. <listitem>
  297. <para>
  298. <methodname>requireModule($module)</methodname>
  299. : establecer una sentencia
  300. <methodname>dojo.require</methodname>
  301. </para>
  302. </listitem>
  303. <listitem>
  304. <para>
  305. <methodname>getModules()</methodname>
  306. : determinar qué módulos han sido
  307. requeridos.
  308. </para>
  309. </listitem>
  310. <listitem>
  311. <para>
  312. <methodname>registerModulePath($module, $path)</methodname>
  313. : registrar un path
  314. de un módulo personalizado de Dojo.
  315. </para>
  316. </listitem>
  317. <listitem>
  318. <para>
  319. <methodname>getModulePaths()</methodname>
  320. : obtener la lista de los paths de
  321. módulos registrados.
  322. </para>
  323. </listitem>
  324. <listitem>
  325. <para>
  326. <methodname>addLayer($path)</methodname>
  327. : añadir una capa (construcción
  328. personalizada) del path a utilizar.
  329. </para>
  330. </listitem>
  331. <listitem>
  332. <para>
  333. <methodname>getLayers()</methodname>
  334. : conseguir una lista de todos los paths
  335. de capas registrados (construcción
  336. personalizada).
  337. </para>
  338. </listitem>
  339. <listitem>
  340. <para>
  341. <methodname>removeLayer($path)</methodname>
  342. : eliminar la capa que concuerde
  343. con
  344. <varname>$path</varname>
  345. de la lista de capas registradas
  346. (construcción personalizada).
  347. </para>
  348. </listitem>
  349. <listitem>
  350. <para>
  351. <methodname>setCdnBase($url)</methodname>
  352. : establecer la URL base para un CDN;
  353. típicamente, una de las
  354. <constant>Zend_Dojo::CDN_BASE_AOL</constant>
  355. o
  356. <constant>Zend_Dojo::CDN_BASE_GOOGLE</constant>
  357. , pero sólo necesita ser el
  358. string del URL antes del número de versión.
  359. </para>
  360. </listitem>
  361. <listitem>
  362. <para>
  363. <methodname>getCdnBase()</methodname>
  364. : recuperar el CDN de la url base a
  365. utilizar.
  366. </para>
  367. </listitem>
  368. <listitem>
  369. <para>
  370. <methodname>setCdnVersion($version = null)</methodname>
  371. : establecer cuál es la
  372. versión de Dojo a utilizar desde el CDN.
  373. </para>
  374. </listitem>
  375. <listitem>
  376. <para>
  377. <methodname>getCdnVersion()</methodname>
  378. : recuperar que versión de Dojo será
  379. utilizada desde el CDN.
  380. </para>
  381. </listitem>
  382. <listitem>
  383. <para>
  384. <methodname>setCdnDojoPath($path)</methodname>
  385. : establecer el path relativo a
  386. un archivo dojo.js o dojo.xd.js sobre un CDN;
  387. típicamente, uno de los
  388. <constant>Zend_Dojo::CDN_DOJO_PATH_AOL</constant>
  389. o
  390. <constant>Zend_Dojo::CDN_DOJO_PATH_GOOGLE</constant>
  391. , pero sólo debe ser
  392. el string del path detrás del número de versión.
  393. </para>
  394. </listitem>
  395. <listitem>
  396. <para>
  397. <methodname>getCdnDojoPath()</methodname>
  398. : recuperar el último segmento del
  399. path del CDN de la url apuntando al archivo
  400. dojo.js.
  401. </para>
  402. </listitem>
  403. <listitem>
  404. <para>
  405. <methodname>useCdn()</methodname>
  406. : decirle al contenedor que utilice el CDN;
  407. implícitamente permite integración.
  408. </para>
  409. </listitem>
  410. <listitem>
  411. <para>
  412. <methodname>setLocalPath($path)</methodname>
  413. : decirle al contenedor el path a
  414. una instalación local de Dojo (deberá ser una
  415. ruta relativa al servidor, y
  416. contener el propio archivo dojo.js); implícitamente
  417. permite integración.
  418. </para>
  419. </listitem>
  420. <listitem>
  421. <para>
  422. <methodname>getLocalPath()</methodname>
  423. : determinar qué ruta local a Dojo está
  424. siendo utilizada.
  425. </para>
  426. </listitem>
  427. <listitem>
  428. <para>
  429. <methodname>useLocalPath()</methodname>
  430. : ¿la integración está utilizando un
  431. path local de Dojo?
  432. </para>
  433. </listitem>
  434. <listitem>
  435. <para>
  436. <methodname>setDjConfig(array $config)</methodname>
  437. : conjunto de valores de
  438. configuración dojo/dijit (espera un array asociativo).
  439. </para>
  440. </listitem>
  441. <listitem>
  442. <para>
  443. <methodname>setDjConfigOption($option, $value)</methodname>
  444. : establecer un
  445. único valor de configuración para dojo/dijit.
  446. </para>
  447. </listitem>
  448. <listitem>
  449. <para>
  450. <methodname>getDjConfig()</methodname>
  451. : obtener todos los valores de
  452. configuración de dojo/dijit.
  453. </para>
  454. </listitem>
  455. <listitem>
  456. <para>
  457. <methodname>getDjConfigOption($option, $default = null)</methodname>
  458. :
  459. conseguir un único valor de configuración de dojo/dijit.
  460. </para>
  461. </listitem>
  462. <listitem>
  463. <para>
  464. <methodname>addStylesheetModule($module)</methodname>
  465. : agregar una hoja de
  466. estilo sobre la base del tema de un módulo.
  467. </para>
  468. </listitem>
  469. <listitem>
  470. <para>
  471. <methodname>getStylesheetModules()</methodname>
  472. : obtener hojas de estilo
  473. registradas como temas de módulos.
  474. </para>
  475. </listitem>
  476. <listitem>
  477. <para>
  478. <methodname>addStylesheet($path)</methodname>
  479. : agregar una hoja de estilo
  480. local para su uso con Dojo.
  481. </para>
  482. </listitem>
  483. <listitem>
  484. <para>
  485. <methodname>getStylesheets()</methodname>
  486. : obtener hojas de estilo locales
  487. Dojo.
  488. </para>
  489. </listitem>
  490. <listitem>
  491. <para>
  492. <methodname>addOnLoad($spec, $function = null)</methodname>
  493. : agregar un lambda
  494. para dojo.onLoad para llamadas. Si se pasa un argumento, se
  495. supone que que puede
  496. ser tanto el nombre de una función o dar por terminado
  497. javascript. Si se pasan
  498. dos argumentos, el primero se supone que es el nombre de
  499. la variable de la
  500. instancia de un objeto y el segundo ya sea un nombre de método
  501. en ese objeto o
  502. un cierre a utilizar con ese objeto.
  503. </para>
  504. </listitem>
  505. <listitem>
  506. <para>
  507. <methodname>prependOnLoad($spec, $function = null)</methodname>
  508. : exactamente
  509. como
  510. <methodname>addOnLoad()</methodname>
  511. , excluyendo agregar al principio el
  512. comienzo de onLoad stack.
  513. </para>
  514. </listitem>
  515. <listitem>
  516. <para>
  517. <methodname>getOnLoadActions()</methodname>
  518. : recuperar todas las acciones
  519. dojo.onLoad registradas con el contenedor. Esto
  520. será un array de arrays.
  521. </para>
  522. </listitem>
  523. <listitem>
  524. <para>
  525. <methodname>onLoadCaptureStart($obj = null)</methodname>
  526. : capturar los datos
  527. que se utilizarán como lambda para dojo.onLoad(). Si se
  528. provee $obj, los códigos
  529. JS capturados serán considerados un cierre a utilizar
  530. con ese objeto
  531. Javascript.
  532. </para>
  533. </listitem>
  534. <listitem>
  535. <para>
  536. <methodname>onLoadCaptureEnd($obj = null)</methodname>
  537. : finalizar la captura
  538. de datos para su uso con dojo.onLoad().
  539. </para>
  540. </listitem>
  541. <listitem>
  542. <para>
  543. <methodname>javascriptCaptureStart()</methodname>
  544. : captura javascript
  545. arbitrario para ser incluido en Dojo JS (onLoad, require,
  546. etc.
  547. statements).
  548. </para>
  549. </listitem>
  550. <listitem>
  551. <para>
  552. <methodname>javascriptCaptureEnd()</methodname>
  553. : finalizar la captura de
  554. javascript.
  555. </para>
  556. </listitem>
  557. <listitem>
  558. <para>
  559. <methodname>__toString()</methodname>
  560. : emitir el contenedor a un string;
  561. muestra todo el estilo
  562. <acronym>HTML</acronym>
  563. y elementos del script.
  564. </para>
  565. </listitem>
  566. </itemizedlist>
  567. </sect3>
  568. </sect2>