Zend_ProgressBar
Introduction
Zend_ProgressBar est un composant pour créer et mettre à
jour les barres de progression dans différents environnements. Il consiste en un backend
unique, qui affiche la progression au travers de l'un des multiples adaptateurs. A
chaque mise à jour, il prend un chemin absolu et un message d'état, et appelle ensuite
l'adaptateur avec certaines valeurs précalculées comme le pourcentage et le temps
restant estimé.
Utilisation basique de Zend_Progressbar
Zend_ProgressBar est assez simple d'utilisation. Vous créez
simplement une nouvelle instance de Zend_Progressbar, en
définissant des valeurs minimum et maximum, et en choisissant un adaptateur pour
afficher les données. Si vous voulez travailler avec un fichier, vous pouvez faire comme
ceci :
$progressBar = new Zend_ProgressBar(0, $fileSize, $adapter);
// Faire quelque chose
$progressBar->update($currentByteCount);
}
$progressBar->finish();
Dans un premier temps, une instance de Zend_ProgressBar,
avec une valeur minimum de 0, une valeur maximum correspondant à la taille totale du
fichier et un adaptateur spécifique. Ensuite on travaille avec le fichier et à chaque
boucle la barre de progression est mise à jour avec le nombre d'octets courant. A la fin
de la boucle, le statut de la barre de progression est réglé à terminé.
Zend_ProgressBar possède aussi une méthode
refresh() qui recalcule le temps restant estimé et met à jour l'adaptateur.
Ceci est pratique quand il n'y a aucune donnée à mettre à jour mais que vous souhaitez
que la barre de progression soit mise à jour.
Adaptateurs standard
Zend_ProgressBar est fourni avec les deux adaptateurs
suivants :
Zend_ProgressBar_Adapter_Console
Zend_ProgressBar_Adapter_Console est un adaptateur de type
texte pour les terminaux. Il peut automatiquement détecter la largeur du terminal mais
supporte aussi des largeurs personnalisées. Vous pouvez définir quels éléments seront
affichés avec la barre de progression et personnaliser leur ordre. Vous pouvez aussi définir
le style de la barre de progression elle-même.
Note: Reconnaissance automatique de la largeur de la console
shell_exec est nécessaire pour que ceci fonctionne sur les systèmes
de type *nix. Sur Windows, il y a toujours un terminal fixe de 80 caractères de large,
donc la reconnaissance automatique n'est pas nécessaire.
Vous pouvez paramétrer les options de l'adaptateur soit via les méthodes
set* soit en fournissant un tableau ("array") ou une instance
Zend_Config en tant que premier paramètre du constructeur. Les
options disponibles sont :
-
outputStream : un flux de sortie différent, si vous ne souhaitez pas
utiliser STDOUT. Peut être n'importe quel autre flux come php://stderr
ou un chemin vers un fichier.
-
width : soit un entier ou la constante AUTO de
Zend_Console_ProgressBar.
-
elements : soit NULL par défaut ou un tableau avec
au moins l'une des constantes de Zend_Console_ProgressBar
suivantes comme valeur :
-
ELEMENT_PERCENT : la valeur courante en
pourcentage.
-
ELEMENT_BAR : la barre qui va représenter le
pourcentage.
-
ELEMENT_ETA : le calcul automatique du temps restant
estimé (NDT. : "Estimated Time for Accomplishment"). Cet élément est affiché
pour la première fois qu'après cinq secondes, car durant ce temps, il n'est
pas possible de calculer des résultats précis.
-
ELEMENT_TEXT : un message de statut optionnel concernant
le processus courant.
-
textWidth : largeur en caractères de l'élément
ELEMENT_TEXT. Par défaut vaut 20.
-
charset : encodage de l'élément ELEMENT_TEXT. Par défaut
vaut "utf-8".
-
barLeftChar : un caractère qui est utilisé du côté gauche de
l'indicateur de la barre de progression.
-
barRightChar : un caractère qui est utilisé du côté droit de
l'indicateur de la barre de progression.
-
barIndicatorChar : un caractère qui est utilisé pour l'indicateur
de la barre de progression. Celui-ci peut être vide.
Zend_ProgressBar_Adapter_JsPush
Zend_ProgressBar_Adapter_JsPush est un adaptateur qui vous
permet de mettre à jour une barre de progression dans un navigateur au travers de
Javascript. Ceci veut dire qu'une seconde connexion n'est pas nécessaire pour recueillir le
statut du processus courant, mais que le processus lui-même envoie son statut directement au
navigateur.
Vous pouvez paramétrer les options de l'adaptateur soit avec les méthodes
set* soit en fournissant un tableau ("array") ou une instance de
Zend_Config contenant les options en tant que premier paramètre du
constructeur. Les options disponibles sont :
-
updateMethodName : la méthode Javascript qui sera appelée à
chaque mise à jour. La valeur par défaut est
Zend_ProgressBar_Update.
-
finishMethodName : la méthode Javascript qui sera appelée lorsque
le statut terminé sera atteint. La valeur par défaut est NULL, qui veut
dire que rien n'est fait.
L'utilisation de cet adaptateur est assez simple. Premièrement vous créez une barre de
progression pour le navigateur, soit avec Javascript ou auparavant en pur HTML. Ensuite vous
définissez une méthode de mise à jour et optionnellement une méthode de finalisation en
Javascript, les deux acceptant un objet JSON en tant qu'unique argument. Ensuite vous
appelez une page Web avec un processus chronophage dans une balise iframe ou
object masqué. Pendant que le processus tourne, l'adaptateur appelle la méthode
de mise à jour à chaque mise à jour avec un objet JSON, contenant le paramètres suivants
:
-
current : la valeur courante
-
max : la valeur maximum
-
percent : le pourcentage calculé
-
timeTaken : le temps depuis quand le processus courant est en
marche
-
timeRemaining : le temps estimé pour que le processus se
termine
-
text : le message de statut optionnel, si fourni
Example #1 Exemple basique du fonctionnement côté-client
Cet exemple illustre un paramétrage basique du HTML, CSS et JavaScript pour
l'adaptateur JsPush :
<div id="zend-progressbar-container">
<div id="zend-progressbar-done"></div>
</div>
<iframe src="long-running-process.php" id="long-running-process"></iframe>
#long-running-process {
position: absolute;
left: -100px;
top: -100px;
width: 1px;
height: 1px;
}
#zend-progressbar-container {
width: 100px;
height: 30px;
border: 1px solid #000000;
background-color: #ffffff;
}
#zend-progressbar-done {
width: 0;
height: 30px;
background-color: #000000;
}
function Zend_ProgressBar_Update(data)
{
document.getElementById('zend-progressbar-done').style.width = data.percent + '%';
}
Ceci créera un simple conteneur avec une bordure noire et un bloc qui indique le
niveau du processus courant. Vous ne devez pas masquer l'iframe ou
l'object par display: none; , car dans ce cas les navigateurs
comme Safari 2 ne chargeront pas le contenu réel.
Plutôt que de créer votre barre de progression personnalisée, vous pouvez utiliser
une de celles disponibles dans les librairies JavaScript comme Dojo, jQuery etc. Par
exemple, il existe :
-
Dojo : http://dojotoolkit.org/book/dojo-book-0-9/part-2-dijit/user-assistance-and-feedback/progress-bar
-
jQuery : http://t.wits.sg/2008/06/20/jquery-progress-bar-11/
-
MooTools : http://davidwalsh.name/dw-content/progress-bar.php
-
Prototype : http://livepipe.net/control/progressbar
Note: Intervalle de mise à jour
Vous devez faire attention à ne pas envoyer trop de mises à jour, puisque chaque
mise à jour a une taille minimum de 1ko. Ceci est requis par le navigateur Safari pour
rendre et exécuter l'appel de fonction. Internet Explorer possède une limitation
similaire mais à 256 octets.
Zend_ProgressBar_Adapter_JsPull
Zend_ProgressBar_Adapter_JsPull est l'opposé de jsPush, car il
requiert de venir récupérer les nouvelles mises à jour, plutôt que d'envoyer les mises à
jour vers le navigateur. Généralement, vous devriez utiliser l'adaptateur avec l'option de
persistance de Zend_ProgressBar. Lors de l'appel, l'adaptateur envoie
une chaîne JSON vers le navigateur, qui est comparable à la chaîne JSON envoyée par
l'adaptateur jsPush. La seule différence est qu'il contient un paramètre supplémentaire
"finished ", qui vaut FALSE quand update() est appelée
ou TRUE quand finish() est appelée.
Vous pouvez paramétrer les options de l'adaptateur soit avec les méthodes
set* soit en fournissant un tableau ("array") ou une instance de
Zend_Config contenant les options en tant que premier paramètre du
constructeur. Les options disponibles sont :
|
|