Foros del Web » Programando para Internet » PHP »

Crear sistema de templates

Estas en el tema de Crear sistema de templates en el foro de PHP en Foros del Web. Hola a todos, Estoy haciendo una web con la posibilidad de administrar la web bastante... por lo que por una parte tengo contenido+procesos y por ...
  #1 (permalink)  
Antiguo 30/12/2010, 15:21
Avatar de salbatore  
Fecha de Ingreso: abril-2007
Ubicación: Springfield
Mensajes: 1.567
Antigüedad: 17 años, 8 meses
Puntos: 19
Crear sistema de templates

Hola a todos,

Estoy haciendo una web con la posibilidad de administrar la web bastante... por lo que por una parte tengo contenido+procesos y por el otro el diseño+estructura.

He pensado mucho como hacer un sistema, pero no se me ocurre nada bien hecho. Os digo como va el sistema:

Código PHP:
//primero miro que me pide el usuario y proceso el contenido:
    
if($_SERVER['REQUEST_URI']=='/home/'){include('home.php');}
//busco el template que desea mostrar e imprimo:
    
include('template.php'); 
El template seria un html con varios echos de variables php. Por ejemplo la variable $title seria el <title></title>... asi con todo mas o menos.

El problema que tengo es que no se me ocurre como hacerlo para el contenido... pues el contenido ademas de ser mucho contenido, no es simple texto... sino muchas muchas lineas de codigo php y demas...


¿Como debo hacerlo... la verdad es que nunca he tenido problemas... pero ahora que empiezo algo de mayor nivel a lo que acostumbro me siento un poco perdido...

  #2 (permalink)  
Antiguo 30/12/2010, 15:25
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 15 años, 2 meses
Puntos: 334
Respuesta: Crear sistema de templates

Código PHP:
Ver original
  1. <?php
  2. /**
  3.  * Sistema de Templates que enlaza PHP con las plantillas (MVC)
  4.  *
  5.  * Clase encargada de tomar los datos enviados desde
  6.  * PHP en forma de array y distribuirlos sobre un archivo- Template
  7.  * El sistema catura dentro del template las palabras entre {}
  8.  * y las reemplaza por el valor con la llave respectiva de un array asociativo
  9.  *
  10.  * @category MVC
  11.  * @subpackage Library Classes
  12.  * @copyright Copyright (c) 2010, Hidek1 [[email protected]]
  13.  * @license http://creativecommons.org/licenses/by-sa/2.0/cl/
  14.  * Atribución-Licenciar Igual 2.0 Chile.
  15.  * @since 0.1a
  16.  */
  17. class Template
  18. {
  19.     private $_filename;
  20.  
  21.     /**
  22.      * Obtiene la ruta al template
  23.      * este debe tener permisos de lectura
  24.      * retorna una Exception en caso de que
  25.      * el archivo especificado no se encuentre.
  26.      *
  27.      * @param string $filename
  28.      */
  29.     public function __construct($filename)
  30.     {
  31.         if (file_exists($filename)) {
  32.             $this->_filename = $filename;
  33.         } else {
  34.             throw new Exception("Template no encotrado.");
  35.         }
  36.     }
  37.  
  38.     /**
  39.      * Devuelve el template procesado con sus variables correspondientes
  40.      * captura dentro de este las palabras entre {} y las modifica por su
  41.      * valor correspondiente en el array
  42.      *
  43.      * $valores = array('foo' => 'bar');
  44.      * La palabra de prueba {foo}
  45.      *
  46.      * @param array $matriz
  47.      * @return string
  48.      */
  49.     public function render(array $matriz = array())
  50.     {
  51.         if (empty($matriz)) {
  52.             return file_get_contents($this->_filename);
  53.         } else {
  54.             foreach ($matriz as $key => $value) {
  55.                 $$key = $value;
  56.             }
  57.             $template = file_get_contents($this->_filename);
  58.             $template = str_replace(array('\\', '\''), array('\\\\', '\\\''), $template);
  59.             $template = preg_replace('/{([a-z]\w+?)}/i', "'.$$1.'", $template);
  60.             eval("\$template = '$template';");
  61.             return $template;
  62.         }
  63.     }
  64. }
  #3 (permalink)  
Antiguo 30/12/2010, 16:49
 
Fecha de Ingreso: diciembre-2010
Ubicación: Rosario, Santa Fe
Mensajes: 326
Antigüedad: 14 años
Puntos: 13
Respuesta: Crear sistema de templates

