<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect1 id="zend.progressbar.introduction" xmlns:xi="http://www.w3.org/2001/XInclude">
    <title>Zend_ProgressBar</title>

    <sect2 id="zend.progressbar.whatisit">
        <title>Einführung</title>

        <para>
            <classname>Zend_ProgressBar</classname> ist eine Komponente um Fortschrittsbalken in
            verschiedenen Umgebungen zu erstellen und zu aktualisieren. Sie besteht aus einem
            einzelnen Backend, welches des Fortschritt durch eines der verschiedenen Backends
            ausgibt. Bei jedem Update nimmt es einen absoluten Wert und optional eine Statusmeldung
            und ruft dann den Adapter mit einigen vorkalkulierten Werten, wie Prozentwerte und
            voraussichtliche Restzeit, auf.
        </para>
    </sect2>

    <sect2 id="zend.progressbar.basic">
        <title>Grundsätzliche Verwendung von Zend_Progressbar</title>

        <para>
            <classname>Zend_ProgressBar</classname> ist sehr einfach in seiner Verwendung. Man
            erstellt einfach eine neue Instanz von <classname>Zend_Progressbar</classname>,
            definiert einen minimalen und einen maximalan Wert, und wählt den Adapter der die Daten
            ausgibt. Wenn man die Datei ausführen will, muß man etwas ähnliches wie folgt machen:
        </para>

        <programlisting language="php"><![CDATA[
$progressBar = new Zend_ProgressBar($adapter, 0, $fileSize);

while (!feof($fp)) {
    // Mach was

    $progressBar->update($currentByteCount);
}

$progressBar->finish();
]]></programlisting>

        <para>
            Im ersten Schritt, wird eine Instanz von <classname>Zend_ProgressBar</classname>
            erstellt, mit einem speziellen Adapter, einem minimalen Wert von 0 und einem maximalen
            Wert der kompletten Dateigröße. Dann wird die Datei ausgeführt und bei jeder Schleife
            wird der Fortschrittsbalken mit der aktuellen Byteanzahl aktualisiert. Am Ende der
            Schleife, wird der Status des Fortschrittsbalken auf fertig gestellt.
        </para>

        <para>
            Man kann auch die <methodname>update()</methodname> Methode von
            <classname>Zend_ProgressBar</classname> ohne Argumente aufrufen, das die ETA einfach neu
            berechnet und den Adapter aktualisiert. Das ist nützlich wenn kein Update der Daten war,
            man aber den Fortschrittsbalken aktualisieren will.
        </para>
    </sect2>

    <sect2 id="zend.progressbar.persistent">
        <title>Persistenter Fortschritt</title>

        <para>
            Wenn man den Fortschrittsbalken über mehrere Aufrufe hinweg persistent haben will, kann
            man den Namen eines Session Namespaces als viertes Argument an den Constructor angeben.
            In diesem Fall wird der Fortschrittsbalken den Adapter nicht im Constructor
            benachrichtigen, sondern nur wenn man <methodname>update()</methodname> oder
            <methodname>finish()</methodname> aufruft. Auch der aktuelle Wert, der Statustext und
            die Startzeit für die ETA Kalkulation werden im nächsten Ablauf erneut geholt.
        </para>
    </sect2>

    <sect2 id="zend.progressbar.adapters">
        <title>Standard Adapter</title>

        <para>
            <classname>Zend_ProgressBar</classname> kommt mit den folgenden zwei Adaptern:

            <itemizedlist mark="opencircle">
                <listitem>
                    <para>
                        <link
                            linkend="zend.progressbar.adapter.console">Zend_ProgressBar_Adapter_Console</link>
                    </para>
                </listitem>

                <listitem>
                    <para>
                        <link
                            linkend="zend.progressbar.adapter.jspush">Zend_ProgressBar_Adapter_JsPush</link>
                    </para>
                </listitem>

                <listitem>
                    <para>
                        <link
                            linkend="zend.progressbar.adapter.jspull">Zend_ProgressBar_Adapter_JsPull</link>
                    </para>
                </listitem>
            </itemizedlist>
        </para>

        <xi:include href="Zend_ProgressBar_Adapter_Console.xml" />
        <xi:include href="Zend_ProgressBar_Adapter_JsPush.xml" />
        <xi:include href="Zend_ProgressBar_Adapter_JsPull.xml" />
    </sect2>
</sect1>
