Note

The online documentation is produced by a web publishing technology created by us to read the documents origins in OpenOffice Writer (ODT) and Microsoft Word (docx) formats and produces native web and PDF versions. In this way we maintain Louder project documentation update and in sync on each of its formats.
Select a Language:
Componente View
Introducción
El componente View se encarga de administrar la forma estándar en la que se genera la presentación al usuario final en su explorador.

La presentación estándar en una aplicación en Kumbia Enterprise se basa en varios patrones de diseño que permiten reducir la codificación y hacer más mantenible esta parte del desarrollo.

El primer patrón utilizado es Template View el cuál habla de utilizar tags personalizados ó marcas embebidas en el contenido dinámico proporcionando flexibilidad y poder para crear interfaces web.

El segundo patrón es el Two State View el cual permite definir múltiples interfaces de acuerdo al dispositivo ó cliente desde el cuál se este se accediendo a la aplicación. Este tipo de implementación favorece principalmente aplicaciones que accedan desde un browser ó un dispositivo móvil como un telefono celular, en donde es necesario personalizar detalles para cada tipo de interfaz.

La arquitectura MVC presenta el concepto de vista la cuál actúa como puente entre el usuario final y la lógica de dominio en los controladores.
Jerarquía de vistas en la presentación
Una jerarquía de archivos con vistas imbebibles soportadas por el componente View permite reducir la codificación creando puntos de presentación comunes para la aplicación, controladores ó mediante la implementación de plantillas.

Cada parte de la presentación se crea en un archivo ubicado en una estructura convenida de directorios en el directorio de la aplicación llamado views/.

El componente View permite definir la presentación en varios niveles, cada uno contiene al siguiente:
Tabla: Niveles de presentación en el componente View
Archivo ó Ubicación
Descripción
index.phtmlContiene la vista principal y encabezado XHTML de todas las vistas.
directorio-con-nombre-del-controladorPermite establecer archivos con vistas para cada acción del controlador.
directorio-con-nombre-del-controlador/archivo-con-nombre-de-la-acción.phtmlPermite crear una presentación para la acción activa en el controlador.
layouts/archivo-con-nombre-del-controlador.phtmlPermite establecer una vista común para todas las acciones del controlador.
layouts/nombre-template.phtmlPermite establecer una plantilla común para varios controladores.
directorio-con-nombre-del-controlador/_nombre-vista-parcial.phtmlPermite establecer vistas parciales que se pueden incluir en varias vistas de acciones del controlador activo.
partials/_nombre-vista-parcial.phtmlPermite establecer vistas parciales que se pueden incluir en cualquier vista ó template de la aplicación.


El componente View no requiere que exista cada componente de presentación que se mencionó anteriormente, el único requerido es la vista principal.
Vista Principal
En el directorio views/ se puede encontrar el archivo index.phtml que implementa el encabezado XHTML estándar para cualquier vista de la aplicación:

Ejemplo: Vista principal views/index.phtml por defecto
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <meta http-equiv='Content-type' content='text/html; charset=UTF-8' />
  <title>Application Title</title>
  <?php Tag::stylesheetLink('style', true) ?>
  <?php echo Core::stylesheetLinkTags() ?>
  <?php echo Core::javascriptBase() ?>
 </head>
 <body>
    <?php echo View::getContent(); ?>
 </body>
</html>

Por defecto se utiliza un encabezado XHTML 1.0 Strict el cuál propende por aplicaciones basadas en estándares y que funcionan mejor en los navegadores más avanzados del mercado.

Los helpers Core::stylesheetLinkTags() y Core::javascriptBase() incluyen archivos JavaScript como frameworks y utilidades además de los CSS incrustados en otras vistas activas.

El XHTML generado por la vista anterior es:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <meta http-equiv='Content-type' content='text/html; charset=UTF-8' />
  <title>Application Title</title>
    <link rel='stylesheet' type='text/css' href='/app-path/css.php?c=style&p=/app-path' />
  <script type='text/javascript' src='/app-path/javascript/scriptaculous/protoculous.js'></script>
  <script type='text/javascript' src='/hfos/javascript/core/base.js'></script>
  <script type='text/javascript' src='/app-path/javascript/core/validations.js'></script>
  <script type='text/javascript' src='/app-path/javascript/core/main.php?app= &module=&path=%2Finstance-name%2F&controller=login&action=index&id='></script>
 </head>
 <body>
 </body>
