SlideShare uma empresa Scribd logo
1 de 13
Baixar para ler offline
zenphp :: un framework de aplicaciones en PHP para seres humanos
                                                                             Tutorial




    zenphp :: un framework
    de aplicaciones en PHP
    para seres humanos
    Creación de una aplicación web
    jbelon [arroba] correo [punto] ugr [punto] es
    Blog.zenphp.es




                Enero/Febrero ‘08

1
Tutorial/Proyecto de creación de una aplicación con zenphp.es


                 Paso 1: Introducción y descarga


                 En la página web del proyecto encontrarás la última versión para descargar del framework,
                 descárgala ya que puedes utilizarla para coordinar con la línea general del tutorial, que se hizo con la
                 versión 0.1.1 [Enero-Febrero del 2008]

                 Puedes utilizar el editor Zend Studio o Eclipse para llevar un mejor control de la creación de tu
                 aplicación y de la depuración de la misma con información de variables, clases, objetos y otros
                 bloques de código que se implementan en este documento.

                 La página web completa y el código fuente lo puedes encontrar bajo licencia LGPL en el servidor de la
                 forja de rediris, aquí.

                 Cuando crees plantillas html, css, xml, también puedes editarlas dentro del editor.

                 Puedes cambiar fácilmente las plantillas para ajustarlas a otra aplicación al igual que el código de la
                 aplicación puedes reutilizarlo para cualquier otro proyecto. Puedes utilizar la galería de módulos de
                 zenphp para insertar funcionalidades a tu aplicación: manejadores de formularios, manipuladores de
                 imágenes, ajax, etc. Para ello consulta los documentos de diseño de zenphp en la forja de rediris del
                 proyecto: introducción, organigramas, diseño de clases, manuales, tutoriales, etc.

                 Para cambiar la plantilla general de tu aplicación, ve al directorio de /media/plantillas/es (o del
                 idioma que sea) y modifica la base_web.html. Las imágenes irán en /media/img donde podrás añadir
                 nuevos elementos para tu aplicación.

                 Una vez descargado zenphp, se descomprime en una carpeta dentro del servidor, si es el directorio
                 de apache /var/www/usuario/html/

                 Paso a explicar entonces la jerarquía de directorios tomando este directorio:

                      /zenphp/zen.php :: donde configuraremos un par de constantes para el sitio web
                      /zenphp/ :: contiene el núcleo de zenphp, no deberíamos de tocar el contenido de éste
                       directorio
                      /aplicaciones/ : contiene las clases de usuario,configuraciones de base de datos y:
                            modelos/ : donde guardaremos los modelos de datos de la aplicación
                            controladores/ : sirve para guardar ficheros que serán cargados para asociarlos a
                               modelos de datos como controladores de los mismos
                            vistas/ : aquí se guardan las vistas de nuestra aplicación
                            ayudantes/ : algunas clases que sirven como ayuda de nuestra aplicación y se asocian
blog.zenphp.es




                               a la clase principal
                      /media :: es el directorio donde guardaremos el contenido multimedia de la página web
                            plantillas/ :: aquí guardaremos todas las plantillas necesarias
                                     es/ :: es ,en el idioma por defecto, de donde se toman las plantillas


    2
   idiomas/ :: directorio para almacenar subdirectorios de idiomas:
                                     es/ :: ejemplo de idioma,español por defecto, ficheros con las definiciones de
                                          constantes de idiomas, ejemplo: indice.php  <?php
                                          define('TXT_TITULO',"Mi titulo"); ?>
                                     en/ idem …para el inglés, etc.
                               img/ :: aquí guardaremos las imágenes de la plantilla HTML
                               swf/ :: para almacenar los objetos flash
                               scripts/ :: contiene los ficheros javascript que utilizamos
                               etc/ :: resto de archivos: pdf, vídeos,lo que sea



                 Paso 2: Configuración y depuración
                 Configuración Opcional

                        Para mantenerlo todo muy ordenado, lo primero que tenemos que hacer después de copiar
                        los ficheros es tener a mano las plantillas,es decir, copiar los ficheros HTML,XML ,etc en el
                        directorio de idioma por defecto: /media/plantillas/es/ ; copiar las imágenes en
                        /media/img/, los objetos flash en /media/swf , los javascripts en /media/scripts/,etc.
                        Si queremos tener zenphp en otro directorio por motivos de seguridad o cualquier otro
                        directorio, podemos cambiarlo en el mismo fichero, con la constante ZF_CARPETA_ZEN,lo
                        mismo ocurre con los demás: plantillas,idiomas,etc.
                 Si estamos usando Zend Studio para crear la aplicación, iremos a ProyectoNuevo Proyecto y
                 aparecerá el “Asistente de Proyectos”, pondremos el nombre, aza_local, pulsamos en “Siguiente” y
                 ahora en “Añadir Directorio”, buscaremos ahora nuestro directorio del servidor y pulsaremos
                 “siguiente” hasta finalizar comprobando nuestra configuración del servidor de depuraciçon; en el
                 caso de que necesitemos usar un directorio de FTP tendríamos que haber añadido el servidor antes
                 de pulsar en “Nuevo Proyecto”.

                 Ahora estamos en condiciones de empezar con la configuración de la aplicación.
                 Para empezar abrimos el archivo /zen.php y configuramos las tres variables que
                 necesitamos: ZF_SITIO_WEB, ZF_NOMBRE_SITIO, ZF_CORREO_ADMIN con nuestros valores
                 del sistema.

                     Opcional: Con Zend Studio: para disponernos a comprobar el funcionamiento de zenphp,
                 desde el mismo fichero zen.php vamos a la línea que dice “zen___carga_clase('zen');” y
                 pulsamos F9, se habrá añadido un breakpoint o punto de ruptura, donde el depurador se
                 dentendrá en tiempo de ejecución,vamos a ello... Ahora pulsamos F5 para ejecutar el código
                 e iremos avanzando paso a paso comprobando qué es lo que va haciendo zenphp.

                 Si todo ha ido bien obtendremos una pantalla como la de la siguiente página:
blog.zenphp.es




    3
En la parte inferior podemos tener acceso a las variables declaradas, comprobar el valor de una e
                 incluso dar una expresión en tiempo de ejecución, crear un “watch” o traza, para saber qué tiene una
                 variable en todo momento sin tener que buscarla en la lista asi como ver la pila de llamadas y qué
                 ficheros de scripts están llamando a qué scripts, también podemos conocer la posición de los puntos
                 de ruptura y qué tiene el búfer de salida.

                 Atendiendo a la parte izquierda del editor veremos una pestaña donde se colocan todos los ficheros
                 del proyecto y justo debajo, si seleccionamos el botón del “Proyecto” tenemos acceso a las clases
                 declaradas en él de forma que sabremos qué métodos y propiedades tiene cualquiera de nuestros
                 objetos.
blog.zenphp.es




                 La línea roja define el breakpoint y la azul donde se encuentra ejecutando el intérprete en ese
                 momento. A la derecha del editor se coloca la salida de cada script. Como éste no tenía ninguna ,no
                 se muestra mensaje alguno.



    4
Paso 3: Creación de la aplicación
                 ¿Qué es lo que hace zenphp por medio del generador de proyectos y aplicaciones que
                 utiliza la factoría de clases? (¡si no quieres saberlo salta a la página 7!)
                 1. Notificación: El subdominio aza.grandazen.com ha sido creado.
                 2. Crear directorio del proyecto y copiar zenphp al directorio.
                 3. Configurar zenphp/zen.php -> ZF_SITIO_WEB, ZF_NOMBRE_SITIO y ZF_CORREO_ADMIN.
                 Opcionales: ZF_MODO_DEPURACION y ZF_MODO_GUARDAR_LOG.
                 4. Crear la carpeta aplicaciones y los ficheros de aplicaciones:
                 aplicaciones/aza.php,aplicaciones/aza_admin.php, aplicaciones/aza.config.php
                    con todo su contenido...
                    Se lee el fichero XML de configuración
                    La aplicación por defecto usa el nombre del proyecto. Hereda de la clase
                 zen_aplicacion_cliente que hereda de la clase zen
                    La aplicación de administración del CMS usa el nombre del proyecto + "_" + nombre del
                 directorio de administración. Hereda de la clase zen_aplacion_admin que hereda de la clase
                 zen.
                    Las plantillas de aplicaciones están disponibles para ser modificadas.
                 5. Crear las plantillas HTML, el diseño ,etc. Una vez terminado organizarlo todo para meter
                 las imágenes y demás contenido en /media/img/, /media/css, /media/js, /media/swf, etc.
                     Para ello: crear el directorio /media/idiomas/es ,/media/idiomas/en , etc y
                 /media/plantillas/es , /media/plantillas/en, etc. El primero para las constantes de idiomas en
                 ficheros .php y el segundo
                    para guardar los ficheros de plantillas en HTML con sus #etiquetas# a substituir en el
                 programa.
                    Realizar todas las tareas de las plantillas:
                     * generar una plantilla base_web.html en /media/plantillas/es (idioma por defecto)
                 donde colocar las etiquetas de #titulo#,#scripts#,#contenido#,#pie#,etc.         * recortar
                 todas las plantillas y mantener la estructura organizada: articulos/elementos.html,
                 articulos/mostrar.html, productos/elementos.html, etc.
                 7. Dar permisos de escritura al directorio media/img
                 8. Crear los modelos, vistas y controladores en las clases aplicaciones/aplicaciones/aza
                 9. Cuando zenphp intenta cargar la libreria comprimida zen_protoculous.js, si no existe en
                 ningún directorio devuelve error. En todo caso intenta cargar...( Prototype y Scriptaculous
                 combinados) comprueba si existe en /media/js ó /media/scripts ,si no existe intentará
                 copiarla allí y si no puede,usará zenphp/contenido/js/zen_protoculous.js
                 10.Crear /index.php con la instancia de la clase
                 <?php
