Foros del Web » Programando para Internet » PHP »

includes en template.php

Estas en el tema de includes en template.php en el foro de PHP en Foros del Web. Buenos dias, estoy un poco desorientado, tengo un archivo template.php el cual uso para poder separar codigo php de html y poder trabajarlos por separado, ...
  #1 (permalink)  
Antiguo 19/08/2010, 06:31
 
Fecha de Ingreso: julio-2009
Ubicación: Argentina!
Mensajes: 324
Antigüedad: 14 años, 8 meses
Puntos: 4
includes en template.php

Buenos dias, estoy un poco desorientado, tengo un archivo template.php el cual uso para poder separar codigo php de html y poder trabajarlos por separado, mi problema es a la hora de hacer un include o require, ya que este se solapa con mi pagina principal, les muestro un ejemplo:

index.php
Código PHP:
include_once("template.php");//incluyo el template
set_file("index","index.html");//seteo la pagina
$menu=include_once("menu.php");
set_var("menu",$menu);
pparse("todo");//muestro el contenido 
index.html
Código HTML:
<!-- BEGIN todo --> //En este punto inicio el bloque
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin t&iacute;tulo</title>
<link href="css/css.css" rel="stylesheet" type="text/css" />
</head>

<body>
<div id="contenedor">
<div id="header">
Nombre o Logo Empresa<br />
{menu}//lo que esta encerrado entre llaves es lo que seto anteriormente con set_var
</div>
</div>
</body>
</html>
<!-- END todo -->//Aca lo cierro
y me da como resultado:

Código HTML:
MENUUUUU
Nombre o Logo Empresa 
1
ya probe de mil maneras distintas, a veces me muestra tan solo lo que esta en el menu.php y otras no muestra nada.

les dejo el codigo de template.php
Código PHP:
<?php

// * FUNCION:                                                                                                 *
// *         ESTE MODULO PERMITE ACCEDER A LAS PLANTILLAS POR MEDIO DEL PHP                                   *
// *                                                                                                          *
// *  en el script se debe hacer include("template.php3");                                                    *
// *  tenemos 4 funciones basicas;                                                                            *
// *                                                                                                          *
// * --set_file($nombrepagina,$path);                                                                         *
// *                                                                                                          *
// *   con esto busca el archivo /templates/."$path"                                                          *
// *   y ahora en mas lo referenciamos con el nombre $nombrepagina                                            *
// *                                                                                                          *
// * --set_var($var,$value)                                                                                   *
// *                                                                                                          *
// *   esta funcion sirve para cambiar  lo que pusimos en la plantilla entre llaves {var} por valor           *
// *   pero esta variable debe estar dentro de un bloque en la plantilla o sea dentro de                      *
// *   <!-- BEGIN nombrebloque -->                                                                            *
// *   <!-- END nombrebloque -->                                                                              *
// *                                                                                                          *
// * --parse(nombrebloque,nombrebloque,true o false)                                                          *
// *                                                                                                          *
// *    anexas a la plantilla un bloque pero con los datos pasados en set_var()                               *
// *   se puede ejecutar muchas veces para hacer un listado por ejemplo.                                      *
// *                                                                                                          *
// * --pparse($nombredepagina)                                                                                *
// *                                                                                                          *
// *   basicamente termina de imprimir el template pero con todos los bloques y variables cambiados.          *
// *                                                                                                          *
// *  Este software esta bajo la licencia GPL.                                                                *
// *  *
// ************************************************************************************************************
//
// Fecha=04-05-2001


if(defined("TEMPLATE")) return;
define("TEMPLATE"1);

   
$classname "Template";
   
$root "./templates/";
   
$blocks = array();
   
$vars = array();
   
$unknowns "keep";  // "remove" | "comment" | "keep"
   
$halt_on_error "yes";   // "yes" | "report" | "no"


    
function set_file($name$filename) {
          
extract_blocks($nameload_file($filename));
       }



    function 
set_var($var$value) {
       global 
$vars;
         
$vars["/\{$var}/"] = $value;
    }

    
/*
     * string parse(string $target, [string $block], [bool $append]);
     * Procesa el bloque especificado por $block y almacena el resultado en
     * $target. Si $block no se ha especificado se asume igual a $target.
     * $append especifica si se debe a�dir o sobreescribir la variable
     * $target(sobreescribir por defecto).
     */
    