</html>

Notese el llamado a View::getContent(), este imprime todo el contenido generado en el layout ó vistas activas en la aplicación en el lugar que se indique.
Requerimientos de la Vista Principal
Es recomendable no eliminar los llamados a los helpers estándar en la vista principal ya que esto puede impactar el comportamiento del framework. En general los requerimientos del contenido de la vista principal son los siguientes:

  • Su nombre debe ser index.phtml y mantenerse en la raíz de views/
  • Incluir los archivos JavaScript que se utilicen en cada petición a la aplicación
  • Incluir los archivos CSS que se utilicen en cada petición a la aplicación
  • Incluir codigo XHTML que sea común a cada controlador y acción de la aplicación
Requerimientos Vistas a nivel de Controlador
Generalmente cada acción solicitada presenta ó solicita información diferente al usuario de tal forma que el flujo de la aplicación sea consistente tanto para el desarrollador como para los usuarios. Los requerimientos de las vistas a nivel de controlador son:

  • Es necesario que exista un directorio con el nombre del controlador donde se encuentre la acción
  • El nombre del directorio debe ir en minúsculas y sin el sufijo "Controller".
  • El archivo de la vista debe tener la extensión .phtml y el nombre debe ser el nombre de la acción sin el sufijo "Action".
Requerimientos de Layouts de Controladores
Los layouts de controladores son vistas que contienen fragmentos comunes de presentación que son validos para cualquier acción del controlador. Los requerimientos de los layouts de controladores son:
  • Un archivo con el nombre del controlador en el directorio views/layouts debe existir.
  • El nombre del archivo debe ir en minúsculas y sin el sufijo "Controller".
  • El archivo debe tener extensión .phtml.
Requerimientos de Vistas Parciales en Controladores
En ocasiones fragmentos de presentación como menús, encabezados, pie de paginas, etc son comunes a varias acciones de un controlador pero no a todas, en estos casos se puede implementar vistas parciales. Los requerimientos de las vistas parciales en controladores son:

  • Es necesario que exista un directorio con el nombre del controlador donde se encuentre la vista parcial.
  • El nombre del directorio debe ir en minúsculas y sin el sufijo "Controller".
  • El archivo de la vista parcial debe tener la extensión .phtml y el prefijo "_" (underscore).
Requerimientos de Vistas Parciales Generales
Al igual que las vistas parciales de controladores las generales realizan la misma tarea con la diferencia que estan disponibles para cualquier layout, template ó vista de la aplicación.

Los requerimientos de las vistas parciales generales son:

  • La vista parcial debe estar ubicada en el directorio views/partials.
  • El archivo de la vista parcial debe tener la extensión .phtml y el prefijo "_" (underscore).
Requerimientos de Plantillas ó Templates
Las plantillas permiten establecer múltiples fragmentos de presentación y aplicarsen antes ó después del layout del controlador. Los requerimientos de las plantallas son:
  • Deben entas ubicados en el directorio views/layouts/.
  • La extensión del archivo debe ser ".phtml"
Inserción automática y manual de vistas
El componente View utiliza convenciones para insertar automáticamente la presentación correspondiente a un controlador ó una acción, otros componentes de presentación requiere que se establezca programacionalmente su relación con la presentación diseñada.

Si se realiza una petición a la aplicación mediante la URL:

http://172.16.5.2/company/categories/create

En donde company es el nombre de la instancia del framework, categories es el nombre del controlador y create la acción requerida.

Gracias a la presentación por convención el componente View tratará de crear la presentación a partir de los archivos:

  • default/views/categories/create.phtml
  • default/views/layouts/categories.phtml
  • default/views/index.phtml

Si alguno de los archivos mencionados no existe se trata de ubicar el siguiente y así sucesivamente.

En este segundo caso la URL solicitada es:

http://172.16.5.2/company/press/categories/

En donde company es el nombre de la instancia del framework, press es el nombre de la aplicación y categories es el nombre del controlador. El nombre de la acción no se ha establecido por lo que se asume que es index.

Los archivos de presentación son los siguientes:

  • press/views/categories/index.phtml
  • press/views/layouts/categories.phtml
  • default/views/index.phtml
