Foros del Web » Programando para Internet » PHP »

Una pregunta bien basica

Estas en el tema de Una pregunta bien basica en el foro de PHP en Foros del Web. Quiero comenzar a hacer pruebas con templetes, pero antes quisiera terminar con una duda que tengo: Actualmente tengo varios documentos en donde hay 2 tablas. ...
  #1 (permalink)  
Antiguo 17/10/2003, 03:36
 
Fecha de Ingreso: junio-2002
Ubicación: Buenos Aires, Argentina
Mensajes: 876
Antigüedad: 15 años, 5 meses
Puntos: 0
Una pregunta bien basica

Quiero comenzar a hacer pruebas con templetes, pero antes quisiera terminar con una duda que tengo:
Actualmente tengo varios documentos en donde hay 2 tablas. Estas tablas estan encerradas por tags de php, y segun una condicion if es mostrada una u otra.

Ej:
<? if($a=1) { ?>tabla1<? } else { ?>tabla2<?php } ?>

Mi pregunta es como mantengo este funcionamiento usando plantillas, ya que visualizar estas dos tablas en un editor de htm es importante.

Gracias.
  #2 (permalink)  
Antiguo 17/10/2003, 15:19
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Con sistemas de "Templates" .. no se trabaja así el código ..

Recuerda que la finalidad principal de trabajar con motores de templates es justamente la de separa el "codigo" de la presentación .. siendo el "código" en este caso tus instrucciones PHP y la "presentación" será tu HTML que lo "adorne" para su presentación o distribución en tu página HTML.

En sistemas de templates se trabajan las secciones de código que se han de repetir con "bloques" .. Todos los motores de templates tienen sus métodos para cargar->definir->usar tus bloques .. permaneciendo estos "bloques" en plantillas aparte de tu código PHP. (el "bloque" vendría a ser tu HTML actual que tienes entre tus ?> ... <? .. y con los {variable} que corresponda sustituir ..)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 17/10/2003, 17:39
 
Fecha de Ingreso: junio-2002
Ubicación: Buenos Aires, Argentina
Mensajes: 876
Antigüedad: 15 años, 5 meses
Puntos: 0
Pero creo que no entendiste mi pregunta.
Yo se cual es la finalidad de usar templates, pero ahora lo que quisiera saber es como arreglarmelas para hacer esto.

Yo a partir de una condicion muestro una u otra tabla, y es necesario ver estas dos tablas en el editor de html. Entonces como hago para procesar la plantilla y decir este bloque va, este no?
  #4 (permalink)  
Antiguo 17/10/2003, 20:40
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
zeus_bsas

Pues ya te dije como se hace en general .. Tienes que definir bloques y saber usarlos ..

Como se definen y como se usan dependen 100% del motor de templates que uses. Así que si usas .. ejmplo NokTemplate .. lee su manual y veras como se hacen usando ese motor de templates .. si usas Smarty idem .. Todos tienen sus própios métodos y formas de usar bloques (de definirlos en tus templates).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 17/10/2003, 22:51
 
Fecha de Ingreso: junio-2002
Ubicación: Buenos Aires, Argentina
Mensajes: 876
Antigüedad: 15 años, 5 meses
Puntos: 0
Bueno, gracias Cluster.
Estoy usando NokT y no me sale eso, ni tampoco entiendo en que parte se explica lo que necesito, pero seguire intentando a ver si me sale.
  #6 (permalink)  
Antiguo 17/10/2003, 23:23
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Bueno... NokTemplate tiene su web oficial con su foro propio que lo atiende el autor .. Si quieres hechar un vistazo:

http://www.jpw.com.ar/

En el script (en su .zip) viene con los ejemplos de uso de bloques y otras cosas como "caché" por ejemplo.

Lo tienes también en:
http://www.zonaphp.com/index.php?mod...ion=tema&id=14

Un bloque en Noktemplate se define en tu plantilla así:

Código PHP:
    <!-- inicioBloquetFila -->
    <
tr>
        <
td>{EL_NOMBRE}</td>
        <
td>{EL_APELLIDO}</td>
    </
tr>
    <!-- 
finBloquetFila --> 
Fijate en los tag <!-- inicio/finBloque: nombrebloque --> ..