Que tal buscando sistemas de templates PHP? hay muchos hechos y con distintas carecteristicas, tenes smarty que es uno de los más completos con su "desventaja" de que es como aprender un lenguaje de programación nuevo, aunque hay muchos, acá te dejo un post donde hay 77, mirá y fijate cual se adapta a tus necesidades:
http://www.sitepoint.com/forums/showthread.php?threadid=123769&mode=linear&perpage =25&pagenumber=1
  #4 (permalink)  
Antiguo 31/12/2010, 08:06
Avatar de salbatore  
Fecha de Ingreso: abril-2007
Ubicación: Springfield
Mensajes: 1.567
Antigüedad: 17 años, 8 meses
Puntos: 19
Respuesta: Crear sistema de templates

Muchas gracias... voy a investigar lo que me decis.

Muchas gracias de nuevo!
  #5 (permalink)  
Antiguo 09/05/2011, 17:00
 
Fecha de Ingreso: febrero-2005
Mensajes: 626
Antigüedad: 19 años, 10 meses
Puntos: 10
Respuesta: Crear sistema de templates

Hola

Hidek1, yo uso un sistema de templates muy similar al tuyo, pero me dicen algunos en este foro que usar la funcion eval, es peligroso, no se que tanto, en mi opinion con el debido cuidado, como tu lo haces es completamente seguro

Te quiero hacer una pregunta, en el caso de tu classe como le harias para incluir condicional dentro de los templates, yo hice esa pregunta en este foro, pero no me quisieron decir,

espero que me puedas solventar esta duda, gracias de antemano

Saludos
  #6 (permalink)  
Antiguo 09/05/2011, 17:17
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 10 meses
Puntos: 89
Respuesta: Crear sistema de templates

Perdon, capaz lei muy rapido y no interprete, pero si en tu menu de administracion pones 3 templates por ejemplo ROJO, AZUL, VERDE y estos solo cambian el color de letra, bordes tamaños, y demas.
Por que no crear tres .CSS con el mismo nombre pero distinto directorio y con php hacer algo como esto:


Código HTML:
Ver original
  1. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  2. <title>Documento sin título</title>
  3. <?php
  4. include ( 'template.php' );
  5. ?>
  6. </head>

template.php

Código PHP:
Ver original
  1. <?php
  2.  
  3. $template = $_SESSION['template'];
  4.  
  5. if ( $template ==  ROJO )
  6. {
  7. echo '<link href="../template/rojo/style.css" rel="stylesheet" type="text/css" />';
  8. }elseif( $template == VERDE )
  9. {
  10. echo '<link href="../template/verde/style.css" rel="stylesheet" type="text/css" />';
  11. }elseif( $template == AZUL )
  12. {
  13. echo '<link href="../template/azul/style.css" rel="stylesheet" type="text/css" />';
  14. }
__________________
Mono programando!
twitter.com/eguimariano
  #7 (permalink)  
Antiguo 09/05/2011, 17:32
 
Fecha de Ingreso: noviembre-2005
Mensajes: 426
Antigüedad: 19 años, 1 mes
Puntos: 87
Respuesta: Crear sistema de templates

Alguien tiene que apuntar lo obio: usen Smarty que esta supremamente desarrollado.
  #8 (permalink)  
Antiguo 09/05/2011, 18:39
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 15 años, 2 meses
Puntos: 334
Respuesta: Crear sistema de templates

mmmm pero no todos necesitan algo tan desarrollado y complicado de aprender como smarty .. por lo personal no me gusta para nada porque casi tienes q practicar otro lenguaje para solo hacer plantillas... me quedo con la forma q usa zend

saludos.
__________________
More about me...
~ @rhyudek1
~ Github
  #9 (permalink)  
Antiguo 10/05/2011, 13:42
 
Fecha de Ingreso: febrero-2005
Mensajes: 626
Antigüedad: 19 años, 10 meses
Puntos: 10
Respuesta: Crear sistema de templates

Cita:
Iniciado por Hidek1 Ver Mensaje
mmmm pero no todos necesitan algo tan desarrollado y complicado de aprender como smarty .. por lo personal no me gusta para nada porque casi tienes q practicar otro lenguaje para solo hacer plantillas... me quedo con la forma q usa zend

saludos.
Hola Hidek1 y como le harias para tener condicionales en tus templates?, como le hace el vbulletin con sus templates

por ejemplo

Código HTML:
Ver original
  1. [IF $admin==TRUE]
  2. ERES ADMINISTRADOR
  3. [/IF]

Última edición por August; 10/05/2011 a las 13:52
  #10 (permalink)  
Antiguo 10/05/2011, 14:32
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 15 años, 2 meses
Puntos: 334
Respuesta: Crear sistema de templates

bueno sinceramente encuentro que esta mal la forma que usa vbulleting con sus templates
la programación no tiene porque ir en la plantilla... (por algo son plantillas no?)..