function parse($target$block ""$append true) {
       global 
$blocks,$vars,$unknowns,$regs;
        if(
$block == "") {
            
$block $target;
        }
        
        if(isset(
$blocks["/\{$block}/"])) {
            if(
$append) {
                
$vars["/\{$target}/"] .= @preg_replace(array_keys($vars), array_values($vars), $blocks["/\{$block}/"]);
                if(
$vars["/\{$target}/"]{0}=="\\"){
                   
$vars["/\{$target}/"]=str_replace("\\","",$vars["/\{$target}/"]);
                }
            } else {
                
$vars["/\{$target}/"] = @preg_replace(array_keys($vars), array_values($vars), $blocks["/\{$block}/"]);
                if(
$vars["/\{$target}/"]{0}=="\\"){
                    
$vars["/\{$target}/"]=str_replace("\\","",$vars["/\{$target}/"]);
                }
            }
            switch(
$unknowns) {
                case 
"keep":
                break;

                case 
"comment":
                
$vars["/\{$target}/"] = preg_replace('/{(.+)}/'"<!-- UNDEF: \\1 -->"$vars["/\{$target}/"]);
                break;

                case 
"remove":
                default:
                
$vars["/\{$target}/"] = preg_replace('/{\w+}/'""$vars["/\{$target}/"]);
                break;
            }
        } else {
            
halt("parse: No existe ningun bloque llamado \"$block\"." serialize($blocks));
        }
        return 
$vars["/\{$target}/"];
    }


    function 
pparse($target$block=""$append false) {
        return print(
str_replace("\\","",parse($target$block$append)));
    }

    function 
gparse($target$block=""$append false) {
        return (
str_replace("\\","",parse($target$block$append)));
    }

    function 
p($block) {
       global 
$vars;
        return print(
$vars[$block]);
    }


    function 
get_vars() {
       global 
$vars;
        
reset($vars);
        while(list(
$k,$v) = each($vars)) {
            
preg_match('/^{(.+)}$/'$k$regs);
            
$vars[$regs[1]] = $v;
        }
        return 
$vars;
    }


    function 
get_var($varname) {
       global 
$vars;

            return 
$vars["/\{$varname}/"];

    }


    function 
get($varname) {
       global 
$vars;
        return 
$vars["/\{$varname}/"];
    }



    function 
load_file($filename) {
       global 
$root;
        if((
$fh fopen("$root/$filename""r"))) {
            
$file_content fread($fhfilesize("$root/$filename"));
            
fclose($fh);
        } else {
            
halt("load_file: No se puede abrir $root/$filename.");
        }
        return 
$file_content;
    }


    function 
extract_blocks($name$block) {
       global 
$blocks,$regs;
        
$level 0;
        
$current_block $name;
        
$blocksa explode("<!-- "$block);
        if(list(, 
$block) = @each($blocksa)) {
            
$blocks["/\{$current_block}/"] = $block;
            while(list(, 
$block) = @each($blocksa)) {
                
preg_match('/^(BEGIN|END) (\w+) -->(.*)$/s'$block$regs);
                switch(
$regs[1]) {
                    case 
"BEGIN":

                        
$blocks["/\{$current_block}/"] .= "\{$regs[2]}";


                    
$block_names[$level++] = $current_block;
                    
$current_block $regs[2];
                    
$blocks["/\{$current_block}/"] = $regs[3];
                    break;

                    case 
"END":
                    
$current_block $block_names[--$level];
                    
$blocks["/\{$current_block}/"] .= $regs[3];
                    break;

                    default:
                    
$blocks["/\{$current_block}/"] .= "<!-- $block";
                    break;
                }
                unset(
$regs);
            }
        } else {
            
$blocks["/\{$current_block}/"] .= $block;
        }
    }
    function 
halt($msg) {
      global 
$halt_on_error,$last_error;
        
$last_error $msg;
        if (
$halt_on_error != "no")
            
haltmsg($msg);
        if (
$halt_on_error == "yes")
            die(
"<b>Halted.</b>\n");
        return 
false;
    }
    function 
haltmsg($msg) {
       print(
"<b>Template Error:</b> $msg<br>\n");
    }
