domingo, 27 de mayo de 2012

LAYOUT

Cuando se visualiza la información desde las vistas, básicamente estamos viendo una parte de la estructura de una página web, podríamos entonces en cada vista tener la estructura completa, pero al momento de hacer alguna modificación esto no sería funcional, razón por la cual se creo un contenedor que permitiera hacer cambios de forma agil y que permitiera mostrar las vistas Cuando se muestra una estructura completa. Los layout cumple esta misión dentro del ZF 






Activando el Layout desde NetBeans

Nos ubicamos en el proyecto click derecho y buscamos la opción Zend -> Run Command de esta forma Zend_Tool habilita la consola para correr comandos zf




En el campo Filter en la parte superior de la consola digitamos layout, seleccionamos la tarea a ejecutar en nuestro caso “enable layout” y presionamos el botón Run


Al terminar de forma correcta el comando seleccionado, en la estructura de nuestro proyecto deberá aparecer una nueva carpeta “layout” que contiene la subcarpeta scripts, donde se ubicaran los layout. Por defecto el comando creará layout.phtml y adicionará en application.ini los recursos para poder utilizar el layout

resources.layout.layout (indica el nombre por defecto del layout a utilizar)
resources.layout.layoutPath (ruta de ubicación del layout)


De aquí en adelante al momento de hacer render, el contenido de la vistas se insertará en el layout a través de $this->layout()->content() 





URL View Helper


Continuando con los View Helper que se encuentran incluidos en Zend/View/Helper  y que son utilizados comúnmente tenemos a:


URL View Helper


Este nos permite de una manera limpia organizar y generar los enlaces que se visualizan en las vistas, este Helper  retornará una cadena que será vinculada al atributo href de la etiqueta html  , aunque su real importancia se establece cuando cambiamos el router de la aplicación, evitando  pérdidas de tiempo en el cambio de la nueva URL .

Su  sintaxis es:


url(array $urlOptions = array(), $name= null, $reset= false, $encode = true)


Al ser un View Helper, recordemos que depende de la instancia VIEW, entonces para ejecutarlo simplemente utilizamos $this, asi que su forma sería $this->url()

  • $urlOptions(), es un array asociativo (key/value)en pares que será usado por el route por defecto
  • $name, nombre del route
  • $reset, si se resetea el route o no
  • $encode

Ejemplos



<a href="<?php echo $this->url(array('controller'=>'index','action'=>'login'));?>">LOGIN</a> 

<a href="<?php echo $this->url(array('controller'=>'noticia','action'=>'2012','variable1'=>'valor1','variable2'=>'valor2')); ?>">Noticias</a>

<a href="<?php echo $this->url(array('module' => 'default','controller' => 'sidebar','action' => 'addfoto', 'id' => '1507'));?>" >Adicionar Foto</a>

<a href="<?php echo $this->url(array('module' => 'default','controller' => 'index','action' => 'index'),null, true);?>" >Regresar</a>


Corregir la adición de parámetros 


Es importante tener claridad que al utilizar url view Helper en la generación de enlaces pasando parámetros, los siguientes enlaces deben utilizar el tercer parámetro del helper ( $reset) dándole el valor de TRUE, de esta forma evitamos que en los siguientes enlaces permanezcan los anteriores valores.









jueves, 24 de mayo de 2012

Certificación Zend Framework

Este procedimiento es un elemento que genera mayor reconocimiento dentro del campo profesional, permite mejorar el nivel salarial y el abanico de posibilidades laborales es amplio, además de algunos privilegios o “regalos” que ofrece la empresa Zend.Technologies.