blog.zenphp.es




                 require_once('zenphp/zen.php');
                 zen___carga_aplicacion('aza');
                 $ap = new MiProyecto();
                 $ap->enrutador->delegar();


    5
?>
                 11. Crear /admin/ , /admin/index.php con el contenido como el del paso 10 pero para la
                 interfaz de administración del CMS:
                 <?php
                 require_once('../zenphp/zen.php');
                 zen___carga_aplicacion('MiProyecto_admin');
                 $ap_admin = new MiProyecto_admin();
                 $ap_admin -> enrutador-> delegar();
                 ?>
                 12. Cargar el editor Zend Studio y crear el proyecto, añadir el directorio del proyecto.
                 13. Crear la base de datos
                 14. Crear el fichero aplicaciones/aza.config.php
                   con el contenido:
                 <?php
                 define('aza_usuario','usuario');
                 define('aza_servidor','localhost');
                 define('aza_contrasena','password');
                 define('aza_bd','nombre_bd');
                 ?>

                 El Generador: (muy importante)! un proyecto necesita que exista el directorio
                 /media/plantillas/es donde "es" es el directorio de idioma por defecto
                 - Crear un proyecto::
                   -> Crear una aplicacion:
                        --> crear un modelo
                        --> crear una vista (html,xml)
                        --> crear asociación de caché
                        --> crear un controlador por defecto
                   -> Crear configuración: Fichero XML
                   <proyecto nombre="" sitio="">
                    <aplicacion><!--es la aplicación por defecto-->
                    <modelo></modelo>
                    <campos> <campo>id</campo><campo>nombre</campo></campos>
                    </aplicacion>
                    <aplicacion nombre="admin"><!--si no se define,no se genera el admin por defecto,dicho
                 nombre se usa para generar las clases con el nombre del proyecto+"admin"-->
                    </aplicacion>
blog.zenphp.es




                   </proyecto>

                     Opcional: Para crear una aplicación con el generador de aplicaciones es mucho más
                 fácil,de forma que genere además nuestras plantillas HTML de administración.


    6
Continuamos aquí y nosotros mismos hacemos de generador empezando por crear la clase
                 principal en /directorio_web/aplicaciones/aza.php, ésta clase hace de central de contenido,
                 es por asi decirlo, el centro neurálgico de toda aplicación. Es por eso que en la parte cliente
                 hereda de zen_aplicacion y en la parte de administración hereda de zen_aplicacion_admin,
                 en ésta segunda, todas las clases terminan por _admin para facilitar su reconocimiento y
                 distinguirlas en el espacio de nombres del conjunto de aplicaciones en un mismo directorio.
                 El contenido de la clase aza es el siguiente:
                      Una clase zen_html en la variable $html , para mostrar el contenido con una plantilla,
                         que estará dentro de dicha clase HTML
                      Una clase zen_basedatos en la variable $bd que en nuestro caso será del tipo mysql y
                         estará configurada por el fichero /directorio_web/aplicaciones/aza.config.php
                      Una clase noticias que extiende de un modelo de datos y por lo tanto contiene un
                         visualizador. Término acuñado por el autor para montar en una misma clase, una
                         vista y un controlador que se asocian al modelo de datos para representar
                         información.
                      Una clase artículos que dispone de la misma filosofía que las noticias pero se añaden
                         otras opciones y campos a la tabla
                      Una clase galerias para mostrar una galería de imágenes en la web
                      Una clase enlaces para mostrar enlaces a otras webs ,administrables

                 El contenido de la clase aza_admin es el mismo que el de la clase aza pero las clases además
                 disponen en su interfaz del visualizador (recordar que es el controlador+vista en uno) los
                 formularios para altas/bajas/modificaciones de artículos,noticias,imágenes,etc.



                      Base de datos:
                 Para crear la base de datos usamos el comando
                         CREATE DATABASE aza
                 Sin olvidarnos de ejecutar también :
                        ALTER DATABASE `aza` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin
                 ya que necesitamos que la codificación sea en UTF8.
                 Esto nos recuerda que el fichero /directorio_web/.htaccess ha de contener:
                         AddDefaultCharset UTF-8
                 Al igual que los HTML de las plantillas tienen que tener una metaetiqueta:
                        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
                 Aclarados estos puntos continuemos con la creación de tablas de usuarios, noticias, artículos
                 Ver adjuntos: consultas.sql
blog.zenphp.es




    7