?>
espero que alguien sepa como se soluciona!

Muchas gracias.
  #2 (permalink)  
Antiguo 19/08/2010, 07:49
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: includes en template.php

deberías leer el manual, ya que las instrucciones include/requiere no devuelven el contenido donde se llaman... sino que incluyen su contenido en el contexto global y ese es tu problema...

¿solución?
lee el manual, y estudia acerca de buffers... o tal ves, no necesites usar include/require sino file_get_contents(), etc...

depende de lo que necesitas, y de lo que eres capaz de hacer no mas...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 19/08/2010, 07:57
 
Fecha de Ingreso: julio-2009
Ubicación: Argentina!
Mensajes: 324
Antigüedad: 14 años, 8 meses
Puntos: 4
Respuesta: includes en template.php

Muchas gracias!! la verdad es que no estaba muy enterado sobre este tema dentro de los templates!!

Te agradezco

una cosa mas: ahora lo que veo de otra forma, los includes/require/_once deberian ser utilizados para conexiones a bd, incluir archivos de funciones y demas? ahora voy a leer sobre esto.

Agradezco nuevamente tu respuesta!
  #4 (permalink)  
Antiguo 20/08/2010, 06:18
 
Fecha de Ingreso: julio-2009
Ubicación: Argentina!
Mensajes: 324
Antigüedad: 14 años, 8 meses
Puntos: 4
Respuesta: includes en template.php

bueno lei un poco y encontre un trhead de abimaelrc muy bueno, pero entendi poco :S

Se muestra lo que quiero, pero no me hace caso al css incluido en el index.html

para que se entienda mejor:

Index.php
Código PHP:
Ver original
  1. <?php
  2. include_once("template.php");
  3. set_file("index","index.html");
  4. $menu = file_get_contents('http://localhost/inmo/inmo/templates/menu.html');
  5. set_var("menu",$menu);
  6. pparse("todo");
  7. ?>

Index.html
Código HTML:
Ver original
  1. <!-- BEGIN todo -->
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  3. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  4. <link href="../css/css.css" rel="stylesheet" type="text/css">
  5. </head>
  6.  
  7. <div id="contenedor">
  8. <div id="header">
  9. cabecera<br>
  10. </div>
  11. {menu}
  12. </div>
  13. </body>
  14. </html>
  15. <!-- END todo -->

Menu.php
Código PHP:
Ver original
  1. <?php
  2. include_once("template.php");
  3. set_file("menu","menu.html");
  4. pparse("todo");
  5. ?>

Menu.Html
Código HTML:
Ver original
  1. <!-- BEGIN todo -->
  2. Menu1 | Menu2 | Menu3 | Menu4
  3. <!-- END todo -->


Css.css
Código CSS:
Ver original
  1. body {
  2.     background: url(../imagenes/header_bg.jpg) repeat-x;
  3.     text-align: center;
  4.     margin: 0;
  5.     padding: 0;
  6.     list-style: none;
  7. }
  8.  
  9. #contenedor {
  10.     text-align: left;
  11.     margin: auto;
  12.     width: 774px;
  13. }
  14.  
  15.  
  16. #header{
  17. text-align:left;
  18. padding-top:60px;
  19. color:#FFFFFF;
  20. font-size:25px;
  21. font-weight:bold;
  22. text-transform:capitalize;
  23. }

Última edición por kadas99; 20/08/2010 a las 06:29
  #5 (permalink)  
Antiguo 20/08/2010, 16:12
 
Fecha de Ingreso: julio-2009
Ubicación: Argentina!
Mensajes: 324
Antigüedad: 14 años, 8 meses
Puntos: 4
Respuesta: includes en template.php

A fin de cuentas no encuentro una buena forma de incluir un menu en una pagina con template.

Sobre todo me interesa esto por el hecho de que no quiero copiar y pegar el codigo del menu en cada pagina!

Ademas, si quiero realizar un cambio eso implicaria cambiarlo en cada pagina en la que aparezca el menu y eso es en todas jaja!

y no veo otra forma de manejar el hecho de las instancias de los botones, cuando estas en la pagina que seleccionas el boton deberia ser de otro color y los demas botones en el estado inicial.

la verdad estoy desconcertado!

Etiquetas: includes
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 04:16.