Foros del Web » Programando para Internet » PHP »

Templates

Estas en el tema de Templates en el foro de PHP en Foros del Web. Creo q todavia no has entendido la filosofia de usar un motor de templates ... Esa estructura q tienes actualmente si usas "templates" deberias encajarla ...

  #31 (permalink)  
Antiguo 22/01/2003, 20:12
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
Creo q todavia no has entendido la filosofia de usar un motor de templates ...

Esa estructura q tienes actualmente si usas "templates" deberias encajarla a su vez en una template "padre" ..

Tus bloques q actualmente llamas via un include NO deberian instanciar el objeto NokTemplate ($html=new () ...) .. NI tampoco hacer el $html->imprimir('FINAL'); pues eso lo tiene que hacer la plantilla "padre" de donde cuelgan tus "include" ...

Si, puedes tener porciones de código de template a generar y llamarlos via "include" .. pero has de tener en cuenta que hacer un "include" lo que haces es que PHP llame a ese código y lo incruste en el sitio desde donde se llamo .. hace la pgina y cuando lo tiene todo listo lo entrega al dispositivo de salida .. A su vez .. usando un motor de templates .. primero PHP se lo entrega a motor de template (via sus métodos que ya haces) .. y en ultima instancia es entregado todo al "navegador" via el método "$hmtl->imprimir()" de este motor de template ..

En esquema seria algo así lo q comento:
Código PHP:
<?
$html
= new NokTemplate("templates");
$html->cargar('PADRE_PLANTILLA','padre.htm');

include(
"header.php"); // {HEADER}

include("contenido.php"); {CONTENIDO}

include(
"pie.php"); {PIE}

$html->expandir('FINAL','PADRE_PLANTILLA');
$html->imprimir('FINAL');
?>
Y esos .php q llamas en el include .. SOLO deben hacer que lo q tengan q hacer (cargar template y/o definir bloques .. asignar variables a variables de la template ..) siendo lo ultimo un:

$html->expandir(LOQUESEA,destino)
(nada de $html->imprimir() .. ni FINAL .. etc)

siendo:

LOQUESEA ... el bloque que has generado ...
destino .. el lugar q va a ocupar en la template PADRE que previamente has definido su ubicación y lo has definido con {destino} ...

Esa sería la filosofia mas o menos de trabajo .. Para q lo entiendas bien . primero tendrias q hacer una página completa empezando desde la template PADRE hacia abajo (anidadas) con las HIJAS ... como es tu caso esos bloques de "header y lo q sea" ...

De todas fomas .. por la misma filosofia de las templates y como te he descrito .. Usar un "footer" y un "header" .. ahora así no tiene sentido pues ese "header" y "footer" lo puedes definir en la plantilla PADRE que será la que siempre va aparecer esos dos "bloques" .. lo q tendras y puedes llamar via "include" son los bloques de menu, contenido .. y otros ..


Un saludo,
  #32 (permalink)  
Antiguo 22/01/2003, 23:19
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 21 años, 5 meses
Puntos: 1
ok mas menos ahora lo entendi, ahora ire probando a ver que resulta.


Gracias
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon
  #33 (permalink)  
Antiguo 23/01/2003, 01:10
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 21 años, 5 meses
Puntos: 1
OK hice algunas pruebas y todo funciona casi casi casi bien

miren

tengo un template donde la parte importante (segun yo) es esta

Código PHP:
<!-- inicioBloqueNOTICIAS -->
                 <
table align="center" width="100%" class="tabla">
                 {
FILAS}
                 </
table>
                 <!-- 
finBloqueNOTICIAS -->        
                 <!-- 
inicioBloqueFILAS -->
                 <
tr><td><font class="news">{FECHA}</td><td><font class="news">{TITULO}</tr>
                 <
tr><td><font class="news">Enviado por {AUTOR}</td></tr>
                 <
tr><td><font class="news">{CONTENIDO}</td></tr>
                 <!-- 
finBloqueFILAS --> 

luego en el code php tengo esto

Código PHP:
$html->cargar('MAIN','principal.htm');