Implementar los tipos de vistas
En el siguiente ejemplo se ilustra los tipos de vistas y su integración en la presentación de una aplicación. El controlador customers se inicializa con 3 templates:

Ejemplo: Aplicar multiples templates a un mismo controlador
<?php

class CustomersController extends ApplicationController {

     public function initialize(){
          $this->setTemplateBefore("template1");
          $this->setTemplateAfter(array("template2", "template3"));
     }

     public function createAction(){

     }

     public function updateAction(){

     }

}

Los métodos del controlador setTemplate y setTemplateAfter permiten insertar plantillas antes y después del layout del controlador. Los templates como se mencionó deben estar ubicados en views/layouts.

El archivo de plantilla views/layouts/template1.phtml tiene:
<div style='background:yellow;padding:10px'>
     <h2>Template 1</h2>
     <?php View::getContent(); ?>
</div>

El llamado a View::getContent() indica donde se debe incrustar el contenido de otras vistas contenidas por el fragmento de presentación.

El archivo de plantilla views/layouts/template2.phtml tiene:
<div style='background:#faca22;padding:10px'>
     <h2>Template 2</h2>
     <?php View::getContent(); ?>
</div>

El archivo de plantilla views/layouts/template3.phtml tiene:
<div style='background:#ccccf2;padding:10px'>
     <h2>Template 3</h2>
     <?php View::getContent(); ?>
</div>

El archivo de layout del controlador views/layout/customers.phtml tiene:
<?php View::renderPartial('header') ?>

<div style='background:orange;padding:10px'>
     <h2>Layout de Customers</h2>
     <?php View::getContent(); ?>
</div>

<?php View::renderPartial('footer') ?>

El método View::renderPartial inserta una vista parcial que esta ubicada en el mismo directorio de controlador views/customers/. Notése que el prefijo "_" de las vistas parciales es omitido a propósito al establecer el nombre de esta.

La vista parcial views/customers/_header.phtml tiene:
<h4>Este es el encabezado</h4>

La vista parcial views/customers/_footer.phtml tiene:
<h4>Este es el pie de página</h4>

La vista de la acción create en el archivo views/customers/_create.phtml tiene:
<div style='background:#eac2ff;padding:10px'>
     <h3>Acción Create</h3>
     <?php View::getContent(); ?>
</div>

La vista de la acción update en el archivo views/customers/_update.phtml tiene:
<div style='background:#cceaff;padding:10px'>
     <h3>Acción Update</h3>
     <?php View::getContent(); ?>
</div>

El resultado obtenido en el explorador al invocar la acción create es:



El resultado obtenido al invocar la acción update en customers es:



Como se mostró todos los tipos de fragmentos de presentación proporcionan una poderosa forma de compartir el código y construir interfaces flexibles siguiendo un principio básico de mantenibilidad de una aplicación.
Transferir valores del controlador a la vista
Existen 2 formas de transferir datos del controlador a la presentación:
Transferir mediante atributos públicos
Si al procesar una acción en un controlador se requiere presentar información al cliente final esta debe ser transferida a las vistas asociadas para su posterior tratamiento. Por defecto los atributos públicos de los controladores son transferidos automáticamente a la presentación en forma de variables locales.

El siguiente controlador tiene 2 atributos públicos que se visualizan al invocar la acción info:

Ejemplo: Utilizar atributos públicos para transferir valores a la presentación
<?php

class PressController extends ApplicationController {

     public $code; 
     public $name;

     public function indexAction(){

     }

     public function infoAction(){
          $this->code = 100;
          $this->name = "Este es un nombre";
     }

}

Todas las vistas asociadas a la petición tienen acceso a las variables locales $code y $name que pueden ser usadas a conveniencia:

El archivo views/layouts/press.phtml tiene:
<h1>El código es <?php echo $code ?></h1>

El archivo views/press/info.phtml tiene:
<p>El contenido de "name" es <?php echo $name ?></p>

Lo que en conjunto produce en el explorador:


Transferir mediante setParamToView
La segunda forma de transferir valores desde las acciones del controlador es mediante el uso del método setParamToView. Este método es especialmente útil cuando se requiera transferir grandes cantidades de datos a las vistas ó datos poco relevantes que no ameriten la definición de un atributo público en el controlador.

