TigerZF
🌐Español

Capítulo 78. Zend_View

Tabla de contenidos

78.1. Introducción
78.1.1. Script del controlador
78.1.2. Script de la vista
78.1.3. Opciones
78.1.4. Etiquetas cortas con scripts de vista
78.1.5. Accesores de utilidad
78.2. Scripts del controlador
78.2.1. Asignación de variables
78.2.2. Renderización de un script de vista
78.2.3. Rutas de scripts de vista
78.3. Scripts de vista
78.3.1. Escapado de la salida
78.3.2. Uso de sistemas de plantillas alternativos
78.3.2.1. Sistemas de plantillas que usan scripts de vista
78.3.2.2. Sistemas de plantillas que usan Zend_View_Interface
78.4. Ayudantes de vista
78.4.1. Ayudantes iniciales
78.4.1.1. Ayudante de vista Action
78.4.1.2. Ayudante BaseUrl
78.4.1.3. Ayudante Currency
78.4.1.4. Ayudante Cycle
78.4.1.5. Ayudante Partial
78.4.1.6. Ayudante Placeholder
78.4.1.6.1. Implementaciones concretas de Placeholder
78.4.1.7. Ayudante Doctype
78.4.1.8. Ayudante de vista Gravatar
78.4.1.8.1. Opciones
78.4.1.9. Ayudante HeadLink
78.4.1.10. Ayudante HeadMeta
78.4.1.11. Ayudante HeadScript
78.4.1.12. Ayudante HeadStyle
78.4.1.13. Ayudante HeadTitle
78.4.1.14. Ayudantes de objetos HTML
78.4.1.15. Ayudante InlineScript
78.4.1.16. Ayudante RenderToPlaceholder
78.4.1.17. Ayudante JSON
78.4.1.18. Ayudantes de navegación
78.4.1.18.1. Traducción de etiquetas y títulos
78.4.1.18.2. Integración con ACL
78.4.1.18.3. Configuración de navegación usada en los ejemplos
78.4.1.18.4. Ayudante Breadcrumbs
78.4.1.18.5. Ayudante Links
78.4.1.18.6. Ayudante Menu
78.4.1.18.7. Ayudante Sitemap
78.4.1.18.8. Ayudante Navigation
78.4.1.19. Ayudante Translate
78.4.1.20. Ayudante de vista UserAgent
78.4.1.20.1. Resumen
78.4.1.20.2. Inicio rápido
78.4.1.20.3. Métodos disponibles
78.4.2. Rutas de ayudantes
78.4.3. Cómo escribir ayudantes personalizados
78.4.4. Registro de ayudantes concretos
78.5. Zend_View_Abstract

78.1. Introducción

Zend_View es una clase para trabajar con la parte "vista" del patrón modelo-vista-controlador. Es decir, existe para ayudar a mantener el script de vista separado de los scripts del modelo y del controlador. Proporciona un sistema de ayudantes, filtros de salida y escapado de variables.

Zend_View es agnóstico respecto al sistema de plantillas; puede usar PHP como lenguaje de plantillas, o crear instancias de otros sistemas de plantillas y manipularlas dentro de su script de vista.

Básicamente, el uso de Zend_View se produce en dos pasos principales: 1. Su script de controlador crea una instancia de Zend_View y asigna variables a esa instancia. 2. El controlador indica a Zend_View que renderice una vista determinada, entregando así el control al script de vista, el cual genera la salida de la vista.

78.1.1. Script del controlador

Como ejemplo sencillo, supongamos que su controlador tiene una lista de datos de libros que desea que sea renderizada por una vista. El script del controlador podría verse algo así:

// use a model to get the data for book authors and titles.
$data = array(
    array(
        'author' => 'Hernando de Soto',
        'title' => 'The Mystery of Capitalism'
    ),
    array(
        'author' => 'Henry Hazlitt',
        'title' => 'Economics in One Lesson'
    ),
    array(
        'author' => 'Milton Friedman',
        'title' => 'Free to Choose'
    )
);

// now assign the book data to a Zend_View instance
Zend_Loader::loadClass('Zend_View');
$view = new Zend_View();
$view->books = $data;

// and render a view script called "booklist.php"
echo $view->render('booklist.php');

78.1.2. Script de la vista

Ahora necesitamos el script de vista asociado, "booklist.php". Este es un script PHP como cualquier otro, con una excepción: se ejecuta dentro del ámbito de la instancia de Zend_View, lo cual significa que las referencias a $this apuntan a las propiedades y métodos de la instancia de Zend_View. (Las variables asignadas a la instancia por el controlador son propiedades públicas de la instancia de Zend_View). Así, un script de vista muy básico podría verse así:

 if ($this->books): ?>

    <!-- A table of some books. -->
    <table>
        <tr>
            <th>Author</th>
            <th>Title</th>
        </tr>

        <?php foreach ($this->books as $key => $val): ?>
        <tr>
            <td><?php echo $this->escape($val['author']) ?></td>
            <td><?php echo $this->escape($val['title']) ?></td>
        </tr>
        <?php endforeach; ?>

    </table>

