Foros del Web » Programando para Internet » PHP »

Condicional en template

Estas en el tema de Condicional en template en el foro de PHP en Foros del Web. Hola actualmente tengo esta clasesita que me obtiene templates, y lo hace bien, pero como puedo hacer para poder usar condicionales dentro de los templates, ...
  #1 (permalink)  
Antiguo 15/04/2011, 11:56
 
Fecha de Ingreso: febrero-2005
Mensajes: 626
Antigüedad: 19 años, 2 meses
Puntos: 10
Condicional en template

Hola actualmente tengo esta clasesita que me obtiene templates, y lo hace bien, pero como puedo hacer para poder usar condicionales dentro de los templates, y no me pidan que use smarty, tempatepower u otro, que ya estoy usando esto

Código PHP:
class templating extends db{    
    function 
cache_templates($forzar=FALSE){
        
$db=new db;
        global 
$templates;
        if(!
is_array($templates) or empty($templates) or $forzar==TRUE){
            
$templatessql=$db->select("templates","","","","","","",0);    
            foreach(
$templatessql as $datos){
                
$templates[$datos["nombre"]]=$datos["template"];
                
$templates['tipo'][$datos["nombre"]]=$datos["tipo"];
                
$templates[$datos["id"]]=$datos["template"];
            }
        }
    }
    
    function 
cache_info_templates($forzar=FALSE){
        
$db=new db;
        global 
$templateinfo;
        if(!
is_array($templateinfo) or empty($templateinfo) or $forzar==TRUE){
            
$templatessql=$db->select("info_template","","","","","","",0);    
            foreach(
$templatessql as $datos){
                
$templateinfo[$datos["nombre"]]['titulo']=$datos["titulo"];
                
$templateinfo[$datos["nombre"]]['id_templates']=$datos["id_templates"];
                
$templateinfo[$datos["nombre"]]['imagenes']=$datos["imagenes"];
                
$templateinfo[$datos["nombre"]]['css']=$datos["css"];
                
$templateinfo[$datos["nombre"]]['js']=$datos["js"];
            }
        }
    }
    
    function 
obtener($archivo){
        global 
$templateinfo;
        global 
$variables;
        global 
$info;
        global 
$css;
        global 
$js;
        
$salida="";
        if(empty(
$info['id_templates']["$archivo"])){
            
$this->cache_info_templates(TRUE);    
        }
        
$info['titulo']=$templateinfo["$archivo"]['titulo'];
        
$info['id_templates']=explode(",",$templateinfo["$archivo"]['id_templates']);
        
$info['imagenes']=explode(",",$templateinfo["$archivo"]['imagenes']);
        
$info['css']=$templateinfo["$archivo"]['css'];
        
$info['js']=$templateinfo["$archivo"]['js'];
        if(!empty(
$info['css'])){
            
$css="<LINK REL=\"STYLESHEET\" HREF=\"archivos.wio?e=".$info['css']."&t=CSS\">";            
        }
        if(!empty(
$info['js'])){
     
$js="<SCRIPT  language=\"JavaScript\" type=\"text/javascript\" SRC=\"JS/inventario_prueba.js\"></SCRIPT>";
    
        }
        
$this->imprimir($info["id_templates"]);
    }
    
    
    function 
imprimir($templat){
        global 
$variables;
        global 
$info;
        global 
$css;
        global 
$js;
        
$salida="";
        
$resultado="";
  
        eval(
'$salida = "' addslashes($this->fetch_templates($templat)) . '";');
        echo 
str_replace("\'""'",$salida);
    }
    
    function 
fetch_templates($elementos){
        
$salida="";

        global 
$templates;
        if(empty(
$templates["$elementos"])){
            
$this->cache_templates(TRUE);    
        }
        if(
is_array($elementos)){
            foreach(
$elementos as $archivo){
                
$salida.=$templates["$archivo"];
            }
        }else{
            
$salida=$templates["$elementos"];
        }
    return 
$salida;
    }