También si se usan controladores con el estado persistente activo es posible que también se quiera restringir la definición de atributos públicos a los estrictamente necesarios.

Ejemplo: Transferir datos a la presentación mediante setParamToView
<?php

class PressController extends ApplicationController {

     public function indexAction(){

     }

     public function showAllAction(){
          $this->setParamToView("editions", $this->Editions->find("status='A'"));
     }

}

En la vista se crea una variable local llamada $editions con el valor asignado en la acción.
Controlar Niveles de Renderización
En determinadas situaciones es posible que se requiera controlar el nivel de profundidad de la visualización. El componente View permite establecer el nivel de renderización mediante el método setRenderLevel(int $level).

Esté método puede ser invocado desde el controlador ó desde una capa de visualización superior para evitar que otras sean presentadas.
Tabla: Niveles de renderización en View
Valor
ConstanteDescripción
0LEVEL_NO_RENDERIndica que se debe evitar generar cualquier tipo de presentación.
1LEVEL_ACTION_VIEWGenera la presentación hasta la vista asociada a la acción.
2LEVEL_BEFORE_TEMPLATEGenera la presentación hasta las plantillas antes de el layout del controlador.
3LEVEL_LAYOUTGenera la presentación hasta el layout del controlador.
4LEVEL_AFTER_TEMPLATEGenera la presentación hasta las plantillas después de el layout del controlador.
5LEVEL_MAIN_VIEWGenera la presentación hasta la vista principal. Archivo views/index.phtml

Utilizar modelos en la presentación
Los modelos de la aplicación siempre están disponibles en la presentación. Si la opción de autoinicialización de modelos está activa se creará una referencia de todos los modelos de la aplicación como variables globales con el nombre del modelo, si no está activa solo los modelos utilizados en la petición actual serán llevados a la presentación.

Dependiendo del caso se puede usar en forma natural dentro de cualquier tipo de vista los modelos de esta forma:
Ejemplo: Utilizar modelos en la presentación cuando son auto-inicializados
//Listar las ordenes de compra
foreach($Orders->find() as $order){
     echo $order->getRecordedDate();
}

Si los modelos no son auto-inicializados se puede obtener una instancia de ellos usando el método de EntityManager llamado getEntityInstance:
Ejemplo: Usar modelos en la presentación cuando no son auto-inicializados
$orders = EntityManager::getEntityInstance('Orders');
foreach($Orders->find() as $order){
     echo $order->getRecordedDate();
}
Plugins de View
Los Plugins de presentación permiten extender la funcionalidad del componente View. La arquitectura de plugins de View permite observar, extender y manipular el comportamiento de las vistas de la aplicación según las condiciones lo exijan.

Los plugins permiten interceptar eventos en las vistas de tal forma que estos sean observables y además ejecutárse uno tras otro de manera centralizada sin requerir refactorización ó reintegración en la aplicación.
Crear un Plugin de View
Los plugins de View son clases que implementan eventos que son invocados a medida que avanza la ejecución del proceso de presentación en cualquier petición. Estas clases deben cumplir con los siguientes requerimientos:

  • Deben estar ubicados en el directorio de plugins usualmente apps/app-name/plugins
  • El nombre del archivo que implementa la clase debe ser el nombre del plugin
  • El nombre de la clase debe tener la extensión Plugin
  • Los plugins de controlador deben heredar de la clase ViewPlugin ó ser subclase de ella

Las clases pueden implementar métodos públicos que referencian los eventos ocurridos en los controladores, la lista de ellos es la siguiente:
Tabla: Eventos que se pueden implementar en plugins de View
Nombre Evento
Descripción
beforeRenderOcurre antes de empezar el proceso de visualización de las vistas asociadas a la petición. El evento recibe la instancia de ControllerResponse actual
afterRenderOcurre después de terminar el proceso de visualización de las vistas asociadas a la presentación.

API del Componente View
Jerarquia de renderización
static function string getContent(boolean $returnContent=false)
El llamado a este método le indica al componente View donde debe insertar el siguiente nivel de la jerarquía de renderización. Si se pasa true en $returnContent devuelve el contenido del buffer de salida hasta el momento.

