Zend_Text_Table
est un composant pour créer à la volée des
tables de type texte avec différents décorateurs. Ceci peut être utile, si vous souhaitez
soit envoyé des données structurées dans des emails textuels, qui sont sont utilisés pour
leurs polices mono-espacés, ou pour afficher des informations sous forme de tableaux dans
une application CLI. Zend_Text_Table
supporte les colonnes
multi-lignes, les fusions de colonnes ainsi que l'alignement.
Encodage
Zend_Text_Table
suppose que vos chaînes sont encodés en
UTF-8 par défaut. Si ce n'est pas le cas, vous pouvez fournir l'encodage en tant que
paramètre du constructeur ou à la méthode setContent
de
Zend_Text_Table_Column
. Alternativement si vous avez un encodage
différent dans le processus complet, vous pouvez définir l'encodage d'entrée ("input")
standard avec Zend_Text_Table::setInputCharset($charset)
. Dans le
cas où vous avez besoin d'un autre encodage pour la sortie ("output") de la table, vous
pouvez le paramétrer avec
Zend_Text_Table::setOutputCharset($charset)
.
Un objet Zend_Text_Table
consiste en des lignes, qui
contiennent des colonnes, représenté par Zend_Text_Table_Row
et
Zend_Text_Table_Column
. Lors de la création d'une table, vous pouvez
fournir un tableau avec les options pour la table. Celles-ci sont :
-
columnWidths
(obligatoire) : un tableau définissant toutes les largeurs de colonnes en nombre de caractères. -
decorator
: le décorateur à utiliser pour les bordures de la table. Le défaut estunicode
, mais vous pouvez aussi spécifierascii
ou fournir une instance d'un objet décorateur personnalisé. -
padding
: le remplissage gauche et droit de la colonne en caractères. Le remplissage par défaut est zéro. -
AutoSeparate
: la manière comment les lignes sont séparées avec des lignes horizontales. Par défaut, il y a une séparation entre chaque ligne. Ceci est défini entant que bitmask contenant une ou plus des constantes deZend_Text_Table
suivantes :-
Zend_Text_Table::AUTO_SEPARATE_NONE
-
Zend_Text_Table::AUTO_SEPARATE_HEADER
-
Zend_Text_Table::AUTO_SEPARATE_FOOTER
-
Zend_Text_Table::AUTO_SEPARATE_ALL
Où "header" est toujours la première ligne, et "footer" est toujours la dernière.
-
Les lignes sont simplement ajoutées à la table en créant une nouvelle instance de
Zend_Text_Table_Row
, et en l'ajoutant à la table via la méthode
appendRow
. Les lignes elle-même n'ont pas d'options. Vous pouvez aussi fournir
un tableau directement à la méthode appendRow
, qui le convertira
automatiquement en des objets Row
, contenant les multiples objets
Column
.
De la même manière vous pouvez ajouter les colonnes aux lignes. Créez un instance de
Zend_Text_Table_Column
et ensuite paramétrer les options de colonnes
soit dans le constructeur ou plus tard par les méthodes set*
. Le premier
paramètre est le contenu de la colonne qui peut avoir des lignes multiples, elles sont dans
le meilleur des cas séparées par le caractère \n
. Le second paramètre définit
l'alignement, qui est left
par défaut et peut être l'une des constantes de la
classe Zend_Text_Table_Column
:
-
ALIGN_LEFT
-
ALIGN_CENTER
-
ALIGN_RIGHT
Le troisième paramètre est le colspan ("fusion") de la colonne. Par
exemple, quand vous choisissez "2 comme colspan, la colonne va déborder sur deux colonnes de
la table. Le dernier paramètre définit l'encodage du contenu, qui peut être fourni, si le
contenu n'est ni de l'ASCII ni de l'UTF-8. Pour ajouter la colonne à la ligne, vous appelez
simplement appendColumn
dans votre objet Row
avec l'objet
Column
en tant que paramètre. Alternativement vous pouvez directement fournir
la chaîne à la méthode appendColumn
.
Pour finalement effectuer le rendu de la table, vous pouvez soit utiliser la méthode
render
de la table, ou utilisez la méthode magique __toString
en
faisant echo $table;
ou $tableString = (string) $table
.
Exemple 902. Utilisation de Zend_Text_Table
Cet exemple illustre un utilisation basique de
Zend_Text_Table
pour créer une table simple :
$table = new Zend_Text_Table(array('columnWidths' => array(10, 20))); // Either simple $table->appendRow(array('Zend', 'Framework')); // Or verbose $row = new Zend_Text_Table_Row(); $row->appendColumn(new Zend_Text_Table_Column('Zend')); $row->appendColumn(new Zend_Text_Table_Column('Framework')); $table->appendRow($row); echo $table;
Ceci entraînera l'affichage suivant :
┌──────────┬────────────────────┐ │Zend │Framework │ └──────────┴────────────────────┘