include(
"/home2/matiasc/public_html/paginav1.1/includes/conexdb.php");
$sql="SELECT * FROM news ORDER BY id DESC LIMIT 3";
$result=mysql_query($sql);
while(
$row=mysql_fetch_array($result))
{
$fecha=date("d/m/Y",$row["fecha"]);
$autor=$row["autor"];
$titulo=$row["titulo"];
$texto=$row["contenido"];
$html->definirBloque('NOTICIAS','MAIN');
$html->definirBloque('FILAS','MAIN');
$html->asignar('FECHA',$fecha);
$html->asignar('TITULO',$titulo);
$html->asignar('AUTOR',$autor);
$html->asignar('CONTENIDO',$texto);
$html->expandir('MAIN','FIN');
}

$html->imprimir('FIN');

?> 
El resultado es............ NADA no muestra nada de nada, ni error ni nada.

PANTALLA BLANCA

e intentado poniendo los $html-> en todas partes pero de igual manera no muestra nada.

Cual es mi error?

Saludos y gracias de antemano
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon
  #34 (permalink)  
Antiguo 23/01/2003, 17:59
Nok
 
Fecha de Ingreso: abril-2001
Mensajes: 302
Antigüedad: 23 años
Puntos: 0
Bueno, parece que no terminas de comprender como funciona la cosa. antes de "imprimir" tienes que expandir los templates en alguna variable para poder luego mostrar el contenido del template.

Tendrias que modificar tu codigo algo asi:

Código PHP:
$html->cargar('MAIN','principal.htm');

include(
"/home2/matiasc/public_html/paginav1.1/includes/conexdb.php");
$sql="SELECT * FROM news ORDER BY id DESC LIMIT 3";
$result=mysql_query($sql);
$html->definirBloque('NOTICIAS','MAIN');
$html->definirBloque('FILAS','MAIN');

while(
$row=mysql_fetch_array($result))
{
$fecha=date("d/m/Y",$row["fecha"]);
$autor=$row["autor"];
$titulo=$row["titulo"];
$texto=$row["contenido"];
$html->asignar('FECHA',$fecha);
$html->asignar('TITULO',$titulo);
$html->asignar('AUTOR',$autor);
$html->asignar('CONTENIDO',$texto);

//Expandis el contenido del template FILAS dentro de la variable 
//FILAS(tendrias que cambiarle el nombre asi no te confundis), en 
//esta accion, se reemplaza el valor de las variables por el que 
//tienen asignado, ademas se concatena el contenido a lo ya 
//existente, para ir formando la tabla. 
$html->expandir('FILAS','+FILAS');
}
//Ahora el contenido de eñ template NOTICIAS lo volcas sobre la variable FINAL.
$html->expandir('FINAL','NOTICIAS');
//luego se imprime la variable FINAL que tiene todo lo que quieres mostrar.
$html->imprimir('FINAL');

?> 
Espero haber aclarado tus dudas, avisame cualquier cosa.

Saludos, Nok.

Última edición por Nok; 23/01/2003 a las 18:06
  #35 (permalink)  
Antiguo 23/01/2003, 22:22
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 21 años, 5 meses
Puntos: 1
Ok lo hice asi y funciona pero........

me muestra solo eso y en mi template hay mucho mas (en el html) eso si solo html nada mas y tampoco definido otros bloques

el code del template es este

codigo del template (html)

codigo php

acaso debo definir todo dentro de bloques





Saludos gracias
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon
  #36 (permalink)  
Antiguo 24/01/2003, 15:55
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
Lo típico es tener la plantilla "master" (o padre) como un .htlm tipico .. sin definicion de bloques ni nada mas extra .. Pero los bloques q uses tenerlos todos en uno o varios archivos .html ..

Todo depende de cuando o como los uses .. pues tampoco es recomendable estar "parseando" constantemetne bloques q no se usan en ese momento .. (pero eso ya seria "optimización" .. paso q deberas repasarlo cuando tengas claro como trabajar con un motor de templates ..)

Un saludo,
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




La zona horaria es GMT -6. Ahora son las 17:11.