Código PHP:
echo $template->render(array('cargo' => 'ADMINISTRADOR')); 
Código template:
Ver original
  1. ERES {cargo}

saludos.
__________________
More about me...
~ @rhyudek1
~ Github
  #11 (permalink)  
Antiguo 10/05/2011, 14:54
 
Fecha de Ingreso: febrero-2005
Mensajes: 626
Antigüedad: 19 años, 10 meses
Puntos: 10
Respuesta: Crear sistema de templates

Hidek1 diras que soy muy pregunton, pero te lo voy agradecer mucho y en este caso como le harias para tabular unos resultados

me refiero a guardar en el template, la forma en que va estar cada renglon, seria buena idea solo invocar el template dentro de un ciclo,

siendo mas explicito mi renglon es asi

Código HTML:
Ver original
  1. <tr class="renglon$variables[i]"><td id="cantidad,$variables[id]">
  2. <span ondblclick="actualizar('$variables[cantidad]','0','cantidad,$variables[id]','cantidad');">
  3. $variables[cantidad]</span></td><td id="nombre,$variables[id]">
  4. <span ondblclick="actualizar('$variables[nombre]','0','nombre,$variables[id]','nombre');">
  5. $variables[nombre]</span></td><td>$variables[precioventa]</td><td>
  6. <a onclick="return confirmLink(this,  '$variables[nombre]','$variables[id]','$variables[especial]','$variables[recargar]');">
  7. <img src=IMA/delete.png /></a> </td></tr>

Leyendo detenidamente esta parte, solo debe mostrarse al administrador lo siguiente, actualmente lo tengo funcionando pero como no tengo la condicional en el template, pues le permite a todos los usuarios modificar la base de datos

Código HTML:
Ver original
  1. ondblclick="actualizar('$variables[cantidad]','0','cantidad,$variables[id]','cantidad');"

Este pedaso anterior solo debe ser mostrado al administrador y todo el renglon debe estar dentro de un ciclo, se me ocurria la idea de poder poner ciclos en el template, lo cual como tu bien dices, el template no es para eso, o bien invocar el template dentro de un ciclo

Tambien he leido que el codeigniter usa otra manera en lugar de usar eval usa un include, usando ob_start() lo cual se me hace como que medio loco, tu que me recomiendas?

Son como 3 preguntas, una es para las condicionales y las tabulacion como hacerle
y la otra como hacerle con estas formas alternativas de usar include en lugar de eval

Saludos y gracias de antemano

Última edición por August; 10/05/2011 a las 14:59
  #12 (permalink)  
Antiguo 10/05/2011, 15:13
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años, 7 meses
Puntos: 528
Respuesta: Crear sistema de templates

Si tus templates sólo cambian colores o cosas simples, como alguien ya te dijo, mejor usa css.

Yo para el uso de templates lo hago así:
Mi index tiene una estructura muy concreta:
encabezado
columna izquierda, central y derecha
pie
Mis templates no son mas que un conjunto de funciones predefinidas:
abre_encabezado();
cierra_encabezado;
abre_col_izq();
cierra_col_izq();
etc.

Todos mis templates tienen las mismas funciones con el mismo nombre, lo que cambia es la forma en que "dibujan" eñ html, pudiendo usar CSS.

Así mi archivo index incluye el template que esté activo y va llamando las funciones del template según convenga, por ejemplo:
Código PHP:
Ver original
  1. <?php
  2. include("skin/mitemplate_activo.php")
  3. abre_encabezado();
  4.      echo "Info que va en el encabezado";
  5. cierra_encabezado();
  6.  
  7. abre_col_izq();
  8.      echo "Info que va en la columna izq.";
  9. cierra_col_izq();
  10. ?>

Todo esto sin utilizar eval, por supuesto.

Los templates así tienen completa libertad de decidir las dimensiones de las secciones, si la estructura el fija, líquida o elástica, si usa o no tal o cual fondo, o marcos de imágenes para las secciones etc.
  #13 (permalink)  
Antiguo 10/05/2011, 15:33
 
Fecha de Ingreso: febrero-2005
Mensajes: 626
Antigüedad: 19 años, 10 meses
Puntos: 10
Respuesta: Crear sistema de templates

Es que en realidad mis templates no son taaan sencillos, a mi no me molesta usar eval

Pero con la funcion que nos esta dando hidek1, me pareceria interezante saber como puedo hacer una tabulacion, tengo dos opciones

Invocar al template dentro de un ciclo, o poner un ciclo en el template o como se le haria?

Asi son mis renglones