--
                 -- Estructura de tabla para la tabla `articulos`
                 --

                 CREATE TABLE `articulos` (
                   `ida` int(11) NOT NULL auto_increment,
                   `titulo` varchar(250) collate utf8_bin NOT NULL default '',
                   `HTML` text collate utf8_bin,
                   `fecha` date NOT NULL default '0000-00-00',
                   `imagen` varchar(250) collate utf8_bin default NULL,
                   `tipo` enum('local','municipal','casa','juventudes') collate utf8_bin NOT
                 NULL default 'local',
                   PRIMARY KEY (`ida`)
                 ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=13 ;

                 -- --------------------------------------------------------

                 --
                 -- Estructura de tabla para la tabla `enlaces`
                 --

                 CREATE TABLE `enlaces` (
                   `ide` int(11) NOT NULL auto_increment,
                   `titulo` varchar(250) collate utf8_bin NOT NULL default '',
                   `url` text collate utf8_bin NOT NULL,
                   PRIMARY KEY (`ide`)
                 ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=3 ;

                 -- --------------------------------------------------------

                 --
                 -- Estructura de tabla para la tabla `galerias`
                 --

                 CREATE TABLE `galerias` (
                   `idg` int(11) NOT NULL auto_increment,
                   `nombre` varchar(250) collate utf8_bin NOT NULL default '',
                   `listado` mediumtext collate utf8_bin,
                   PRIMARY KEY (`idg`)
                 ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=3 ;

                 -- --------------------------------------------------------

                 --
                 -- Estructura de tabla para la tabla `noticias`
                 --

                 CREATE TABLE `noticias` (
                   `idn` int(11) NOT NULL auto_increment,
                   `titulo` varchar(250) collate utf8_bin NOT NULL default '',
                   `HTML` text collate utf8_bin,
                   `fecha` date NOT NULL default '0000-00-00',
                   `imagen` varchar(250) collate utf8_bin default NULL,
                   `tipo` enum('noticia','opinion','evento') collate utf8_bin NOT NULL
                 default 'noticia',
                   PRIMARY KEY (`idn`)
blog.zenphp.es




                 ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=12 ;

                 -- --------------------------------------------------------

                 --


    8
-- Estructura de tabla para la tabla `usuarios`
                 --

                 CREATE TABLE `usuarios` (
                   `idu` int(11) NOT NULL auto_increment,
                   `nombre` varchar(75) collate utf8_bin default NULL,
                   `usuario` varchar(16) collate utf8_bin NOT NULL default '',
                   `password` varchar(32) collate utf8_bin NOT NULL default '',
                   `correo` varchar(150) collate utf8_bin default NULL,
                   `nivel` tinyint(2) NOT NULL default '1',
                   PRIMARY KEY (`idu`)
                 ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=3 ;


                 El esquema es posible que cambie con el tiempo, no incluyo el Diagrama de
                 Entidad/Relación porque no es necesario nada complejo, simplemente porque no hay una
                 jerarquía bien definida, sólo existe un administrador que añadirá artículos,esto no es un
                 wordpress con varios usuarios ni nada por que se le parezca…
                 Tras ejecutar el fichero de consultas.sql del paquete aza adjunto tenemos que añadir un
                 usuario administrador, para ello insertamos una nueva tupla desde la línea de comandos de
                 mysql o bien usando PhpMyAdmin,…le daremos idu = 0 y nivel=3 ( automático ), y
                 rellenaremos el resto de campos, el password se encripta con MD5.
                 Ya estamos en condiciones de empezar a diseñar las plantillas y las clases.
                 Empezamos con la plantilla, necesitamos colocar base_web.html en
                 /directorio_web/media/plantillas/es/base_web.html para que los mecanismos automáticos
                 la tomen.
                 El contenido de una plantilla base_web es lo que se repite en todas las páginas que va a
                 tener la aplicación, esto es, la cabecera, el pie, etc. Y colocaremos unas marcas entre
                 símbolos de almohadilla “#” para distinguir los elementos que son intercambiables desde
                 PHP, ¡ojo!, no es un sistema de plantillas que use PHP dentro de HTML pues las vistas se
                 construyen desde el mismo controlador asociado al modelo, en cristiano, lo que queremos
                 reemplazar lo haremos a mano mediante una clase zen_plantilla.
                 En nuestro caso tenemos una plantilla básica con las etiquetas para #titulo#,
                 #scripts#,#contenido#,etc. Para la página principal cargamos indice.html y lo que hacemos es
                 reemplazar la etiqueta #contenido# con éste contenido en base_web.html.
                 Para probar que funciona todo correctamente necesitamos una base de datos funcionando,
                 se configura tan fácil como crear el fichero siguiente:

                 aplicaciones/aza.config.php:
                   <?php
                   define('aza_servidor',"localhost");
                   define('aza_usuario','usuario de base de datos');
                   define('aza_contrasena',"contraseña");
blog.zenphp.es




                   define('aza_bd',"nombre de base de datos");
                   define('aza_tipo','mysql');
                   ?>




    9
Una vez escrito base_web.html con su etiqueta del tipo
                        <div id="content">
                                #contenido#
                        </div>
                 Ya es hora de ir creando la aplicación principal del cliente:

                 aplicaciones/aza.php

                  <?php
                  /**
                    * Aplicacion cliente de prueba...
                    *
                    */
                  class aza extends zen_aplicacion {
                    /**
                      * Visualizador HTML para la clase
                      *
                      * @var html_aza
                      */
                    var $html;
                    /**
                      * Clase para mostrar noticias
                      *
                      * @var noticias
                      */
                    var $noticias;
                    /**
                      * Constructor
                      * @param str $inicializadores clases separadas por comas, a inicializar
                      * @return prueba
                      */
                    function aza($inicializadores=""){
                      parent::zen_aplicacion($inicializadores);
                      $this->html =& new html_aza($this);
                      require_once('modelos/clase_noticias.php');
                      $this->noticias =& new noticias($this);
                    }
                  }



                 Esta parte contiene la clase de la aplicación, se puede ver que además se hace una
                 instanciación a una clase zen_html pero que se llama html_aza, es lo que viene a
                 continuación.

                 Se puede separar en dos ficheros y hacer un require("clase_html_aza.php");

                 O bien como se muestra, colocar la clase a continuación ya que no dispone de muchas líneas
blog.zenphp.es




                 de código y se ve claramente quién es quién…(porque es importante conocerse a si mismo ;)




10
aplicaciones/aza.php (continuación)
                 /**
                  * Para mostrar el HTML por pantalla con una plantilla
                  *
                  */
                 class html_aza extends zen_html {
                  /**
                    * Clase plantilla para leer y mostrar HTML
                    *
                    * @var zen_plantilla
                    */
                  var $plantilla;
                  /**
                    * Clase Aplicacion ppal
                    *
                    * @var aza
                    */
                  var $padre;
                  /**
                    * Constructor
                    *
                    * @param aza $_padre
                    * @return html_prueba
                    */
                  function html_aza(&$_padre){
                    parent::zen_html($_padre);
                    $c =& $this->padre->contenido;
                    $c['scripts'] = "";
                  }

                  function index(){
                      $c =& $this->padre->contenido;
                      $c['titulo']    = "Inicio";
                      $c['contenido'] = $this->plantilla->devolver_contenido("indice.html");
                      //$c['contenido'] = $this->padre->noticias->html->listado_indice();

                       parent::index();
                  }
                 }
                 ?>


                 Para que funcione este código necesitamos antes insertar las clases de las noticias, para ello
                 las colocamos asi
blog.zenphp.es




11
aplicaciones/modelos/clase_noticias.php

                  <?php
                  class noticias extends zen_modelo_datos {
                      /**
                        * Aplicacion
                        *
                        * @var aza
                        */
                      var $padre;
                      /**
                        * Visualizador : vista + controlador en uno
                        *
                        * @var html_noticias
                        */
                      var $html;
                      /**
                        * Constructor de noticias
                        *
                        * @param aza $padre
                        * @return noticias
                        */
                      function noticias(&$padre){

                  parent::zen_modelo_datos($padre,"idn,titulo,HTML,fecha,imagen,tipo","noticias",
                  null,"");
                          require_once(ZF_DIR_APLICACIONES.'vistas/clase_html_noticias.php');
                          $this->html =& new html_noticias($this);
                      }

                  }
                  ?>


                 aplicaciones/vistas /clase_noticias_html.php
                  <?php
                  class html_noticias extends zen_html_modelo_datos {
                      /**
                        * Clase de noticias asociada
                        *
                        * @var noticias
                        */
                      var $padre;
                      /**
                        * Constructor del visualizador
                        *
                        * @param noticias $_padre
                        * @return html_noticias
                        */
                      function html_noticias(&$_padre){
                           parent::zen_html_modelo_datos($_padre);
                      }
blog.zenphp.es




                 Sigue…




12
aplicaciones/vistas /clase_noticias_html.php (continuación)
                      /**
                       * Devuelve el listado de noticias con la plantilla para el indice
                       *
                       * @return str
                       */
                      function listado_indice($tipo="noticia"){
                          $this->padre->condiciones_where = "where tipo='".$tipo."'";
                          $this->padre->campos = str_replace("HTML","SUBSTRING(HTML,1,100) as
                  intro",$this->padre->campos);
                          $this->padre->campos.= ",titulo as titulo_formateado";
                          $this->padre->filtros_postprocesamiento =
                  array("titulo_formateado"=>"zen_codifica_nombre_para_url");

                          $listado =
                  parent::listado('noticias/noticia_indice.html','noticias/indice.html','noticias
                  _indice');

                            if (count($this->padre->tuplas)==0) return "No hay noticias";
                            else return $listado;
                      }
                      /**
                        * Función que muestra el contenido por defecto de las noticias
                        *
                        */
                      function index(){
                           $this->padre->padre->html->index();
                      }
                      function leer($datos=null){
                           $not = $this->padre->obtener_primero("titulo","","where
                  idn=".intval($datos[0]));
                           echo $not['titulo'];
                      }
                  }
                  ?>


                 Ya podemos crear index.php con la instanciación de la aplicación y la llamada al enrutador
                 que nos delegará a la vista por defecto ,de la clase aza, con $aza->html->index().
                 index.php ::

                  <?php
                   require_once('zenphp/zen.php');
                   zen___carga_aplicacion('aza');
                   $aza = new aza();
                   $aza->enrutador->establecer_direccion_base("/");
                   $aza->enrutador->delegar();
                   $aza->html->mostrar($aza->contenido);
                   ?>


                 Ahora a probarlo, la dirección es http://aza.granadazen.com
                 El paquete con todo el código se está terminando. 
blog.zenphp.es




13

Mais conteúdo relacionado

Mais procurados

Curso PHP Academia Usero
Curso PHP Academia UseroCurso PHP Academia Usero
Curso PHP Academia UseroIES Kursaal
 
Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2Edgar Dueñas
 
Manual Completo Php 5
Manual Completo Php 5Manual Completo Php 5
Manual Completo Php 5Pablo Morales
 
Aprendiendo php my sql, javascript, css, html5 capitulo 2
Aprendiendo php my sql, javascript, css, html5 capitulo 2Aprendiendo php my sql, javascript, css, html5 capitulo 2
Aprendiendo php my sql, javascript, css, html5 capitulo 2luigiacarigua
 
Mi primer programa en Symfony2
Mi primer programa en Symfony2Mi primer programa en Symfony2
Mi primer programa en Symfony2César Hernández
 
Aprendiendo php mysql, javascript, css, html5 LIbro Traducido
Aprendiendo php mysql, javascript, css, html5 LIbro TraducidoAprendiendo php mysql, javascript, css, html5 LIbro Traducido
Aprendiendo php mysql, javascript, css, html5 LIbro Traducidoluigiacarigua
 
Introduccion A Php
Introduccion A PhpIntroduccion A Php
Introduccion A Phputs
 
Tutorial de cakePHP itst
Tutorial de cakePHP itstTutorial de cakePHP itst
Tutorial de cakePHP itstomicx
 
Curso TIC de PHP y MSQL
Curso TIC de PHP y MSQLCurso TIC de PHP y MSQL
Curso TIC de PHP y MSQLWilian
 
Las buenas prácticas oficiales para aplicaciones Symfony
Las buenas prácticas oficiales para aplicaciones SymfonyLas buenas prácticas oficiales para aplicaciones Symfony
Las buenas prácticas oficiales para aplicaciones Symfonysymfony_bcn
 

Mais procurados (17)

Curso PHP Academia Usero
Curso PHP Academia UseroCurso PHP Academia Usero
Curso PHP Academia Usero
 
Php
PhpPhp
Php
 
Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2
 
Manual Completo Php 5
Manual Completo Php 5Manual Completo Php 5
Manual Completo Php 5
 
(Desarrollo web).manual.php.5
(Desarrollo web).manual.php.5(Desarrollo web).manual.php.5
(Desarrollo web).manual.php.5
 
Aprendiendo php my sql, javascript, css, html5 capitulo 2
Aprendiendo php my sql, javascript, css, html5 capitulo 2Aprendiendo php my sql, javascript, css, html5 capitulo 2
Aprendiendo php my sql, javascript, css, html5 capitulo 2
 
Mi primer programa en Symfony2
Mi primer programa en Symfony2Mi primer programa en Symfony2
Mi primer programa en Symfony2
 
Manual+php+básico
Manual+php+básicoManual+php+básico
Manual+php+básico
 
Aprendiendo php mysql, javascript, css, html5 LIbro Traducido
Aprendiendo php mysql, javascript, css, html5 LIbro TraducidoAprendiendo php mysql, javascript, css, html5 LIbro Traducido
Aprendiendo php mysql, javascript, css, html5 LIbro Traducido
 
Introduccion A Php
Introduccion A PhpIntroduccion A Php
Introduccion A Php
 
Apuntes php
Apuntes phpApuntes php
Apuntes php
 
nn
nnnn
nn
 
Tutorial de cakePHP itst
Tutorial de cakePHP itstTutorial de cakePHP itst
Tutorial de cakePHP itst
 
Curso TIC de PHP y MSQL
Curso TIC de PHP y MSQLCurso TIC de PHP y MSQL
Curso TIC de PHP y MSQL
 
Guia reportes
Guia reportesGuia reportes
Guia reportes
 
Compilación de programas
Compilación de programasCompilación de programas
Compilación de programas
 
Las buenas prácticas oficiales para aplicaciones Symfony
Las buenas prácticas oficiales para aplicaciones SymfonyLas buenas prácticas oficiales para aplicaciones Symfony
Las buenas prácticas oficiales para aplicaciones Symfony
 

Destaque

Funcionesphpmysql
FuncionesphpmysqlFuncionesphpmysql
Funcionesphpmysqljgalvisr
 
Curso TIC de PHP y MSQL Parte 3
Curso TIC de PHP y MSQL Parte 3Curso TIC de PHP y MSQL Parte 3
Curso TIC de PHP y MSQL Parte 3Wilian
 
Curso TIC de PHP y MSQL Parte 1
Curso TIC de PHP y MSQL Parte 1Curso TIC de PHP y MSQL Parte 1
Curso TIC de PHP y MSQL Parte 1Wilian
 
Memoria Zenphp - Programador PHP
Memoria Zenphp - Programador PHPMemoria Zenphp - Programador PHP
Memoria Zenphp - Programador PHPJuan Belón Pérez
 
Iniciación PHP 5. Programación Web
Iniciación PHP 5. Programación WebIniciación PHP 5. Programación Web
Iniciación PHP 5. Programación WebRightster
 
PHP Avanzado: PHP, XML y Servicios Web
PHP Avanzado: PHP, XML y Servicios WebPHP Avanzado: PHP, XML y Servicios Web
PHP Avanzado: PHP, XML y Servicios WebRightster
 
Curso TIC de PHP y MSQL Parte 2
Curso TIC de PHP y MSQL Parte 2Curso TIC de PHP y MSQL Parte 2
Curso TIC de PHP y MSQL Parte 2Wilian
 
Php basico y avanzado
Php basico y avanzadoPhp basico y avanzado
Php basico y avanzadodrakatiadiaz
 
Iniciación PHP 5. Arquitectura cliente/servidor
Iniciación PHP 5. Arquitectura cliente/servidorIniciación PHP 5. Arquitectura cliente/servidor
Iniciación PHP 5. Arquitectura cliente/servidorRightster
 
Iniciación PHP 5. Ejemplos
Iniciación PHP 5. EjemplosIniciación PHP 5. Ejemplos
Iniciación PHP 5. EjemplosRightster
 
Prueba6.pdf
Prueba6.pdfPrueba6.pdf
Prueba6.pdfjcarrey
 
Introducción a PHP - Programador PHP - UGR
Introducción a PHP - Programador PHP - UGRIntroducción a PHP - Programador PHP - UGR
Introducción a PHP - Programador PHP - UGRJuan Belón Pérez
 
Curso php - capitulo 1 (introducción)
Curso php - capitulo 1 (introducción)Curso php - capitulo 1 (introducción)
Curso php - capitulo 1 (introducción)yanburbano
 
Iniciación PHP 5. PHP y MySQL
Iniciación PHP 5. PHP y MySQLIniciación PHP 5. PHP y MySQL
Iniciación PHP 5. PHP y MySQLRightster
 

Destaque (20)

Funcionesphpmysql
FuncionesphpmysqlFuncionesphpmysql
Funcionesphpmysql
 
Curso TIC de PHP y MSQL Parte 3
Curso TIC de PHP y MSQL Parte 3Curso TIC de PHP y MSQL Parte 3
Curso TIC de PHP y MSQL Parte 3
 
Zenphp - Programador PHP
Zenphp - Programador PHPZenphp - Programador PHP
Zenphp - Programador PHP
 
Curso TIC de PHP y MSQL Parte 1
Curso TIC de PHP y MSQL Parte 1Curso TIC de PHP y MSQL Parte 1
Curso TIC de PHP y MSQL Parte 1
 
Memoria Zenphp - Programador PHP
Memoria Zenphp - Programador PHPMemoria Zenphp - Programador PHP
Memoria Zenphp - Programador PHP
 
Curso php y_mysql
Curso php y_mysqlCurso php y_mysql
Curso php y_mysql
 
Iniciación PHP 5. Programación Web
Iniciación PHP 5. Programación WebIniciación PHP 5. Programación Web
Iniciación PHP 5. Programación Web
 
PHP Avanzado: PHP, XML y Servicios Web
PHP Avanzado: PHP, XML y Servicios WebPHP Avanzado: PHP, XML y Servicios Web
PHP Avanzado: PHP, XML y Servicios Web
 
¿Cómo elegir servidor web?
¿Cómo elegir servidor web?¿Cómo elegir servidor web?
¿Cómo elegir servidor web?
 
Curso TIC de PHP y MSQL Parte 2
Curso TIC de PHP y MSQL Parte 2Curso TIC de PHP y MSQL Parte 2
Curso TIC de PHP y MSQL Parte 2
 
Php basico y avanzado
Php basico y avanzadoPhp basico y avanzado
Php basico y avanzado
 
Iniciación PHP 5. Arquitectura cliente/servidor
Iniciación PHP 5. Arquitectura cliente/servidorIniciación PHP 5. Arquitectura cliente/servidor
Iniciación PHP 5. Arquitectura cliente/servidor
 
Iniciación PHP 5. Ejemplos
Iniciación PHP 5. EjemplosIniciación PHP 5. Ejemplos
Iniciación PHP 5. Ejemplos
 
Presentacion curso de php
Presentacion curso de phpPresentacion curso de php
Presentacion curso de php
 
PHP
PHPPHP
PHP
 
Prueba6.pdf
Prueba6.pdfPrueba6.pdf
Prueba6.pdf
 
Introducción a PHP - Programador PHP - UGR
Introducción a PHP - Programador PHP - UGRIntroducción a PHP - Programador PHP - UGR
Introducción a PHP - Programador PHP - UGR
 
Curso php - capitulo 1 (introducción)
Curso php - capitulo 1 (introducción)Curso php - capitulo 1 (introducción)
Curso php - capitulo 1 (introducción)
 
Iniciación PHP 5. PHP y MySQL
Iniciación PHP 5. PHP y MySQLIniciación PHP 5. PHP y MySQL
Iniciación PHP 5. PHP y MySQL
 
Curso Php
Curso PhpCurso Php
Curso Php
 

Semelhante a Tutorial A Z A - Programador PHP

Zend framework
Zend frameworkZend framework
Zend frameworkjasiel_14
 
Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...
Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...
Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...JaenFrankcezco
 
Clase 3 instalación y primeros pasos
Clase 3 instalación y primeros pasosClase 3 instalación y primeros pasos
Clase 3 instalación y primeros pasoshydras_cs
 
INFOSAN Delphi 753-914
INFOSAN Delphi  753-914INFOSAN Delphi  753-914
INFOSAN Delphi 753-914FRANCIACOCO
 
Desarrollo Aplicaciones Zend Framework
Desarrollo Aplicaciones Zend FrameworkDesarrollo Aplicaciones Zend Framework
Desarrollo Aplicaciones Zend Frameworkricsoc
 
04 taller-django
04 taller-django04 taller-django
04 taller-djangosamerscd
 
crear_portable.pdf
crear_portable.pdfcrear_portable.pdf
crear_portable.pdfUrco Bon
 
Práctica: distribución de midlets mediante OTA con J2ME - parte I
Práctica: distribución de midlets mediante OTA con J2ME - parte IPráctica: distribución de midlets mediante OTA con J2ME - parte I
Práctica: distribución de midlets mediante OTA con J2ME - parte IJorge Iván Meza Martínez
 
Joomla!Day 2011 España - Taller desarrollo de plantillas Joomla! - Sergio Igl...
Joomla!Day 2011 España - Taller desarrollo de plantillas Joomla! - Sergio Igl...Joomla!Day 2011 España - Taller desarrollo de plantillas Joomla! - Sergio Igl...
Joomla!Day 2011 España - Taller desarrollo de plantillas Joomla! - Sergio Igl...SergioIglesiasNET
 
Manual easyphp
Manual easyphpManual easyphp
Manual easyphpzonajava
 
Tutorial php basico
Tutorial php basicoTutorial php basico
Tutorial php basicoYo ♥ Tacna
 
Zend framework
Zend frameworkZend framework
Zend frameworkluislolo
 

Semelhante a Tutorial A Z A - Programador PHP (20)

CRUD básico con Symfony
CRUD básico con SymfonyCRUD básico con Symfony
CRUD básico con Symfony
 
Practica09
Practica09Practica09
Practica09
 
Zend framework
Zend frameworkZend framework
Zend framework
 
Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...
Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...
Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...
 
Clase 3 instalación y primeros pasos
Clase 3 instalación y primeros pasosClase 3 instalación y primeros pasos
Clase 3 instalación y primeros pasos
 
INFOSAN Delphi 753-914
INFOSAN Delphi  753-914INFOSAN Delphi  753-914
INFOSAN Delphi 753-914
 
Desarrollo Aplicaciones Zend Framework
Desarrollo Aplicaciones Zend FrameworkDesarrollo Aplicaciones Zend Framework
Desarrollo Aplicaciones Zend Framework
 
Laravel
LaravelLaravel
Laravel
 
04 taller-django
04 taller-django04 taller-django
04 taller-django
 
Manual completo-php-5
Manual completo-php-5Manual completo-php-5
Manual completo-php-5
 
Laravel vc
Laravel vcLaravel vc
Laravel vc
 
CMS - Joomla
CMS - JoomlaCMS - Joomla
CMS - Joomla
 
PHP IUTE
PHP IUTEPHP IUTE
PHP IUTE
 
crear_portable.pdf
crear_portable.pdfcrear_portable.pdf
crear_portable.pdf
 
Práctica: distribución de midlets mediante OTA con J2ME - parte I
Práctica: distribución de midlets mediante OTA con J2ME - parte IPráctica: distribución de midlets mediante OTA con J2ME - parte I
Práctica: distribución de midlets mediante OTA con J2ME - parte I
 
Joomla!Day 2011 España - Taller desarrollo de plantillas Joomla! - Sergio Igl...
Joomla!Day 2011 España - Taller desarrollo de plantillas Joomla! - Sergio Igl...Joomla!Day 2011 España - Taller desarrollo de plantillas Joomla! - Sergio Igl...
Joomla!Day 2011 España - Taller desarrollo de plantillas Joomla! - Sergio Igl...
 
Tutorial de eclipse terminado yarker
Tutorial de eclipse terminado yarkerTutorial de eclipse terminado yarker
Tutorial de eclipse terminado yarker
 
Manual easyphp
Manual easyphpManual easyphp
Manual easyphp
 
Tutorial php basico
Tutorial php basicoTutorial php basico
Tutorial php basico
 
Zend framework
Zend frameworkZend framework
Zend framework
 

Mais de Juan Belón Pérez

Aplicaciones y juegos para móbiles 2011: iOS, Android, Bada, Palm
Aplicaciones y juegos para móbiles 2011: iOS, Android, Bada, PalmAplicaciones y juegos para móbiles 2011: iOS, Android, Bada, Palm
Aplicaciones y juegos para móbiles 2011: iOS, Android, Bada, PalmJuan Belón Pérez
 
Yahoo! pipes + Wordpress plugin - RSS POWER to your blog
Yahoo! pipes + Wordpress plugin - RSS POWER to your blogYahoo! pipes + Wordpress plugin - RSS POWER to your blog
Yahoo! pipes + Wordpress plugin - RSS POWER to your blogJuan Belón Pérez
 
Proyecto Campos Electricos - Programador Servicios 3d
Proyecto Campos Electricos - Programador Servicios 3dProyecto Campos Electricos - Programador Servicios 3d
Proyecto Campos Electricos - Programador Servicios 3dJuan Belón Pérez
 
Aecem - Libro Blanco - Para Programador Php.org
Aecem - Libro Blanco  - Para Programador Php.orgAecem - Libro Blanco  - Para Programador Php.org
Aecem - Libro Blanco - Para Programador Php.orgJuan Belón Pérez
 
Composicion de servicios web, un ejemplo
Composicion de servicios web, un ejemploComposicion de servicios web, un ejemplo
Composicion de servicios web, un ejemploJuan Belón Pérez
 
Zenphp - Presentación de Septiembre en la Etsiit - Programador PHP
Zenphp - Presentación de Septiembre en la Etsiit - Programador PHPZenphp - Presentación de Septiembre en la Etsiit - Programador PHP
Zenphp - Presentación de Septiembre en la Etsiit - Programador PHPJuan Belón Pérez
 
Ensayo Cientifico - Programador PHP
Ensayo Cientifico - Programador PHPEnsayo Cientifico - Programador PHP
Ensayo Cientifico - Programador PHPJuan Belón Pérez
 
Zen Scaffolding - Programador PHP
Zen Scaffolding - Programador PHPZen Scaffolding - Programador PHP
Zen Scaffolding - Programador PHPJuan Belón Pérez
 
Rendimiento Java Script - Programador PHP
Rendimiento  Java Script - Programador PHPRendimiento  Java Script - Programador PHP
Rendimiento Java Script - Programador PHPJuan Belón Pérez
 
Bibliografia Y Menciones - Programador PHP
Bibliografia Y Menciones - Programador PHPBibliografia Y Menciones - Programador PHP
Bibliografia Y Menciones - Programador PHPJuan Belón Pérez
 
Aceleradores PHP Final - Programador PHP
Aceleradores PHP Final - Programador PHPAceleradores PHP Final - Programador PHP
Aceleradores PHP Final - Programador PHPJuan Belón Pérez
 
Introducción A La Orientación A Aspectos - Programador PHP
Introducción A La Orientación A Aspectos - Programador PHPIntroducción A La Orientación A Aspectos - Programador PHP
Introducción A La Orientación A Aspectos - Programador PHPJuan Belón Pérez
 
Aceleradores Php Final - Programador PHP
Aceleradores Php Final - Programador PHPAceleradores Php Final - Programador PHP
Aceleradores Php Final - Programador PHPJuan Belón Pérez
 
Bibliografia Y Menciones zenphp - Programador PHP
Bibliografia Y Menciones zenphp  - Programador PHPBibliografia Y Menciones zenphp  - Programador PHP
Bibliografia Y Menciones zenphp - Programador PHPJuan Belón Pérez
 

Mais de Juan Belón Pérez (20)

Aplicaciones y juegos para móbiles 2011: iOS, Android, Bada, Palm
Aplicaciones y juegos para móbiles 2011: iOS, Android, Bada, PalmAplicaciones y juegos para móbiles 2011: iOS, Android, Bada, Palm
Aplicaciones y juegos para móbiles 2011: iOS, Android, Bada, Palm
 
Yahoo! pipes + Wordpress plugin - RSS POWER to your blog
Yahoo! pipes + Wordpress plugin - RSS POWER to your blogYahoo! pipes + Wordpress plugin - RSS POWER to your blog
Yahoo! pipes + Wordpress plugin - RSS POWER to your blog
 
Proyecto Campos Electricos - Programador Servicios 3d
Proyecto Campos Electricos - Programador Servicios 3dProyecto Campos Electricos - Programador Servicios 3d
Proyecto Campos Electricos - Programador Servicios 3d
 
Aecem - Libro Blanco - Para Programador Php.org
Aecem - Libro Blanco  - Para Programador Php.orgAecem - Libro Blanco  - Para Programador Php.org
Aecem - Libro Blanco - Para Programador Php.org
 
Bpel y Open Esb
Bpel y Open EsbBpel y Open Esb
Bpel y Open Esb
 
Composicion de servicios web, un ejemplo
Composicion de servicios web, un ejemploComposicion de servicios web, un ejemplo
Composicion de servicios web, un ejemplo
 
Presentación: xUnit y Junit
Presentación: xUnit y JunitPresentación: xUnit y Junit
Presentación: xUnit y Junit
 
Cómo elegir un servidor Web
Cómo elegir un servidor WebCómo elegir un servidor Web
Cómo elegir un servidor Web
 
Zenphp - Presentación de Septiembre en la Etsiit - Programador PHP
Zenphp - Presentación de Septiembre en la Etsiit - Programador PHPZenphp - Presentación de Septiembre en la Etsiit - Programador PHP
Zenphp - Presentación de Septiembre en la Etsiit - Programador PHP
 
Ensayo Cientifico - Programador PHP
Ensayo Cientifico - Programador PHPEnsayo Cientifico - Programador PHP
Ensayo Cientifico - Programador PHP
 
Zen AJAX - Programador PHP
Zen AJAX - Programador PHPZen AJAX - Programador PHP
Zen AJAX - Programador PHP
 
Zen Scaffolding - Programador PHP
Zen Scaffolding - Programador PHPZen Scaffolding - Programador PHP
Zen Scaffolding - Programador PHP
 
Rendimiento Java Script - Programador PHP
Rendimiento  Java Script - Programador PHPRendimiento  Java Script - Programador PHP
Rendimiento Java Script - Programador PHP
 
Bibliografia Y Menciones - Programador PHP
Bibliografia Y Menciones - Programador PHPBibliografia Y Menciones - Programador PHP
Bibliografia Y Menciones - Programador PHP
 
M V C - Programador PHP
M V C - Programador PHPM V C - Programador PHP
M V C - Programador PHP
 
Aceleradores PHP Final - Programador PHP
Aceleradores PHP Final - Programador PHPAceleradores PHP Final - Programador PHP
Aceleradores PHP Final - Programador PHP
 
Introducción A La Orientación A Aspectos - Programador PHP
Introducción A La Orientación A Aspectos - Programador PHPIntroducción A La Orientación A Aspectos - Programador PHP
Introducción A La Orientación A Aspectos - Programador PHP
 
Splat - Programador PHP
Splat - Programador PHPSplat - Programador PHP
Splat - Programador PHP
 
Aceleradores Php Final - Programador PHP
Aceleradores Php Final - Programador PHPAceleradores Php Final - Programador PHP
Aceleradores Php Final - Programador PHP
 
Bibliografia Y Menciones zenphp - Programador PHP
Bibliografia Y Menciones zenphp  - Programador PHPBibliografia Y Menciones zenphp  - Programador PHP
Bibliografia Y Menciones zenphp - Programador PHP
 

Último

Actividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolarActividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolar24roberto21
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosAlbanyMartinez7
 
La tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedadLa tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedadEduardoSantiagoSegov
 
Herramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfHerramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfKarinaCambero3
 
David_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptxDavid_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptxDAVIDROBERTOGALLEGOS
 
Trabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointTrabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointValerioIvanDePazLoja
 
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...Marketing BRANDING
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docxobandopaula444
 
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptxLINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptxkimontey
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfedepmariaperez
 
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdfBetianaJuarez1
 
Slideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan GerenciaSlideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan Gerenciacubillannoly
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptxHugoGutierrez99
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúCEFERINO DELGADO FLORES
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1ivanapaterninar
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersIván López Martín
 
Viguetas Pretensadas en concreto armado
Viguetas Pretensadas  en concreto armadoViguetas Pretensadas  en concreto armado
Viguetas Pretensadas en concreto armadob7fwtwtfxf
 
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024u20211198540
 

Último (20)

Actividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolarActividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolar
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos Juridicos
 
La tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedadLa tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedad
 
Herramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfHerramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdf
 
David_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptxDavid_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptx
 
Trabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointTrabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power Point
 
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
 
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptxLINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdf
 
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
 
Slideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan GerenciaSlideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan Gerencia
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 Testcontainers
 
Viguetas Pretensadas en concreto armado
Viguetas Pretensadas  en concreto armadoViguetas Pretensadas  en concreto armado
Viguetas Pretensadas en concreto armado
 
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
 

Tutorial A Z A - Programador PHP

  • 1. zenphp :: un framework de aplicaciones en PHP para seres humanos Tutorial zenphp :: un framework de aplicaciones en PHP para seres humanos Creación de una aplicación web jbelon [arroba] correo [punto] ugr [punto] es Blog.zenphp.es Enero/Febrero ‘08 1
  • 2. Tutorial/Proyecto de creación de una aplicación con zenphp.es Paso 1: Introducción y descarga En la página web del proyecto encontrarás la última versión para descargar del framework, descárgala ya que puedes utilizarla para coordinar con la línea general del tutorial, que se hizo con la versión 0.1.1 [Enero-Febrero del 2008] Puedes utilizar el editor Zend Studio o Eclipse para llevar un mejor control de la creación de tu aplicación y de la depuración de la misma con información de variables, clases, objetos y otros bloques de código que se implementan en este documento. La página web completa y el código fuente lo puedes encontrar bajo licencia LGPL en el servidor de la forja de rediris, aquí. Cuando crees plantillas html, css, xml, también puedes editarlas dentro del editor. Puedes cambiar fácilmente las plantillas para ajustarlas a otra aplicación al igual que el código de la aplicación puedes reutilizarlo para cualquier otro proyecto. Puedes utilizar la galería de módulos de zenphp para insertar funcionalidades a tu aplicación: manejadores de formularios, manipuladores de imágenes, ajax, etc. Para ello consulta los documentos de diseño de zenphp en la forja de rediris del proyecto: introducción, organigramas, diseño de clases, manuales, tutoriales, etc. Para cambiar la plantilla general de tu aplicación, ve al directorio de /media/plantillas/es (o del idioma que sea) y modifica la base_web.html. Las imágenes irán en /media/img donde podrás añadir nuevos elementos para tu aplicación. Una vez descargado zenphp, se descomprime en una carpeta dentro del servidor, si es el directorio de apache /var/www/usuario/html/ Paso a explicar entonces la jerarquía de directorios tomando este directorio:  /zenphp/zen.php :: donde configuraremos un par de constantes para el sitio web  /zenphp/ :: contiene el núcleo de zenphp, no deberíamos de tocar el contenido de éste directorio  /aplicaciones/ : contiene las clases de usuario,configuraciones de base de datos y:  modelos/ : donde guardaremos los modelos de datos de la aplicación  controladores/ : sirve para guardar ficheros que serán cargados para asociarlos a modelos de datos como controladores de los mismos  vistas/ : aquí se guardan las vistas de nuestra aplicación  ayudantes/ : algunas clases que sirven como ayuda de nuestra aplicación y se asocian blog.zenphp.es a la clase principal  /media :: es el directorio donde guardaremos el contenido multimedia de la página web  plantillas/ :: aquí guardaremos todas las plantillas necesarias  es/ :: es ,en el idioma por defecto, de donde se toman las plantillas 2
  • 3. idiomas/ :: directorio para almacenar subdirectorios de idiomas:  es/ :: ejemplo de idioma,español por defecto, ficheros con las definiciones de constantes de idiomas, ejemplo: indice.php  <?php define('TXT_TITULO',"Mi titulo"); ?>  en/ idem …para el inglés, etc.  img/ :: aquí guardaremos las imágenes de la plantilla HTML  swf/ :: para almacenar los objetos flash  scripts/ :: contiene los ficheros javascript que utilizamos  etc/ :: resto de archivos: pdf, vídeos,lo que sea Paso 2: Configuración y depuración Configuración Opcional Para mantenerlo todo muy ordenado, lo primero que tenemos que hacer después de copiar los ficheros es tener a mano las plantillas,es decir, copiar los ficheros HTML,XML ,etc en el directorio de idioma por defecto: /media/plantillas/es/ ; copiar las imágenes en /media/img/, los objetos flash en /media/swf , los javascripts en /media/scripts/,etc. Si queremos tener zenphp en otro directorio por motivos de seguridad o cualquier otro directorio, podemos cambiarlo en el mismo fichero, con la constante ZF_CARPETA_ZEN,lo mismo ocurre con los demás: plantillas,idiomas,etc. Si estamos usando Zend Studio para crear la aplicación, iremos a ProyectoNuevo Proyecto y aparecerá el “Asistente de Proyectos”, pondremos el nombre, aza_local, pulsamos en “Siguiente” y ahora en “Añadir Directorio”, buscaremos ahora nuestro directorio del servidor y pulsaremos “siguiente” hasta finalizar comprobando nuestra configuración del servidor de depuraciçon; en el caso de que necesitemos usar un directorio de FTP tendríamos que haber añadido el servidor antes de pulsar en “Nuevo Proyecto”. Ahora estamos en condiciones de empezar con la configuración de la aplicación. Para empezar abrimos el archivo /zen.php y configuramos las tres variables que necesitamos: ZF_SITIO_WEB, ZF_NOMBRE_SITIO, ZF_CORREO_ADMIN con nuestros valores del sistema. Opcional: Con Zend Studio: para disponernos a comprobar el funcionamiento de zenphp, desde el mismo fichero zen.php vamos a la línea que dice “zen___carga_clase('zen');” y pulsamos F9, se habrá añadido un breakpoint o punto de ruptura, donde el depurador se dentendrá en tiempo de ejecución,vamos a ello... Ahora pulsamos F5 para ejecutar el código e iremos avanzando paso a paso comprobando qué es lo que va haciendo zenphp. Si todo ha ido bien obtendremos una pantalla como la de la siguiente página: blog.zenphp.es 3
  • 4. En la parte inferior podemos tener acceso a las variables declaradas, comprobar el valor de una e incluso dar una expresión en tiempo de ejecución, crear un “watch” o traza, para saber qué tiene una variable en todo momento sin tener que buscarla en la lista asi como ver la pila de llamadas y qué ficheros de scripts están llamando a qué scripts, también podemos conocer la posición de los puntos de ruptura y qué tiene el búfer de salida. Atendiendo a la parte izquierda del editor veremos una pestaña donde se colocan todos los ficheros del proyecto y justo debajo, si seleccionamos el botón del “Proyecto” tenemos acceso a las clases declaradas en él de forma que sabremos qué métodos y propiedades tiene cualquiera de nuestros objetos. blog.zenphp.es La línea roja define el breakpoint y la azul donde se encuentra ejecutando el intérprete en ese momento. A la derecha del editor se coloca la salida de cada script. Como éste no tenía ninguna ,no se muestra mensaje alguno. 4
  • 5. Paso 3: Creación de la aplicación ¿Qué es lo que hace zenphp por medio del generador de proyectos y aplicaciones que utiliza la factoría de clases? (¡si no quieres saberlo salta a la página 7!) 1. Notificación: El subdominio aza.grandazen.com ha sido creado. 2. Crear directorio del proyecto y copiar zenphp al directorio. 3. Configurar zenphp/zen.php -> ZF_SITIO_WEB, ZF_NOMBRE_SITIO y ZF_CORREO_ADMIN. Opcionales: ZF_MODO_DEPURACION y ZF_MODO_GUARDAR_LOG. 4. Crear la carpeta aplicaciones y los ficheros de aplicaciones: aplicaciones/aza.php,aplicaciones/aza_admin.php, aplicaciones/aza.config.php con todo su contenido... Se lee el fichero XML de configuración La aplicación por defecto usa el nombre del proyecto. Hereda de la clase zen_aplicacion_cliente que hereda de la clase zen La aplicación de administración del CMS usa el nombre del proyecto + "_" + nombre del directorio de administración. Hereda de la clase zen_aplacion_admin que hereda de la clase zen. Las plantillas de aplicaciones están disponibles para ser modificadas. 5. Crear las plantillas HTML, el diseño ,etc. Una vez terminado organizarlo todo para meter las imágenes y demás contenido en /media/img/, /media/css, /media/js, /media/swf, etc. Para ello: crear el directorio /media/idiomas/es ,/media/idiomas/en , etc y /media/plantillas/es , /media/plantillas/en, etc. El primero para las constantes de idiomas en ficheros .php y el segundo para guardar los ficheros de plantillas en HTML con sus #etiquetas# a substituir en el programa. Realizar todas las tareas de las plantillas: * generar una plantilla base_web.html en /media/plantillas/es (idioma por defecto) donde colocar las etiquetas de #titulo#,#scripts#,#contenido#,#pie#,etc. * recortar todas las plantillas y mantener la estructura organizada: articulos/elementos.html, articulos/mostrar.html, productos/elementos.html, etc. 7. Dar permisos de escritura al directorio media/img 8. Crear los modelos, vistas y controladores en las clases aplicaciones/aplicaciones/aza 9. Cuando zenphp intenta cargar la libreria comprimida zen_protoculous.js, si no existe en ningún directorio devuelve error. En todo caso intenta cargar...( Prototype y Scriptaculous combinados) comprueba si existe en /media/js ó /media/scripts ,si no existe intentará copiarla allí y si no puede,usará zenphp/contenido/js/zen_protoculous.js 10.Crear /index.php con la instancia de la clase <?php blog.zenphp.es require_once('zenphp/zen.php'); zen___carga_aplicacion('aza'); $ap = new MiProyecto(); $ap->enrutador->delegar(); 5
  • 6. ?> 11. Crear /admin/ , /admin/index.php con el contenido como el del paso 10 pero para la interfaz de administración del CMS: <?php require_once('../zenphp/zen.php'); zen___carga_aplicacion('MiProyecto_admin'); $ap_admin = new MiProyecto_admin(); $ap_admin -> enrutador-> delegar(); ?> 12. Cargar el editor Zend Studio y crear el proyecto, añadir el directorio del proyecto. 13. Crear la base de datos 14. Crear el fichero aplicaciones/aza.config.php con el contenido: <?php define('aza_usuario','usuario'); define('aza_servidor','localhost'); define('aza_contrasena','password'); define('aza_bd','nombre_bd'); ?> El Generador: (muy importante)! un proyecto necesita que exista el directorio /media/plantillas/es donde "es" es el directorio de idioma por defecto - Crear un proyecto:: -> Crear una aplicacion: --> crear un modelo --> crear una vista (html,xml) --> crear asociación de caché --> crear un controlador por defecto -> Crear configuración: Fichero XML <proyecto nombre="" sitio=""> <aplicacion><!--es la aplicación por defecto--> <modelo></modelo> <campos> <campo>id</campo><campo>nombre</campo></campos> </aplicacion> <aplicacion nombre="admin"><!--si no se define,no se genera el admin por defecto,dicho nombre se usa para generar las clases con el nombre del proyecto+"admin"--> </aplicacion> blog.zenphp.es </proyecto> Opcional: Para crear una aplicación con el generador de aplicaciones es mucho más fácil,de forma que genere además nuestras plantillas HTML de administración. 6
  • 7. Continuamos aquí y nosotros mismos hacemos de generador empezando por crear la clase principal en /directorio_web/aplicaciones/aza.php, ésta clase hace de central de contenido, es por asi decirlo, el centro neurálgico de toda aplicación. Es por eso que en la parte cliente hereda de zen_aplicacion y en la parte de administración hereda de zen_aplicacion_admin, en ésta segunda, todas las clases terminan por _admin para facilitar su reconocimiento y distinguirlas en el espacio de nombres del conjunto de aplicaciones en un mismo directorio. El contenido de la clase aza es el siguiente:  Una clase zen_html en la variable $html , para mostrar el contenido con una plantilla, que estará dentro de dicha clase HTML  Una clase zen_basedatos en la variable $bd que en nuestro caso será del tipo mysql y estará configurada por el fichero /directorio_web/aplicaciones/aza.config.php  Una clase noticias que extiende de un modelo de datos y por lo tanto contiene un visualizador. Término acuñado por el autor para montar en una misma clase, una vista y un controlador que se asocian al modelo de datos para representar información.  Una clase artículos que dispone de la misma filosofía que las noticias pero se añaden otras opciones y campos a la tabla  Una clase galerias para mostrar una galería de imágenes en la web  Una clase enlaces para mostrar enlaces a otras webs ,administrables El contenido de la clase aza_admin es el mismo que el de la clase aza pero las clases además disponen en su interfaz del visualizador (recordar que es el controlador+vista en uno) los formularios para altas/bajas/modificaciones de artículos,noticias,imágenes,etc. Base de datos: Para crear la base de datos usamos el comando CREATE DATABASE aza Sin olvidarnos de ejecutar también : ALTER DATABASE `aza` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin ya que necesitamos que la codificación sea en UTF8. Esto nos recuerda que el fichero /directorio_web/.htaccess ha de contener: AddDefaultCharset UTF-8 Al igual que los HTML de las plantillas tienen que tener una metaetiqueta: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Aclarados estos puntos continuemos con la creación de tablas de usuarios, noticias, artículos Ver adjuntos: consultas.sql blog.zenphp.es 7
  • 8. -- -- Estructura de tabla para la tabla `articulos` -- CREATE TABLE `articulos` ( `ida` int(11) NOT NULL auto_increment, `titulo` varchar(250) collate utf8_bin NOT NULL default '', `HTML` text collate utf8_bin, `fecha` date NOT NULL default '0000-00-00', `imagen` varchar(250) collate utf8_bin default NULL, `tipo` enum('local','municipal','casa','juventudes') collate utf8_bin NOT NULL default 'local', PRIMARY KEY (`ida`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=13 ; -- -------------------------------------------------------- -- -- Estructura de tabla para la tabla `enlaces` -- CREATE TABLE `enlaces` ( `ide` int(11) NOT NULL auto_increment, `titulo` varchar(250) collate utf8_bin NOT NULL default '', `url` text collate utf8_bin NOT NULL, PRIMARY KEY (`ide`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=3 ; -- -------------------------------------------------------- -- -- Estructura de tabla para la tabla `galerias` -- CREATE TABLE `galerias` ( `idg` int(11) NOT NULL auto_increment, `nombre` varchar(250) collate utf8_bin NOT NULL default '', `listado` mediumtext collate utf8_bin, PRIMARY KEY (`idg`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=3 ; -- -------------------------------------------------------- -- -- Estructura de tabla para la tabla `noticias` -- CREATE TABLE `noticias` ( `idn` int(11) NOT NULL auto_increment, `titulo` varchar(250) collate utf8_bin NOT NULL default '', `HTML` text collate utf8_bin, `fecha` date NOT NULL default '0000-00-00', `imagen` varchar(250) collate utf8_bin default NULL, `tipo` enum('noticia','opinion','evento') collate utf8_bin NOT NULL default 'noticia', PRIMARY KEY (`idn`) blog.zenphp.es ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=12 ; -- -------------------------------------------------------- -- 8
  • 9. -- Estructura de tabla para la tabla `usuarios` -- CREATE TABLE `usuarios` ( `idu` int(11) NOT NULL auto_increment, `nombre` varchar(75) collate utf8_bin default NULL, `usuario` varchar(16) collate utf8_bin NOT NULL default '', `password` varchar(32) collate utf8_bin NOT NULL default '', `correo` varchar(150) collate utf8_bin default NULL, `nivel` tinyint(2) NOT NULL default '1', PRIMARY KEY (`idu`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=3 ; El esquema es posible que cambie con el tiempo, no incluyo el Diagrama de Entidad/Relación porque no es necesario nada complejo, simplemente porque no hay una jerarquía bien definida, sólo existe un administrador que añadirá artículos,esto no es un wordpress con varios usuarios ni nada por que se le parezca… Tras ejecutar el fichero de consultas.sql del paquete aza adjunto tenemos que añadir un usuario administrador, para ello insertamos una nueva tupla desde la línea de comandos de mysql o bien usando PhpMyAdmin,…le daremos idu = 0 y nivel=3 ( automático ), y rellenaremos el resto de campos, el password se encripta con MD5. Ya estamos en condiciones de empezar a diseñar las plantillas y las clases. Empezamos con la plantilla, necesitamos colocar base_web.html en /directorio_web/media/plantillas/es/base_web.html para que los mecanismos automáticos la tomen. El contenido de una plantilla base_web es lo que se repite en todas las páginas que va a tener la aplicación, esto es, la cabecera, el pie, etc. Y colocaremos unas marcas entre símbolos de almohadilla “#” para distinguir los elementos que son intercambiables desde PHP, ¡ojo!, no es un sistema de plantillas que use PHP dentro de HTML pues las vistas se construyen desde el mismo controlador asociado al modelo, en cristiano, lo que queremos reemplazar lo haremos a mano mediante una clase zen_plantilla. En nuestro caso tenemos una plantilla básica con las etiquetas para #titulo#, #scripts#,#contenido#,etc. Para la página principal cargamos indice.html y lo que hacemos es reemplazar la etiqueta #contenido# con éste contenido en base_web.html. Para probar que funciona todo correctamente necesitamos una base de datos funcionando, se configura tan fácil como crear el fichero siguiente: aplicaciones/aza.config.php: <?php define('aza_servidor',"localhost"); define('aza_usuario','usuario de base de datos'); define('aza_contrasena',"contraseña"); blog.zenphp.es define('aza_bd',"nombre de base de datos"); define('aza_tipo','mysql'); ?> 9
  • 10. Una vez escrito base_web.html con su etiqueta del tipo <div id="content"> #contenido# </div> Ya es hora de ir creando la aplicación principal del cliente: aplicaciones/aza.php <?php /** * Aplicacion cliente de prueba... * */ class aza extends zen_aplicacion { /** * Visualizador HTML para la clase * * @var html_aza */ var $html; /** * Clase para mostrar noticias * * @var noticias */ var $noticias; /** * Constructor * @param str $inicializadores clases separadas por comas, a inicializar * @return prueba */ function aza($inicializadores=""){ parent::zen_aplicacion($inicializadores); $this->html =& new html_aza($this); require_once('modelos/clase_noticias.php'); $this->noticias =& new noticias($this); } } Esta parte contiene la clase de la aplicación, se puede ver que además se hace una instanciación a una clase zen_html pero que se llama html_aza, es lo que viene a continuación. Se puede separar en dos ficheros y hacer un require("clase_html_aza.php"); O bien como se muestra, colocar la clase a continuación ya que no dispone de muchas líneas blog.zenphp.es de código y se ve claramente quién es quién…(porque es importante conocerse a si mismo ;) 10
  • 11. aplicaciones/aza.php (continuación) /** * Para mostrar el HTML por pantalla con una plantilla * */ class html_aza extends zen_html { /** * Clase plantilla para leer y mostrar HTML * * @var zen_plantilla */ var $plantilla; /** * Clase Aplicacion ppal * * @var aza */ var $padre; /** * Constructor * * @param aza $_padre * @return html_prueba */ function html_aza(&$_padre){ parent::zen_html($_padre); $c =& $this->padre->contenido; $c['scripts'] = ""; } function index(){ $c =& $this->padre->contenido; $c['titulo'] = "Inicio"; $c['contenido'] = $this->plantilla->devolver_contenido("indice.html"); //$c['contenido'] = $this->padre->noticias->html->listado_indice(); parent::index(); } } ?> Para que funcione este código necesitamos antes insertar las clases de las noticias, para ello las colocamos asi blog.zenphp.es 11
  • 12. aplicaciones/modelos/clase_noticias.php <?php class noticias extends zen_modelo_datos { /** * Aplicacion * * @var aza */ var $padre; /** * Visualizador : vista + controlador en uno * * @var html_noticias */ var $html; /** * Constructor de noticias * * @param aza $padre * @return noticias */ function noticias(&$padre){ parent::zen_modelo_datos($padre,"idn,titulo,HTML,fecha,imagen,tipo","noticias", null,""); require_once(ZF_DIR_APLICACIONES.'vistas/clase_html_noticias.php'); $this->html =& new html_noticias($this); } } ?> aplicaciones/vistas /clase_noticias_html.php <?php class html_noticias extends zen_html_modelo_datos { /** * Clase de noticias asociada * * @var noticias */ var $padre; /** * Constructor del visualizador * * @param noticias $_padre * @return html_noticias */ function html_noticias(&$_padre){ parent::zen_html_modelo_datos($_padre); } blog.zenphp.es Sigue… 12
  • 13. aplicaciones/vistas /clase_noticias_html.php (continuación) /** * Devuelve el listado de noticias con la plantilla para el indice * * @return str */ function listado_indice($tipo="noticia"){ $this->padre->condiciones_where = "where tipo='".$tipo."'"; $this->padre->campos = str_replace("HTML","SUBSTRING(HTML,1,100) as intro",$this->padre->campos); $this->padre->campos.= ",titulo as titulo_formateado"; $this->padre->filtros_postprocesamiento = array("titulo_formateado"=>"zen_codifica_nombre_para_url"); $listado = parent::listado('noticias/noticia_indice.html','noticias/indice.html','noticias _indice'); if (count($this->padre->tuplas)==0) return "No hay noticias"; else return $listado; } /** * Función que muestra el contenido por defecto de las noticias * */ function index(){ $this->padre->padre->html->index(); } function leer($datos=null){ $not = $this->padre->obtener_primero("titulo","","where idn=".intval($datos[0])); echo $not['titulo']; } } ?> Ya podemos crear index.php con la instanciación de la aplicación y la llamada al enrutador que nos delegará a la vista por defecto ,de la clase aza, con $aza->html->index(). index.php :: <?php require_once('zenphp/zen.php'); zen___carga_aplicacion('aza'); $aza = new aza(); $aza->enrutador->establecer_direccion_base("/"); $aza->enrutador->delegar(); $aza->html->mostrar($aza->contenido); ?> Ahora a probarlo, la dirección es http://aza.granadazen.com El paquete con todo el código se está terminando.  blog.zenphp.es 13