TigerZF
🌐Español

69.2. Zend_Text_Table

Zend_Text_Table es un componente para crear tablas basadas en texto al vuelo con distintos decoradores. Esto puede ser útil si desea enviar datos estructurados en correos electrónicos de texto, que suelen usar fuentes monoespaciadas, o mostrar información en forma de tabla en una aplicación de CLI. Zend_Text_Table también soporta columnas multilínea, colspan y alineación.

[Note] Codificación

Zend_Text_Table espera que sus cadenas estén codificadas en UTF-8 de forma predeterminada. Si no es el caso, puede suministrar la codificación de caracteres como parámetro al constructor() o al método setContent() de Zend_Text_Table_Column. Alternativamente, si tiene una codificación diferente en todo el proceso, puede definir el conjunto de caracteres de entrada estándar con Zend_Text_Table::setInputCharset($charset). En caso de que necesite otro conjunto de caracteres de salida para la tabla, puede establecer esto con Zend_Text_Table::setOutputCharset($charset).

Un objeto Zend_Text_Table consta de filas, que contienen columnas, representadas por Zend_Text_Table_Row y Zend_Text_Table_Column. Al crear una tabla, puede suministrar un array con opciones para la tabla. Estas son:

  • columnWidths (requerido): Un array que define todas las columnas con sus anchos en caracteres.

  • decorator: El decorador que se usará para los bordes de la tabla. El valor predeterminado es unicode, pero también puede especificar ascii o dar una instancia de un objeto decorador personalizado.

  • padding: El relleno izquierdo y derecho dentro de las columnas en caracteres. El relleno predeterminado es cero.

  • AutoSeparate: La forma en que las filas se separan con líneas horizontales. El valor predeterminado es una separación entre todas las filas. Esto se define como una máscara de bits que contiene una o más de las siguientes constantes de Zend_Text_Table:

    • Zend_Text_Table::AUTO_SEPARATE_NONE

    • Zend_Text_Table::AUTO_SEPARATE_HEADER

    • Zend_Text_Table::AUTO_SEPARATE_FOOTER

    • Zend_Text_Table::AUTO_SEPARATE_ALL

    Donde la cabecera es siempre la primera fila, y el pie es siempre la última fila.

Las filas simplemente se agregan a la tabla creando una nueva instancia de Zend_Text_Table_Row, y añadiéndola a la tabla mediante el método appendRow(). Las filas en sí no tienen opciones. También puede pasar directamente un array al método appendRow(), que entonces se convertirá automáticamente en un objeto fila, conteniendo varios objetos columna.

De la misma forma puede agregar columnas a las filas. Cree una nueva instancia de Zend_Text_Table_Column y luego establezca las opciones de la columna en el constructor o más adelante con los métodos set*(). El primer parámetro es el contenido de la columna, que puede tener varias líneas, que en el mejor de los casos se separan simplemente con el carácter '\n'. El segundo parámetro define la alineación, que es 'left' de forma predeterminada y puede ser una de las constantes de clase de Zend_Text_Table_Column:

  • ALIGN_LEFT

  • ALIGN_CENTER

  • ALIGN_RIGHT

El tercer parámetro es el colspan de la columna. Por ejemplo, si elige "2" como colspan, la columna se extenderá sobre dos columnas de la tabla. El último parámetro define la codificación del contenido, que debe suministrarse si el contenido no es ni ASCII ni UTF-8. Para agregar la columna a la fila, simplemente llame a appendColumn() en su objeto fila con el objeto columna como parámetro. Alternativamente puede dar directamente una cadena al método appendColumn().

Para finalmente renderizar la tabla, puede usar el método render() de la tabla, o usar el método mágico __toString() haciendo echo $table; o $tableString = (string) $table.

Ejemplo 69.2. Uso de Zend_Text_Table

Este ejemplo ilustra el uso básico de Zend_Text_Table para crear una tabla 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;

Esto dará como resultado la siguiente salida:

┌──────────┬────────────────────┐
│Zend      │Framework           │
└──────────┴────────────────────┘