Código HTML:
Ver original
  1. <tr class="renglon$variables[i]"><td id="cantidad,$variables[id]">
  2. <span ondblclick="actualizar('$variables[cantidad]','0','cantidad,$variables[id]','cantidad');">
  3. $variables[cantidad]</span></td><td id="nombre,$variables[id]">
  4. <span ondblclick="actualizar('$variables[nombre]','0','nombre,$variables[id]','nombre');">
  5. $variables[nombre]</span></td><td>$variables[precioventa]</td><td>
  6. <a onclick="return confirmLink(this,  '$variables[nombre]','$variables[id]','$variables[especial]','$variables[recargar]');">
  7. <img src=IMA/delete.png /></a> </td></tr>


Mientras, lo siguiente que esta dentro de lo de arriba solo debe ser mostrado unicamente al administrador

Código HTML:
Ver original
  1. ondblclick="actualizar('$variables[cantidad]','0','cantidad,$variables[id]','cantidad');"

En realidad son varias mis dudas? si me di a explicar?

Última edición por August; 10/05/2011 a las 15:54
  #14 (permalink)  
Antiguo 12/05/2011, 11:57
 
Fecha de Ingreso: febrero-2005
Mensajes: 626
Antigüedad: 19 años, 10 meses
Puntos: 10
Respuesta: Crear sistema de templates

Entonces si me puedan dar una orientada, como acoplar a este sistema de template una tabulacion de resultados
  #15 (permalink)  
Antiguo 12/05/2011, 12:14
 
Fecha de Ingreso: enero-2011
Ubicación: DF
Mensajes: 898
Antigüedad: 13 años, 11 meses
Puntos: 155
Respuesta: Crear sistema de templates

mm no voy en contra de usar tecnologias practicas y pues mas adoc a lo que cada quien necesita pero cuando se empieza a necesitar mas cosas por eso es que a veces conviene ya usar tecnologias con mas tiempo de desarrollo, ya probadas , con documentacion , foros etc.. ojo no desestimo para nada el sistema de plantillas de hidek1, solo es una opinion



http://www.smarty.net/docsv2/es/lang...on.foreach.tpl
http://www.smarty.net/docs/en/langua...on.include.tpl
__________________
No me interesan ni las gracias ni los karmas , pero si que se genere conocimiento, si se dio con la respuesta por favor confirmalo
  #16 (permalink)  
Antiguo 12/05/2011, 13:08
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 15 años, 2 meses
Puntos: 334
Respuesta: Crear sistema de templates

de todas formas ya hace bastante deje de usar esa class... solo la postee porque es solo un archivo y trabaja de forma rápida para cosas sencillas .. aparte de que te puede dar una idea global en lo que se refiere al tema.

ahora uso algo parecido a lo que hace zend .. quizá mas adelante postee el código para que le echen un vistazo haber si les sirve ^^


saludos.
__________________
More about me...
~ @rhyudek1
~ Github
  #17 (permalink)  
Antiguo 12/05/2011, 14:02
 
Fecha de Ingreso: enero-2011
Ubicación: DF
Mensajes: 898
Antigüedad: 13 años, 11 meses
Puntos: 155
Respuesta: Crear sistema de templates

Cita:
Iniciado por Hidek1 Ver Mensaje
de todas formas ya hace bastante deje de usar esa class... solo la postee porque es solo un archivo y trabaja de forma rápida para cosas sencillas .. aparte de que te puede dar una idea global en lo que se refiere al tema.

ahora uso algo parecido a lo que hace zend .. quizá mas adelante postee el código para que le echen un vistazo haber si les sirve ^^


saludos.

staria muy bien que tanto esta clase sencilla de templates, como la actual estuviera en aportes
__________________
No me interesan ni las gracias ni los karmas , pero si que se genere conocimiento, si se dio con la respuesta por favor confirmalo
  #18 (permalink)  
Antiguo 14/05/2011, 11:38
 
Fecha de Ingreso: febrero-2005
Mensajes: 626
Antigüedad: 19 años, 10 meses
Puntos: 10
Respuesta: Crear sistema de templates

Cita:
Iniciado por Hidek1 Ver Mensaje
de todas formas ya hace bastante deje de usar esa class... solo la postee porque es solo un archivo y trabaja de forma rápida para cosas sencillas .. aparte de que te puede dar una idea global en lo que se refiere al tema.

ahora uso algo parecido a lo que hace zend .. quizá mas adelante postee el código para que le echen un vistazo haber si les sirve ^^


saludos.
Como que me estan ignorando, verdad?, posteala, para que veamos que onda, porfas

Etiquetas: template, sitemap
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 2 personas




La zona horaria es GMT -6. Ahora son las 12:08.