Foros del Web » Programando para Internet » PHP »

Bloques en el template de Nok

Estas en el tema de Bloques en el template de Nok en el foro de PHP en Foros del Web. Hola gente, tengo una consulta para hacerles: Yo estoy usando el motor de templates de Nok que está muy bueo y me encontré con algo ...
  #1 (permalink)  
Antiguo 17/09/2003, 02:56
 
Fecha de Ingreso: mayo-2003
Ubicación: Buenos Aires
Mensajes: 97
Antigüedad: 14 años, 6 meses
Puntos: 0
Bloques en el template de Nok

Hola gente, tengo una consulta para hacerles:

Yo estoy usando el motor de templates de Nok que está muy bueo y me encontré con algo que no le encuentro la vuelta.

No se si es correcto como lo uso para generar tablas o selects.

Lo hago todo dentro del mismo template, o sea no defino un bloque fuera como en el tutorial que da Nok.

Por ejemplo, si hago una tabla que genere N filas hago un bloque en donde corresponde a la tabla y desde el php hago un for 1 a 3.

El problema es que siempre el último se repite cuando se imprime.

Por ejemplo, si uso un select con 3 elementos: Pedro, Juan y Jose me queda visualizado:

Pedro
Juan
Jose
Jose

Me di cuenta que esto pasa porque cuando el for llega a su última vuelta ejecuta el método expandir de la clase de nok y por eso repite una vez el último elemento del select, lo saqué a ese último expandir y funcionó pero obviamente no es lo que quiero pq no puedo sacar ese método del for.


Este es el html (no les puse las tags html y eso para no aburrir)

<select name="juego">
{FILAS}
<!-- inicioBloque: opcion -->
<option>{op}</option>
<!-- finBloque: opcion -->
</select>


Este es el php en donde uso el array del ejemplo de la pagina de nok

Código PHP:
include('Class.NokTemplate.php');  
$html= new NokTemplate('.');
$html->cargar('tplTabla','defbloques.html');
$html->definirBloque('opcion''tplTabla');   
$html->asignar('titulo','Ejemplo número 3');
$datos = array('Jose' => 'Perez',      'Carlos' => 'Gonzales',      'Anibal' => 'Hugo');     
$html->asignar('FILAS','');
foreach (
$datos as $nombre ) {    
    
$html->asignar('op'$nombre);  
    
$html->expandir('FILAS''+opcion');  //si esto se lo saco para la última vuelta del for anda bien, sino me repite el último elemento
}
$html->expandir('FINAL''tplTabla');  
$html->imprimir('FINAL'); 
La pregunta es: es posible hacer lo que quiero yo? o si o si hay que hacer el html con los bloques aparte??

Gracias!!
  #2 (permalink)  
Antiguo 17/09/2003, 09:21
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 16 años, 1 mes
Puntos: 68
Si Nok no se diera una vuelta por el foro , te recomiendo que hagas la misma pregunta en el Foro de Soporte de las NokTemplates, que lo encontrás en :

http://www.jpw.com.ar/index.php?lugar=foro

SAludos.
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
  #3 (permalink)  
Antiguo 17/09/2003, 11:50
Nok
 
Fecha de Ingreso: abril-2001
Mensajes: 302
Antigüedad: 16 años, 7 meses
Puntos: 0
Hola Antigol... aqui te dejo un enlace a una discusion donde se plantea tu problema y la solucion.

http://www.forosdelweb.com/showthrea...hreadid=131139

Saludos
Nok
__________________
La casa de Noktemplate.
Zonaphp.com - Php en español.

¿Que esperas de NokTpl 2? Deja tu comentario.

Blog
Mas o menos asi .
  #4 (permalink)  
Antiguo 18/09/2003, 22:01
 
Fecha de Ingreso: mayo-2003
Ubicación: Buenos Aires
Mensajes: 97
Antigüedad: 14 años, 6 meses
Puntos: 0
Gracias webstudio y nok por responder!! ya lo arreglé con el link que me mandaste.

Ahora tengo otra pregunta:

Yo estoy haciendo un foro y estoy haciendo la página principal que tiene que salir asi:

Categoria 1
Foro 1
Foro 2
Categoria 2
Foro 3

Algo asi. Yo hice una consulta que me tira los datos asi

id_foro nombre id_categoria
1 Futbol 1
2 Basket 1
3 Software 2

Me tira 3 registros con su respectiva categoria por lo que hago un while mysql fetch array para que de las 3 vueltas.

Dentro de ese while tengo dos IF

Uno detecta si la categoria fue escrita, si no fue escrita la escribe poniendo

Categoria 1

Después pasa al segundo IF donde tiene que escribir el primer foro de esa categoria. Da la vuelta y como la categoria ya fue escrita y el segundo foro pertenece a esa categoria entonces no entra en el IF y pasa al segundo, al de los foros y lo escribe.

Esa es la lógica que uso, sin templates anda perfecto, sin problemas.

El problema es que no le encuentro la vuelta a la lógica a utilizar con templates.


Código PHP:
 while($recordset=mysql_fetch_array($conectar->consultar))  {
         if (
$recordset["id_categoria"]!=$categoria) {
             
$html->asignar('TITULO_CAT',$recordset['titulo_cat']);
             
$categoria=$recordset["id_categoria"];
             
$html->expandir('FILAS_CAT','+categoria');
         } 
         if (
$recordset["id_categoria"]==$categoria) {
             
          
$html->asignar('TITULO_FORO',$recordset["titulo_foro"]);
          
$html->asignar('DESCRIPCION_FORO',$recordset["descripcion_f"]);
          
$html->asignar('CANT_TOPICS',$cant_t);
          
$html->asignar('CANT_POST',$cant_p);
          
$html->asignar('NICK',$recordset["nick_u"]);
          
$html->asignar('ID_USUARIO',$recordset["id_usuario"]);
          
$html->asignar('FECHAHORA',$recordset["fechahora_p"]);
          
$html->asignar('GRAFICO','');
          
$html->asignar('LINKFORO','');
          
$html->expandir('FILAS_FORO','+foro');
          
          
          }
    }
$html->expandir('contenido''categoria');      
$html->imprimir('contenido'); 

En el html tengo algo asi

Código PHP:
 {FILAS_CAT}
<!-- 
inicioBloquecategoria -->

<
tabla>
VARIABLES
</tabla>

{
FILAS_FORO}
<!-- 
inicioBloqueforo -->
<
tabla>
Variables
</tabla>
<!-- 
finBloqueforo -->
<!-- 
finBloquecategoria --> 
El problema es que me escribe las dos categorias, pero los 3 foros los escribe todos debajo de la última.

Quiero aclarar de nuevo que sin usar templates anda bien (como para dejar atrás dudas si anda bien o mal el código php) el problema es que no se si entendí bien la lógica de como trabaja el template.

Saludos

Última edición por Antigol; 18/09/2003 a las 22:26
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 06:24.