Y los cargas en tu script PHP vía el método:
$html->cargar(); (si tienes tus bloques definidos anidados en tu template maestra .. no hace falta que lo vuelvas a cargar .. pues ya los tienes).

Una vez cargados .. hay que decir a NokTemplate "que bloques" tiene tu template .. para eso se usa el método:
$html->definirBloque()

Y cuando quieras usarlo ..sólo tienes que $html->expandir() el bloque que has definido (con $html->definirBloque() ..) sobre la variable que contiene el total de tu template (FINAL le llaman en los ejemplos demo ..)

Así que en tu caso del "if" .. una vez cargado la template (pos si los bloques los tienes aparte ..) y definidos (con el método apropiado) .. seriá cosa de ..

Yo suelo tener los "bloques" aparte .. los cargo de la template "bloques.html" y en mi template padre tengo una variable tipo:

{BLOQUE1}

para hacer

Código PHP:
$html->cargar('bloques','bloques.html');  
$html->definir('tbloque1','bloques');
$html->definir('tbloque2','bloques');

if (
algo){
$html->expandir('BLOQUE1','tbloque1');
}else{
$html->expandir('BLOQUE1','tbloque2');

Y mis bloques.html serían ..

Código PHP:
<!-- inicioBloquetbloque1 -->
Mi HMTL y {variablessi las necesito ...
<!-- 
finBloquetbloque1 -->

<!-- 
inicioBloquetbloque2 -->
Mi HMTL y {variablessi las necesito ...
<!-- 
finBloquetbloque2 --> 
No sé si en algo me abré equivocado .. (lo escribí al vuelo) pero más o menos la idea va por ahí.

Un saludo, ..
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 18/10/2003, 00:09
 
Fecha de Ingreso: junio-2002
Ubicación: Buenos Aires, Argentina
Mensajes: 876
Antigüedad: 15 años, 5 meses
Puntos: 0
Estuve probando lo que pusiste y no me da buenos resultados. Si "defino" los dos bloques, no importa que no los "expanda", se me imprimen igual.
Que esta pasando?
  #8 (permalink)  
Antiguo 18/10/2003, 00:14
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Los bloques deben estar aparte (por lo menos en el ejemplo que puse ...) y si no vá .. en algo me equivoque (hace un tiempo que no uso NokTemplate y lo que puse ya comenté que lo puse de "memoria" ..)

Revisa los tutoriales de las web's que te dí y mira los ejemplos que trae "demo" en el .zip original .. (y .. a malas usa el foro de su web oficial)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 18/10/2003, 00:18
 
Fecha de Ingreso: junio-2002
Ubicación: Buenos Aires, Argentina
Mensajes: 876
Antigüedad: 15 años, 5 meses
Puntos: 0
Apa!
Si o si para hacer lo que necesito los bloques NO DEBEN PERTENECER a un todo?
  #10 (permalink)  
Antiguo 18/10/2003, 00:32
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pueden pertercer a un "todo" incluso puedes anidarlos (par que cuando lo edites con tu editor "visual" de HTML los veas como quedan distribuidos ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #11 (permalink)  
Antiguo 18/10/2003, 00:56
 
Fecha de Ingreso: junio-2002
Ubicación: Buenos Aires, Argentina
Mensajes: 876
Antigüedad: 15 años, 5 meses
Puntos: 0
Pero si hago pertenecer los bloques a la plantilla principal, al todo, no puedo deshacerme de ellos

x.htm
Código PHP:
<html>
<
head>
<
title>{titulo}</title>
</
head>
<
body bgcolor="#FFFFFF" text="#000000">
<!-- 
inicioBloquebloque_1 -->
texto fijo 1 {texto_bloque_1}
<!-- 
finBloquebloque_1 -->
<!-- 
inicioBloquebloque_2 -->
texto fijo 2 {texto_bloque_2}
<!-- 
finBloquebloque_2 -->
</
body>
</
html
x.php
Código PHP:
<?php

// Incluision de la Clase.
include ('motor_plantillas/class.NokTemplate.php');
// Instancia del objeto.
// Definicion de la ubicacion de los templates.
$html=new NokTemplate('plantillas');

// Cargamos lss plantillas necesarias y les asignamos una clave
$html->cargar('plantilla_1','x.htm');

// Definicion de bloques en plantilla
$html->definirBloque('bloque_1','plantilla_1');
$html->definirBloque('bloque_2','plantilla_1');

// Asignacion de contenido dinamico a las plantillas usadas
$html->asignar('texto_bloque_1','texto bloque 1');
// Titulo de pagina
$html->asignar('texto_bloque_2','texto bloque 2');

// Expandimos el contenido de las plantillas con sus variables ya asignadas
$html->expandir('FINAL''plantilla_1');

// Y por último imprimimos la varible que contiene todo ya procesado.
$html->imprimir('FINAL');
?>
Por ejemplo ahi lo que hace es no imprimirme nada en las variables de los bloques, pero todo lo que sea html dentro de los bloques se imprime
  #12 (permalink)  
Antiguo 18/10/2003, 01:36
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Usando archivo externo y separado para los bloques (cualquiera que definas) fuera de la template "padre" serías asi (lo probé y funciona correctamente):

Código PHP:
<?
require("class.NokTemplate.php");
$html=new NokTemplate();
$html->cargar('plantilla','plantilla.htm');
$html->cargar('bloques','bloques.htm');

$html->definirBloque('bloque1','bloques');
$html->definirBloque('bloque2','bloques');

$algo='b';
if (
$algo=='a'){
// si se cumple condición, se asignan las variables que corresponadan a ese bloque y se "expande" sobre la variable que debe presentarse.
$html->asignar('TEXTO_BLOQUE_1','bloque 1 texto');
$html->expandir('BLOQUE1','bloque1');
}else{
$html->asignar('TEXTO_BLOQUE_2','bloque 2 texto');
$html->expandir('BLOQUE1','bloque2');
}

$html->imprimir('BLOQUE1');
?>
bloques.htm
Código PHP:
<!-- inicioBloquebloque1 -->
Mi HMTL y {variablessi las necesito ... {TEXTO_BLOQUE_1}
<!-- 
finBloquebloque1 -->

<!-- 
inicioBloquebloque2 -->
Mi HMTL y {variablessi las necesito ... {TEXTO_BLOQUE_2}
<!-- 
finBloquebloque2 --> 
Y tu plantilla "padre" ..
Código PHP:
<!doctype html public "-//W3C//DTD HTML 4.0 //EN">
<
html>
<
head>
       <
title>Title here!</title>
</
head>
<
body>
bla bla
Aquí 
--- > {BLOQUE1} <--- Bloque!
</
body>
</
html
Lo malo que tiene esta forma de trabajar con templates con bloques es que no se puede ver en un editor HTML "visual" cómo quedaría ese bloque ahí en esa posición (por qué el archivo está en otra parte ..)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #13 (permalink)  
Antiguo 18/10/2003, 01:52
 
Fecha de Ingreso: octubre-2003
Mensajes: 13
Antigüedad: 14 años, 1 mes
Puntos: 0
no puedo encontrar a nadie en linea para hacerle una pregunta, como me puedo comunicar con un moderador o alguien que me ayude,bye
  #14 (permalink)  
Antiguo 18/10/2003, 02:29
 
Fecha de Ingreso: junio-2002
Ubicación: Buenos Aires, Argentina
Mensajes: 876
Antigüedad: 15 años, 5 meses
Puntos: 0
Una duda: en ese ejemplo no te esta faltando expandir plantilla?
  #15 (permalink)  
Antiguo 18/10/2003, 02:53
 
Fecha de Ingreso: junio-2002
Ubicación: Buenos Aires, Argentina
Mensajes: 876
Antigüedad: 15 años, 5 meses
Puntos: 0
Otra duda:
Por que me da mas resultados de los que quiero?
Yo deseo que imprima 3 veces el bloque, y lo hace 4 (repite la ultima)

x.htm
Código PHP:
<html>
<
head>
<
title>{titulo}</title>
</
head>
<
body bgcolor="#FFFFFF" text="#000000">
{
loop}
<!-- 
inicioBloquebloque_1 -->
{
texto_bloque_1}
<!-- 
finBloquebloque_1 -->
</
body>
</
html
x.php
Código PHP:
<?php
// Incluision de la Clase.
include ('motor_plantillas/class.NokTemplate.php');
// Instancia del objeto.
// Definicion de la ubicacion de los templates.
$html=new NokTemplate('plantillas');

// Cargamos lss plantillas necesarias y les asignamos una clave
$html->cargar('plantilla_1','x.htm');

// Definicion de bloques en plantilla
$html->definirBloque('bloque_1','plantilla_1');

// Expandimos el contenido de las plantillas con sus variables ya asignadas
// Las dejamos listas para imprimir
for ($i=1;$i<4;$i++)
    {
    
$html->asignar('texto_bloque_1','iteracion '.$i);
    
$html->expandir('loop','+bloque_1');
    }

$html->expandir('FINAL''plantilla_1');

// Y por último imprimimos la varible que contiene todo ya procesado.
$html->imprimir('FINAL');
?>
Esto me da como salida
Código PHP:
<html>
<
head>
<
title></title>
</
head>
<
body bgcolor="#FFFFFF" text="#000000">

iteracion 1

iteracion 2

iteracion 3

<!-- inicioBloquebloque_1 -->
iteracion 3
<!-- finBloquebloque_1 -->
</
body>
</
html
Por que?
Tampoco entiendo por que deja saltos.

Última edición por zeus_bsas; 18/10/2003 a las 02:55
  #16 (permalink)  
Antiguo 18/10/2003, 11:26
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Lo que se te repite una vez más ... es cosa de tu bucle for .. usa menor o igual que .. =< ..

Código PHP:
for ($i=1;$i=<4;$i++) 

Y lo de los saltos .. mm ahora no estoy muy seguro pero tal vez:

Código PHP:
{loop}<!-- inicioBloquebloque_1 -->
{
texto_bloque_1}
<!-- 
finBloquebloque_1 --></body
Lo soluciones ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #17 (permalink)  
Antiguo 18/10/2003, 12:49
 
Fecha de Ingreso: junio-2002
Ubicación: Buenos Aires, Argentina
Mensajes: 876
Antigüedad: 15 años, 5 meses
Puntos: 0
Lcuster, en primer lugar aclaro que no me funciono el =<4 en el for, no me lo acepta, pero si el <=. Igualmente, como era de esperar, no me soluciona nada, ya que a lo sumo hago una iteracion mas por el =. Me sigue repitiendo la ultima iteracion. Pero no entiendo por que el ultimo texto esta dentro de los tag de bloque:
Código PHP:
<html>
<
head>
<
title></title>
</
head>
<
body bgcolor="#FFFFFF" text="#000000">

iteracion 1

iteracion 2

iteracion 3

iteracion 4
<!-- inicioBloquebloque_1 -->
iteracion 4
<!-- finBloquebloque_1 -->
</
body>
</
html
Por otro lado, el pegar el {loop} al inicio del tag como ves no me soluciono el tema de los saltos. Hay algo concreto que esta pasando y no logro entenderlo, si talvez el amigo Nok se diera una vuelta nos podria ayudar.

Otra cosita mas. Por lo de mi primer pregunta, la de imprimir o no un bloque, te parece que seria una perdida de tiempo y que no tendria utilidad para nadie mas que existiera un metodo para decir "este bloque no se imprime"? Por ejemplo se podria hacer que al seleccionarlo, adentro del bloque se agreguen tags de comentario html al principio y al final, de esta forma nada se imprimiria. O directamente borrar el contenido del bloque antes de expandir.
Ya se, soy el unico rompe que lo pide, pero bue, lo comento.
  #18 (permalink)  
Antiguo 18/10/2003, 13:08
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
mm bueno al parecer .. (esto tendría que confirmarlo Nok como creador de NokTemplate) .. si usas tu plantilla "padre" y dentro defines bloques .. estos son "parseados" igualmente e interpretados como código HTML cualquiera .. He de ahí que donde coloques la definición del bloque .. ahí aparecerá.

Sin embargo, si trabajas los bloques en archivos aparte .. ese problema no sucede. (es el ejemplo útimo que te puse donde defino los bloques en un archivo aparte ..)

Esto no se si es un "bug" o simplemente que NokTemaplate no trabaja así los bloques .. En tal caso aquí queda el aviso para que lo vea Nok (u otro usuario más experimentado de NokTemplate) (por mi parte le envié un MP a ver si se puede pasar por aqui Nok ...)

-----

Sobre tu peticiónde "este bloque se imprime o no" .. aquí queda tu petición (y si puedes usa el foro de Noktemplate de su web oficial para hacer las sugerencias . que están desarrollando una versión 2 y están pidiendo ese tipo de sugerencias).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #19 (permalink)  
Antiguo 31/10/2003, 21:54
Avatar de sdf23  
Fecha de Ingreso: diciembre-2002
Mensajes: 297
Antigüedad: 15 años
Puntos: 0
Me parece buena su solicitud, peor lo que nunca me pudieron resolver, como hago para que no se repita el ultimo registro?, acaso noktemplate no soporta esa funcion?
__________________

la vida es bella cuando no es culera
  #20 (permalink)  
Antiguo 31/10/2003, 23:27
 
Fecha de Ingreso: junio-2002
Ubicación: Buenos Aires, Argentina
Mensajes: 876
Antigüedad: 15 años, 5 meses
Puntos: 0
Cita:
Mensaje Original por sdf23
Me parece buena su solicitud, peor lo que nunca me pudieron resolver, como hago para que no se repita el ultimo registro?, acaso noktemplate no soporta esa funcion?
Hola sdf23, si te fijas, es exactamente lo mismo que me pasa a mi.
Despues de tanto esperar decidi programarme mi propio motor y listo, creo que fue la mejor solucion de todas. El codigo es bastante diferente que el de nok, con soporte para bloques en la misma pagina, borrado de bloques (util para condiciones), advertencias de todo tipo si uno las elige mostrar (como por ejemplo asignar un valor a una variable que no existe en la plantilla).
Yo creo que lo mejor es investigar un poquito y hacercelo. No hay nada mejor que tener algo andando bien y saber que es tuyo, un codigo requete entendible para vos, porque lo hiciste vos.
  #21 (permalink)  
Antiguo 31/10/2003, 23:44
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
zeus_bsas

Pues podrías compartirla con la comunidad.

Normalmente eso que comentas son los précios que se pagan por una escasa documentación. (me refiero a NokTemplate).

De todas formas, en estos casos para el que diseñe su própio motor de templates se enfrenta a dos problemas a la hora de hacer el tutorial/manual de uso de su sistema:

1) explicar como funciona la técnica en general de "código" y "plantillas" por separado ..

2) explicar como usar los métodos que tenga la classe (o funciones). Y si hay cosas complejas como por ejemplo "bloques" .. explicarlo con la mayor cantidad de ejemplos.

PD: NokTemplate tiene su método para borrar un bloque:

Borrar:
$html->expandir('ITEMS', '-items_fila');

Añadir:
$html->expandir('ITEMS', '+items_fila');


Si bien se podría tener dos métodos de nombre diferente para "añadir" o "borrar" un bloque .. ahí se usa el + y - ..
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #22 (permalink)  
Antiguo 01/11/2003, 00:37
 
Fecha de Ingreso: junio-2002
Ubicación: Buenos Aires, Argentina
Mensajes: 876
Antigüedad: 15 años, 5 meses
Puntos: 0
Aha, no lo sabia.
Pero bueno, igualmente me lo hice a mi gusto. Tampoco me gustaba tener que iterar y concatenar las "expansiones". Yo lo hice para que directamente, haciendo las verificaciones pertinentes acerca de los parametros, se le pase a un metodo el array o mejor dicho matriz que se usara para repetir un bloque, como tambien tiene la posibilidad de pasarle directamente un recurso $result de mysql.
Mas alla de todo, de que se pueda mejorar y demas, a mi me da gusto usar el mio.
Y por lo de compartirlo no hay problema, pero justamente en este momento pasa lo que comentabas, no tengo tiempo para documentarlo como debiera (Lo hice, lo probe, corregi bugs, hice 1/3 de mi nuevo sitio usando este motor y pare para dar finales de la facu).
Cuando lo tenga supongo que lo pondre. Aunque me da verguenza por lo que puedan decir (por ejemplo, para hacer el analisis del que hable, ese que verificaba la asignacion de variables que existieran en la plantilla, deje de usar expresiones regulares para verificar una por una en el caso de elegirlo)

En fin.
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 01:53.