static function void setRenderLevel(int $level)
Establece hasta que nivel de renderización se debe generar la presentación. Consulte la tabla de niveles de presentación para obtener más información sobre el uso de este método.
Administrar presentación
static function void handleViewRender(Controller $controller)
Este método actua como el administrador de presentación predeterminado recibiendo como parámetro el último controlador enrutado. No debería ser invocado directamente por el desarrollador ya que es llamado por el contenedor de aplicaciones.

static function void handleViewExceptions(Exception $e, Controller $controller)
Este método actua como el administrador de presentación predeterminado cuando no se captura una excepción recibiendo como parámetro el último controlador enrutado. No debería ser invocado directamente por el desarrollador ya que es llamado por el contenedor de aplicaciones cuando esta situación ocurre.
Visualizar vistas programacionalmente
static function void renderPartial(string $_partialView, string $_partialValue='')
Permite visualizar una vista parcial dentro de otra vista. El segundo parámetro permite transferir un valor desde la vista donde se invoca este método al interior de la vista parcial.
La vista parcial es ubicada en el directorio de vistas del controlador actual.

El método se utiliza de la siguiente forma:
<?php View::renderPartial("nombreVista", "Un Valor") ?>

En el archivo _nombreVista.phtml el valor transferido puede ser usado así:
<?php echo $nombreVista; ?>

Si se requiere visualizar una vista parcial en otro controlador diferente al actual debe usarse:
<?php echo View::renderPartial("nombreVista", "controller: nombreControlador"); ?>

static function void renderView(string $_view)
Permite visualizar una vista de acción dentro de otra vista. La vista de acción es ubicada en el directorio de vistas del controlador actual.

El método se utiliza de la siguiente forma:
<?php View::renderView("nombreVista") ?>

Si se requiere visualizar una vista parcial en otro controlador diferente al actual debe usarse:
<?php echo View::renderView("nombreVista", "controller: nombreControlador"); ?>

static function array getValidationMessages()
Obtiene desde una vista los mensajes de validación producidos por el componente Validation ó otro componente de usuario.

static function void setContent(string $content)
Establece programacionalmente el contenido del buffer de salida actual de la presentación.

static function void setViewParam(string $index, string $value)
Establece una variable de la vista que será creada en un ambito local como $index con el valor $value.

static function array getViewParams()
Obtiene un array con las variables pasadas a la vista usando View::setViewParam.

static function void setProxyProvider(string $proxy, array $options)
Establece un proxy-provider que administre las peticiones de presentación usando componentes de terceros.

static function void proxyHandler()
Método predeterminado para la administración de presentación cuando se usan componentes de terceros

static function boolean existsActionView(string $name, string $controllerName='')
Permite consultar si una vista de acción existe en el controlador actual ó en el definido en $controllerName.
Crear un componente de Presentación personalizado
El desarrollador puede crear componentes de aplicación que reemplacen al componente de presentación View por defecto en Kumbia Enterprise. Como los demás componentes de usuario estos deben estar ubicados en el directorio library de la aplicación ó donde la variable de configuración libraryDir indique.

Los controladores deben establecer el administrador de presentación requerido sobrescribiendo el método getViewHandler de esta forma:
Ejemplo: Cambiar el componente que administra la generación de la presentación
<?php

class CustomersController extends ApplicationController {

     public function getViewHandler(){
          return array("MyView", "handleViewRender");
     }

}

De esta forma cuando se requiera mostrar la presentación para el controlador se pasará el control a el componente MyView invocando el método estático handleViewRender. Este método recibe el objeto del controlador instanciado (ó el último que se utilizó después de realizar enrutamientos) en la petición:
Ejemplo: Definir un componente de usuario que administer la presentación
<?php

class MyView {
     
     static public function handleViewRender($controller){
          //Realizar la presentación          
     }
     
}
Se debe tener en cuenta toda la funcionalidad mencionada en el componente View no estará disponible si se reescribe el componente de presentación. Los servicios de los componentes Core (CoreConfig, CoreLocale, etc), Router y Dispatcher pueden resultar útiles en este punto.
Crear un componente de presentación de Excepciones no capturadas
Al igual que la presentación normal, la de excepciones también puede ser reescrita siguiendo un procedimiento parecido al del anterior. En este caso el método getViewExceptionHandler debe ser reescrito en el controlador.
EJemplo: Definir un componente de usuario que adminisre la presentación de excepciones no capturadas
<?php

