Zend_ProgressBar_Adapter_JsPush.xml 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 15743 -->
  3. <!-- Reviewed: no -->
  4. <sect3 id="zend.progressbar.adapter.jspush">
  5. <title>Zend_ProgressBar_Adapter_JsPush</title>
  6. <para>
  7. <classname>Zend_ProgressBar_Adapter_JsPush</classname> ist ein Adapter der es erlaubt den
  8. Fortschrittsbalken in einem Browser über Javascript Push zu aktualisieren. Das bedeutet das
  9. keine zweite Verbindung benötigt wird um den Status über den aktuell laufenden Prozess zu
  10. erhalten, sondern das der Prozess selbst seinen Status direkt an den Browser schickt.
  11. </para>
  12. <para>
  13. Man kann auch die Optionen des Adapters entweder über die <code>set*</code> Methoden oder
  14. durch die Übergabe eines Arrays, oder einer Instanz von <classname>Zend_Config</classname>,
  15. an den Constructor mit dem Optionen als ersten Parameter. Die möglichen Optionen sind:
  16. </para>
  17. <itemizedlist>
  18. <listitem>
  19. <para>
  20. <code>updateMethodName</code>: Die Javascript Methode die bei jeder Aktualisierung
  21. aufgerufen werden soll. Standardwert ist
  22. <classname>Zend_ProgressBar_Update</classname>.
  23. </para>
  24. </listitem>
  25. <listitem>
  26. <para>
  27. <code>finishMethodName</code>: Die Javascript Methode die aufgerufen werden soll
  28. wenn der Beendet-Status gesetzt wurde. Der Standardwert ist <constant>NULL</constant>, was
  29. bedeutet das nichts passiert.
  30. </para>
  31. </listitem>
  32. </itemizedlist>
  33. <para>
  34. Die Verwendung dieses Adapters ist recht einfach. Zuerst wird ein Fortschrittsbalken im
  35. Browser erstellt, entweder mit JavaScript oder mit vorher erstelltem reinen HTML. Dann
  36. definiert man die Update Methode und optional die Finish Methode in JavaScript, die beide
  37. ein Json Objekt als einziges Argument nehmen. Das wird die Webseite mit einem lange
  38. laufenden Prozess, in einem versteckten <code>iframe</code> oder <code>object</code> Tag,
  39. aufgerufen. Wärend der Prozess läuft wird der Adapter die Update Methode bei jedem Update
  40. mit einem Json Objekt aufgerufen, das die folgenden Parameter enthält:
  41. </para>
  42. <itemizedlist>
  43. <listitem>
  44. <para>
  45. <code>current</code>: Der aktuelle absolute Wert
  46. </para>
  47. </listitem>
  48. <listitem>
  49. <para>
  50. <code>max</code>: Der maximale absolute Wert
  51. </para>
  52. </listitem>
  53. <listitem>
  54. <para>
  55. <code>percent</code>: Der berechnete Prozentwert
  56. </para>
  57. </listitem>
  58. <listitem>
  59. <para>
  60. <code>timeTaken</code>: Die Zeit die der Prozess bis jetzt gelaufen ist
  61. </para>
  62. </listitem>
  63. <listitem>
  64. <para>
  65. <code>timeRemaining</code>: Die erwartete Zeit bis der Prozess beendet ist
  66. </para>
  67. </listitem>
  68. <listitem>
  69. <para>
  70. <code>text</code>: Die optionale Statusmeldung, wenn angegeben
  71. </para>
  72. </listitem>
  73. </itemizedlist>
  74. <example id="zend.progressbar-adapter.jspush.example">
  75. <title>Grundsätzliches Beispiel für den Client-seitigen Teil</title>
  76. <para>
  77. Dieses Beispiel zeigt ein grundsätzliches Setup von HTML, CSS und JavaScript für den
  78. JsPush Adapter
  79. </para>
  80. <programlisting language="html"><![CDATA[
  81. <div id="zend-progressbar-container">
  82. <div id="zend-progressbar-done"></div>
  83. </div>
  84. <iframe src="long-running-process.php" id="long-running-process"></iframe>
  85. ]]></programlisting>
  86. <programlisting language="css"><![CDATA[
  87. #long-running-process {
  88. position: absolute;
  89. left: -100px;
  90. top: -100px;
  91. width: 1px;
  92. height: 1px;
  93. }
  94. #zend-progressbar-container {
  95. width: 100px;
  96. height: 30px;
  97. border: 1px solid #000000;
  98. background-color: #ffffff;
  99. }
  100. #zend-progressbar-done {
  101. width: 0;
  102. height: 30px;
  103. background-color: #000000;
  104. }
  105. ]]></programlisting>
  106. <programlisting language="javascript"><![CDATA[
  107. function Zend_ProgressBar_Update(data)
  108. {
  109. document.getElementById('zend-progressbar-done').style.width = data.percent + '%';
  110. }
  111. ]]></programlisting>
  112. <para>
  113. Das erstellt einen einfachen Container mit einem schwarzen Rand und einem Block der den
  114. aktuellen Prozess anzeigt. Man sollte den <code>iframe</code> oder <code>object</code>
  115. nicht mit <code>display: none;</code> verstecken, da einige Browser wie Safari 2 den
  116. aktuellen Inhalt dann nicht laden.
  117. </para>
  118. <para>
  119. Statt einen eigenen Fortschrittsbalken zu erstellen, kann es gewünscht sein einen von
  120. einer vorhandenen Bibliothek wir Dojo, jQuery usw zu verwenden. Es gibt zum Beispiel:
  121. </para>
  122. <itemizedlist>
  123. <listitem>
  124. <para>
  125. Dojo: <ulink
  126. url="http://dojotoolkit.org/book/dojo-book-0-9/part-2-dijit/user-assistance-and-feedback/progress-bar" />
  127. </para>
  128. </listitem>
  129. <listitem>
  130. <para>
  131. jQuery: <ulink url="http://t.wits.sg/2008/06/20/jquery-progress-bar-11/" />
  132. </para>
  133. </listitem>
  134. <listitem>
  135. <para>
  136. MooTools: <ulink url="http://davidwalsh.name/dw-content/progress-bar.php" />
  137. </para>
  138. </listitem>
  139. <listitem>
  140. <para>Prototype: <ulink url="http://livepipe.net/control/progressbar" /></para>
  141. </listitem>
  142. </itemizedlist>
  143. </example>
  144. <note>
  145. <title>Intervall der Updates</title>
  146. <para>
  147. Man sollte davon Abstand nehmen zuviele Updates zu senden, da jedes Update eine
  148. Mindestgröße von 1kb hat. Das ist eine Notwendigkeit für den Safari Browser um den
  149. Funktionsaufruf darzustellen und auszuführen. Der Internet Explorer hat eine ähnliche
  150. Einschränkung von 256 Bytes.
  151. </para>
  152. </note>
  153. </sect3>
  154. <!--
  155. vim:se ts=4 sw=4 et:
  156. -->