<?php else: ?>

    <p>There are no books to display.</p>

<?php endif;?>

Observe cómo usamos el método "escape()" para aplicar el escapado de salida a las variables.

78.1.3. Opciones

Zend_View tiene varias opciones que se pueden establecer para configurar el comportamiento de sus scripts de vista.

  • basePath: indica una ruta base a partir de la cual establecer la ruta de scripts, ayudantes y filtros. Asume una estructura de directorios de:

    base/path/
        helpers/
        filters/
        scripts/
    

    Esto puede establecerse mediante setBasePath(), addBasePath(), o la opción basePath del constructor.

  • encoding: indica la codificación de caracteres a usar con htmlentities(), htmlspecialchars(), y otras operaciones. Por defecto es UTF-8. Se puede establecer mediante setEncoding() o la opción encoding del constructor.

  • escape: indica un callback a usar por escape(). Se puede establecer mediante setEscape() o la opción escape del constructor.

  • filter: indica un filtro a usar después de renderizar un script de vista. Se puede establecer mediante setFilter(), addFilter(), o la opción filter del constructor.

  • strictVars: obliga a Zend_View a emitir avisos y advertencias cuando se accede a variables de vista no inicializadas. Esto se puede establecer llamando a strictVars(true) o pasando la opción strictVars al constructor.

78.1.4. Etiquetas cortas con scripts de vista

En nuestros ejemplos, hacemos uso de las etiquetas largas de PHP: <?php. También favorecemos el uso de la sintaxis alternativa para estructuras de control. Estos son atajos convenientes para usar al escribir scripts de vista, ya que hacen que las construcciones sean más concisas, mantienen las sentencias en líneas individuales, y eliminan la necesidad de buscar llaves dentro del HTML.

En versiones anteriores, a menudo recomendábamos usar etiquetas cortas (<? y <?=), ya que hacen que los scripts de vista sean ligeramente menos verbosos. Sin embargo, el valor predeterminado de la directiva php.ini short_open_tag normalmente está desactivado en producción o en hosts compartidos, lo que hace que su uso no sea demasiado portable. Si usa plantillas XML en scripts de vista, las etiquetas cortas harán que las plantillas fallen la validación. Finalmente, si usa etiquetas cortas cuando short_open_tag está desactivado, los scripts de vista causarán errores o simplemente mostrarán el código PHP de vuelta al visitante.

Si, a pesar de estas advertencias, desea usar etiquetas cortas pero están deshabilitadas, tiene dos opciones:

  • Active las etiquetas cortas en su archivo .htaccess:

    php_value "short_open_tag" "on"
    

    Esto solo será posible si tiene permitido crear y utilizar archivos .htaccess. Esta directiva también puede añadirse a su archivo httpd.conf.

  • Habilite un envoltorio de flujo (stream wrapper) opcional para convertir etiquetas cortas a etiquetas largas al vuelo:

    $view->setUseStreamWrapper(true);
    

    Esto registra Zend_View_Stream como un envoltorio de flujo para scripts de vista, y garantizará que su código siga funcionando como si las etiquetas cortas estuvieran habilitadas.

[Warning] El envoltorio de flujo de vista degrada el rendimiento

El uso del envoltorio de flujo degradará el rendimiento de su aplicación, aunque no se dispone de puntos de referencia reales para cuantificar el grado de degradación. Recomendamos que habilite las etiquetas cortas, convierta sus scripts para usar etiquetas completas, o disponga de una buena estrategia de caché de contenido parcial y/o de página completa.

78.1.5. Accesores de utilidad

Normalmente, solo necesitará llamar a assign(), render(), o a alguno de los métodos para establecer/añadir rutas de filtros, ayudantes y scripts. Sin embargo, si desea extender Zend_View usted mismo, o necesita acceso a parte de sus elementos internos, existen varios accesores:

  • getVars() devolverá todas las variables asignadas.

  • clearVars() eliminará todas las variables asignadas; útil cuando desea reutilizar un objeto de vista, pero desea controlar qué variables están disponibles.

  • getScriptPath($script) obtendrá la ruta resuelta a un script de vista determinado.

  • getScriptPaths() obtendrá todas las rutas de scripts registradas.

  • getHelperPath($helper) obtendrá la ruta resuelta a la clase de ayudante indicada.

  • getHelperPaths() obtendrá todas las rutas de ayudantes registradas.

  • getFilterPath($filter) obtendrá la ruta resuelta a la clase de filtro indicada.

  • getFilterPaths() obtendrá todas las rutas de filtros registradas.