class CustomersController extends ApplicationController {

     public function getViewExceptionHandler(){
          return array("MyView", "handleViewExceptionRender");
     }

}
El método recibe la excepción y el último controlador activo antes de que se generará. El componente MyView sería:
Ejemplo: Definir un componente de usuario que administre la presentación de excepciones no capturadas
<?php

class MyView {
     
     static public function handleViewRender($controller){
          //Realizar la presentación normal
     }
     
     static public function handleViewExceptions($e, $controller){
          //Excepciones
     }
     
}

Consulte la referencia de CoreException y Exception para obtener más información sobre las excepciones generadas que no han sido capturadas.
Integrar otros Engines de presentación
Si el desarrollador requiere, es posible integrar componentes de generación de presentación de terceros (otros frameworks ó proyectos). Con esto se aprovecha la funcionalidad de estos componentes sin perder el comportamiento y potencia del componente de Kumbia Enterprise View.
Comportamiento de la integración
La integración con los componentes de terceros tiene el siguiente comportamiento:

  • Las variables públicas del controlador, datos pasados mediante setViewParam y modelos utilizados en la petición (ó todos si la autoinicialización de entidades está activa) son creados en el formato adecuado del componente utilizado. Por ejemplo en Zend_View se debe usar $this para acceder a estos valores.
  • Los nombres de la extensiones de archivos de vistas pueden configurarse como se requiera y no se debe usar ".phtml" como es normal.
  • La jerarquia de inclusión "vista principal/templates/layouts/vista/partials" se mantiene sin cambio alguno con la única diferencia que el resultado de cada vista es producido por el componente seleccionado.
  • Todo el framework aplicable puede utilizarse en las vistas creadas con otros engines sin restricciones.
  • Los plugins de View funcionan normalmente
Componentes Soportados
Actualmente hay soporte para los componentes de presentación Zend_View de Zend Framework y Smarty.
Proxy a Zend_View
El componente de Zend Framework llamado Zend_View ofrece la posibilidad de integrar helpers, filtros y scripts a las vistas generadas con este. Para indicar que se usará este componente se debe cambiar el administrador de presentación en el controlador así:
Ejemplo: Establecer un proxy al componente de presentación Zend_View
<?php

class MyController extends ApplicationController  {

     public function getViewHandler(){
          View::setProxyProvider('Zend', array(
               'zendPath' => 'Library',
               'class' => 'Zend_View',
               'extension' => 'phtml',
               'encoding' => 'UTF-8',
               'strictVars' => false
          ));
          return array('View', 'proxyHandler');
     }
}

El método View::setProxyProvider establece que se usará el Proxy a componentes terceros 'Zend'. El segundo parámetro permite indicar otras opciones opcionales de la integración.

Tabla: Parámetros del ProxyProvider a Zend_View
OpciónDescripción
zendPathLa ruta a donde está ubicado el Zend Framework. Si hace parte del include_path de PHP entonces no es necesario establecerla.
classLa clase utilizada para administrar las vistas. Por defecto es Zend_View pero puede establecerse cualquier otra que implemente la interfaz Zend_View_Interface.
extensionLa extensión que tendrán las vistas. Por defecto es .phtml.
encodingEsta opción aplica al constructor de Zend_View.
strictVarsEsta opción aplica al contructor de Zend_View.


Consulte la documentación de este framework en http://framework.zend.com/ .
Proxy a Smarty
Este ProxyProvider permite tratar vistas usando el Smarty Engine. La forma en que se debe indicar que se usará este adaptador es la siguiente:

Ejemplo: Generar un proxy de presentación a Smarty
<?php

class MyController extends ApplicationController  {

     public function getViewHandler(){
          View::setProxyProvider('Smarty', array(
               'smartyPath' => 'Library',
               'extension' => 'tpl'
          ));
          return array('View', 'proxyHandler');
     }
}

Opciones que recibe el ProxyProvider:

Tabla: Parámetros del ProxyProvider a Smarty
OpciónDescripción
smartyPathLa ruta a donde está ubicado Smarty. Si hace parte del include_path de PHP entonces no es necesario establecerla.
extensionLa extensión que tendrán las vistas. Por defecto es .tpl