La certificación se consigue mediante la presentación de un examen  ejecutado a través de la empresa pearson vue(http://www.vue.com/), empresa que brinda toda la seriedad y transparencia en estos procesos de certificación a nivel internacional,  esta empresa cuenta con centros de prueba avalados en muchas partes del mundo. Para conocer la ubicación de un centro de pruebas cercano, consulte el siguiente enlace


Para poder presentar de forma exitosa el examen de certificación se debe tener conocimientos avanzados en PHP, además de buena experiencia en programación orientada a objetos, aunque la preparación previa juega un papel importante a la hora de presentar el examen, una forma puede ser autodidacta o la otra que nos permite tener una mejor visión de lo que puede ser el examen es mediante el  entrenamiento (opción de pago)que ofrece  Zend, mediante  instructores  profesionales que  orientaran la adecuada utilización de los componentes a evaluar. 


La imagen muestra las alternativas que la empresa tiene para facilitar la certificación  sobre ZF

Características de la prueba

La prueba está diseñada para evaluar conceptos, código y la habilidad para aplicarlo a desarrollo de pequeños proyectos, al momento de presentar la prueba no podrá realizar consultas en guías o en internet, el examen consta de 75 preguntas y tendrá 90 minutos para resolverlo. Se tiene como base el framework en su versión 1.5 y en la siguiente URL puede descargarlo (http://framework.zend.com/download/archives)

Dentro de las modalidades del examen están:
  • ·         Selección múltiple con una respuesta verdadera
  • ·         Selección múltiple con varias respuestas correctas
  • ·         De complementación

Información útil del framework en la versión 1.5
Descripción de la versión 1.5




Simulación de prueba
En la actualidad se encuentra en Internet varios  sistemas de pruebas o simuladores  que permitirán medir nuestro conocimiento, estas opciones son de pago, aunque tienen un demo funcional gratuito





Recursos disponibles para la preparación

Video introductorio de Zend sobre la certificación(login) http://www.zend.com/en/webinar/Certification/webinar-rec-certification-dev-EN-20081112.flv
Guia de referencia del Programador - http://framework.zend.com/manual/en/
Recursos

Espero que esta información facilite el proceso de certificación y entremos  a conformar la lista de privilegiados a nivel mundial.


martes, 15 de mayo de 2012

View Helpers

Así como los controllers tienen action helpers, los script de vistas poseen View Helpers , estas son clases que extienden de Zend_View_Helper_Abstract y se utilizan para encapsular funciones complejas y/o repetitivas en las vistas ahorrando muchas líneas de código, ZF tiene por defecto un compendio de View Helpers (Zend/View/Helper) altamente configurables que permitirán realizar tareas mucho más fácil y de manera limpia. Estos View Helpers se encuentran instanciados desde la clase Zend_View comportándose como si fueran métodos de ella misma.

Listado de View Helpers por defecto:


Placeholder Helper


Se utilizan para persistir contenido entre script de vista, los Placeholders son: placeholder, Doctype, HeadLink, HeadMeta, HeadScript, HeadStyle, HeadTitle y InlineScript.


Una forma común de inicializar estos Placeholder es mediante un método _init dentro del Bootstrap así:


El siguiente _initPlaceholder es sólo a manera de ejemplo…

protected function _initPlaceholder() 

{
$this->bootstrap('view'); 
$view = $this->getResource('view');
$view->doctype('XHTML1_STRICT');
$view->headMeta()->appendHttpEquiv('Content-Type', 'text/html; charset=UTF-8');
$view->headMeta()->appendHttpEquiv('expires','Wed, 26 Feb 1997 08:21:57 GMT')
->appendHttpEquiv('pragma', 'no-cache')
->appendHttpEquiv('Cache-Control', 'no-cache');
$view->headMeta()->appendName('keywords', 'framework, PHP, productivity');
$view->headScript()->appendFile('/js/prototype.js','text/javascript',array('conditional' => 'lt IE 7'));
$view->headTitle('Nombre Página')
->setSeparator(' :: ');
$view->headStyle()->appendStyle('p { color: #AAA; }');
$view->headLink()->appendStylesheet('/styles/basic.css')
->headLink(array('rel' => 'favicon',
'href' => '/img/favicon.ico'),
'PREPEND')->prependStylesheet('/styles/moz.css','screen',true,
array('id' => 'my_stylesheet'));

}

Los placeholder soportan métodos que permiten adicionar y configurar los etiquetas, de esta forma la ubicación de las etiquetas dentro de la estructura HTML podrá variar según nuestras necesidades. Este caso se puede presentar al hacer link a un archivo general.css del template y sólo desde un controller especifico necesitar adicionar a contacto.css, evitando hacer enlaces innecesarios desde el comienzo de la aplicación.

action()

Este View Helper permite ejecutar dentro de la vista un action de un controlador diferente, su sintaxis es action($action, $controller, $module = null, array $params = array()), se considera una mala practica por que entre otras cosas el rendimiento de la aplicación disminuiría, no cumple el patrón MVC, ejecuta funciones Predispatch y Postdispatch innecesarias

// index.phtml de IndexController

echo $this->action('index', 'login');
ejecutará de LoginController el indexAction


BaseUrl Helper

Este View Helper implementado desde la versión 1.9.7 recupera la base URL del Zend Controller Front y su estado por defecto es autodetect, puede ser inicializado desde application.ini adicionando la siguiente línea

resources.frontController.baseUrl = "/appdir"
resources.frontController.baseUrl =

Si lo dejamos sin valor o simplemente no lo relacionamos en application.ini el valor por defecto será la ruta total de la aplicación /nombreProyecto/public

En la vista lo llamaríamos


baseUrl(); ?>

 o 
<img src="<?php echo $this->baseUrl('/img/foto.jpg')?>" />


Si necesitamos incluirlo desde el Bootstrap.php para tener el path correcto y utilizarlo en los archivos CSS o JS desde el View Helper HeadLink y HeadScript se debe inicializar primero Zend_Controller_Request_Http

protected function _initRequest()
{
  $this->bootstrap('FrontController');
  $front = $this->getResource('FrontController');
  $request = new Zend_Controller_Request_Http();
  $front->setRequest($request);
}

protected function _initViewPlaceholders() 
{
  $this->bootstrap('View');
  $view = $this->getResource('View');
  $view->headLink()->appendStylesheet($view->baseUrl("css/stylesheetGeneral.css"));
 $view->headScript()->appendFile($view->baseUrl("css/scriptGeneral.js"));
}


placeholder()

El método genérico placeholder() nos permite agregar contenido y hacer render dentro del layout, haciendo que nuestra aplicación tenga alternativas más dinámicas para mostrar contenido.

1. ejemplo

Utilizando una barra lateral en la estructura del layout podemos generar un menú dinámico así
En el Bootstrap



protected function _initSidebar()
 {
        $this->bootstrap('View');
        $view = $this->getResource('View');
        $view->placeholder('sidebar')
                   ->setPrefix("
    \n    
  • ")
                       ->setSeparator("
  • \n")
                       ->setIndent(4)
                       ->setPostfix("
\n");
     }


En la vista:
$this->placeholder('sidebar')->append('

Menu Lateral:

');
$this->placeholder('sidebar')->append('Zend ' ) ;
$this->placeholder('sidebar')->append('Linux ' ) ;
$this->placeholder('sidebar')->append('PHP ' ) ;
$this->placeholder('sidebar')->append('Actionscript3 ' ) ;
$this->placeholder('sidebar')->append('Mysql ' ) ;



En la medida que un controlador especifico necesite adicionar una nueva opción al menú simplemente se adiciona en la vista

$this->placeholder('sidebar')->append('nuevo enlace ' ) ;
O
$this->placeholder('sidebar')->prepend('nuevo enlace ' ) ;

2. Ejemplo
El placeholder generico puede invocar a otros placeholder, en este caso podemos imprimir el titulo de la pagina dentro de las etiquetas …
placeholder('Zend_View_Helper_HeadTitle');?>

partial()
al igual que render() este helper permite ejecutar algún script de vista con la particularidad que solo reconocerá sus propias variables. Esto puede ser útil en algunas circunstancias de la aplicación donde se necesita mayor control sobre el entorno de la aplicación.
Partial() se debe ubicar  dentro del layout ejemplo:
Bootstrap
protected function _initMenu()
   {
       $this->bootstrap('View');
       $view = $this->getResource('View');
       $this->view->menu =
                array(
                    array('key' => "index", 'value' => 'Inicio'),
                    array('key' => "servicios", 'value' => 'Servicios'),
                    array('key' => "noticias", 'value' => 'Noticias'),
                    array('key' => "eventos", 'value' => 'Eventos'),
                );
   }
En el layout


Layouts/scripts/partial.phtml
   

    <h1>Menu</h1>
<ul>
<?php foreach($this->data as $item) : ?>
    <li class="item">
      <a href="index/<?php echo $item['key']?>">
        <?php echo $item['value']; ?></a>
        </li>
<?php endforeach; ?>
</ul>