  #2 (permalink)  
Antiguo 15/04/2011, 17:18
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Condicional en template

Sorry, pero en realidad no entiendo bien como funciona tu sistema de plantillas, tienes varios errores de diseño:

1- La clase extiende desde db y no veo que relacion pueda tener una clase de acceso a base de datos (mejor asociadas con modelos y tal vez controladores) con plantillas (asociadas principalmente a vistas y, bueno, tal vez tambien a controladores).

2- En varias funciones generas una nueva instancia de db y no tiene caso, principalmente porque no veo la relacion entre ambas clases y, ademas, tampoco veo que ejecutes consultas, aunque posiblemente las omitiste para mostrarnos lo que tienes (sorry, ya lo vi).

Si realmente es necesario generar consultas a base de datos, crea una variable privada que contenga la instancia a la base de datos y la envias al momento de instanciar templates:

Código PHP:
Ver original
  1. $db = new db();
  2. $template = new templating($db);
  3.  
  4. // Luego, en templating:
  5. class templating {
  6.     private $db; // Por notacion, seria mejor nombrarla $_db (por ser privada)
  7.     public function __construct($db) {
  8.         $this->db = $db;  // Ya tienes una sola instancia para usarla cuando la necesites
  9.     }
  10.     public function cualquierFuncion() {
  11.         $this->db->select("bla bla bla");
  12.     }
  13. }

3. Yo tambien estoy iniciandome con POO y cometia el mismo error que tu de usar global $variable;

Hay cosas que pueden guardarse como variables de la misma clase (publicas o privadas), otras que tal vez sean mas conveniente definir como constantes y, las mas minimas, seran pasadas como argumento de caa metodo. Esto ayuda a hacer mas legible el codigo y a saber siempre en que ambito esta disponible cada cosa.

4. Generalmente los sistemas de plantillas funcionan mediante archivos de texto y no registros en la base de datos. Imagino que si el sitio llega a tener gran cantidad de visitantes, podria haber sobre carga del servidor de bases de datos y algun mensaje del tipo "too many connections" o similar.

Bueno, despues de todas mis divagaciones, una pregunta:

Podrias mostrar un ejemplo de como se conforma una de tus plantillas?, porque viendo solo el PHP hay pocas probabilidades de sugerir alguna estrategia para incluir IF's
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 15/04/2011, 20:58
 
Fecha de Ingreso: febrero-2005
Mensajes: 626
Antigüedad: 19 años, 2 meses
Puntos: 10
Respuesta: Condicional en template

Hola

Muchas gracias, te agradesco, implementare lo que me comentas

Bueno, el template es este:

Donde dice [IF $admin==TRUE] ahi utilizare una condicional, si el usuario tiene privilegios el usuario al hacer doble click podra editar el contenido del span, actualmente me funciona perfectamente, pero no estoy usando esta condicional por lo que cualquier usuario puede editar el contenido, sin importar si tiene privilegios o no


No se que logica seguir en PHP para poner las condicionales


Código HTML:
Ver original
  1. <tr class="renglon$variables[i]"><td id="cantidad,$variables[id]">
  2.  
  3. [IF $admin==TRUE]
  4. <span ondblclick="actualizar('$variables[cantidad]','0','cantidad,$variables[id]','cantidad');">
  5. [/IF]
  6.  
  7. $variables[cantidad]
  8.  
  9. [IF $admin==TRUE]
  10. </span>
  11. [/IF]
  12.  
  13. </td><td id="nombre,$variables[id]">
  14.  
  15. [IF $admin==TRUE]
  16. <span ondblclick="actualizar('$variables[nombre]','0','nombre,$variables[id]','nombre');">
  17. [/IF]
  18.  
  19. $variables[nombre]
  20.  
  21. [IF $admin==TRUE]
  22. </span>
  23. [/IF]
  24.  
  25. </td><td>$variables[precioventa]</td><td>
  26.  
  27. [IF $admin==TRUE]
  28. <a onclick="return confirmLink(this, '$variables[nombre]','$variables[id]','$variables[especial]','$variables[recargar]');">
  29. <img src=IMA/delete.png /></a>
  30. [/IF]
  31.  
  32. </td></tr>

Este solo es un renglon, y necesito meterlo dentro de un ciclo, para hacer una tabla
  #4 (permalink)  
Antiguo 16/04/2011, 12:24
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Condicional en template

Tendrias que usar expresiones regulares, no veo otra forma, habra que preguntarle a los expertos en el tema.
__________________
- León, Guanajuato
- GV-Foto
  #5 (permalink)  
Antiguo 16/04/2011, 14:23
 
Fecha de Ingreso: febrero-2005
Mensajes: 626
Antigüedad: 19 años, 2 meses
Puntos: 10
Respuesta: Condicional en template

Y para hacer la tabla, como se te hace mejor, obtener el template y hacer un prepared statement? o alguna de las otras opciones que te comente en el otro post

Etiquetas: condicional, template
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 11:18.