Foros del Web » Programando para Internet » PHP »

Tpl y php

Estas en el tema de Tpl y php en el foro de PHP en Foros del Web. Tengo un archivo php llamado index.php en el que esta este codigo @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original <?php include ( "../config/config.php" ) ; ?> ...
  #1 (permalink)  
Antiguo 10/12/2012, 13:46
 
Fecha de Ingreso: diciembre-2012
Mensajes: 223
Antigüedad: 11 años, 11 meses
Puntos: 2
Tpl y php

Tengo un archivo php llamado index.php en el que esta este codigo
Código PHP:
Ver original
  1. <?php
  2. include("../config/config.php");
  3. ?>
  4. <?php
  5. function template($ruta,$array)
  6. {
  7.     /* Tomamos el archivo */
  8.     $template = file_get_contents("$ruta");
  9.     /* Reemplazamos el contenido entre corchetes por la etiqueta PHP */
  10.     foreach ($array as $a => $b) {
  11.         $template = str_replace("{".$a."}", "$b", $template);
  12.     }
  13.     /* Mostramos el template con los cambios realizados */
  14.     echo eval("?".">$template");    
  15. }
  16. /* Establecemos las variables */
  17. $ruta = "test.tpl";
  18. $array = array(
  19.     "si" => "no",
  20.     "variable" => "m"
  21. );
  22. /* Llamamos a la función */
  23. template($ruta,$array);
  24. ?>

Y otra llamado test.tpl en el que tengo
Código PHP:
Ver original
  1. Hola {variable} ¿Como {si}?

Pero quiero que el Hola {variable} ¿Como {si}? este guardado en la base de dato y hacer una consulta y mostrarlo.

Yo hago la consulta pero cuando lo ejecuto en vez de salirme las variable {variable} y {si} Sustituidas osea (Hola m ¿Como no?) pues me sale sin sustituir osea (Hola {variable} ¿Como {si}?)

¿Como haria para que se sustituyera? la consulta se hacerla.
  #2 (permalink)  
Antiguo 10/12/2012, 14:56
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años, 6 meses
Puntos: 839
Respuesta: Tpl y php

Muéstranos cómo tienes hecho ya con la consulta, así podremos ver qué falla.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 10/12/2012, 15:02
 
Fecha de Ingreso: diciembre-2012
Mensajes: 223
Antigüedad: 11 años, 11 meses
Puntos: 2
Respuesta: Tpl y php

En el archivo test.tpl tendria:
Código PHP:
Ver original
  1. <?php
  2. $web = mysqli_query($conectar, "SELECT Codigo FROM Diseno WHERE Dominio = 'Mi dominio'");
  3. if($web1 = mysqli_fetch_array($web)){
  4. echo $web1['Codigo'];
  5. }
  6. ?>

En el campo de la base de dato tengo:
Código PHP:
Ver original
  1. Hola {variable} ¿Como {si}?

El resultado es:
Código PHP:
Ver original
  1. Hola {variable} ¿Como {si}?
Y yo quiero que lo sustituya siendo:
Código PHP:
Ver original
  1. Hola am ¿Como no?
  #4 (permalink)  
Antiguo 10/12/2012, 15:19
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años, 6 meses
Puntos: 839
Respuesta: Tpl y php

No estás llamando a tu función template() a la hora de imprimir el valor de la variable.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #5 (permalink)  
Antiguo 10/12/2012, 15:21
 
Fecha de Ingreso: diciembre-2012
Mensajes: 223
Antigüedad: 11 años, 11 meses
Puntos: 2
Respuesta: Tpl y php

que seria echo template($web1['Codigo']); ?¿?¿

si es asin me da error
Código PHP:
Ver original
  1. Warning: Missing argument 2 for template(), called in /home/xdxdx157/public_html/cms/diseno/a.php(11) : eval()'d code on line 7 and defined in /home/xdxdx157/public_html/cms/diseno/a.php on line 2
  2.  
  3. Warning: file_get_contents({si}) [function.file-get-contents]: failed to open stream: No such file or directory in /home/xdxdx157/public_html/cms/diseno/a.php on line 5
  4.  
  5. Warning: Invalid argument supplied for foreach() in /home/xdxdx157/public_html/cms/diseno/a.php on line 7
  6.  
  7. Warning: Missing argument 2 for template(), called in /home/xdxdx157/public_html/cms/diseno/a.php(11) : eval()'d code on line 9 and defined in /home/xdxdx157/public_html/cms/diseno/a.php on line 2
  #6 (permalink)  
Antiguo 10/12/2012, 15:30
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años, 6 meses
Puntos: 839
Respuesta: Tpl y php

No le estás pasando a la función el array con los reemplazos.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #7 (permalink)  
Antiguo 10/12/2012, 15:42
 
Fecha de Ingreso: diciembre-2012
Mensajes: 223
Antigüedad: 11 años, 11 meses
Puntos: 2
Respuesta: Tpl y php

Y como seria?
  #8 (permalink)  
Antiguo 10/12/2012, 15:56
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años, 6 meses
Puntos: 839
Respuesta: Tpl y php

En el primer ejemplo que pusiste:
template($ruta, $array);
http://php.net/manual/es/functions.arguments.php
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #9 (permalink)  
Antiguo 10/12/2012, 15:59
 
Fecha de Ingreso: diciembre-2012
Mensajes: 223
Antigüedad: 11 años, 11 meses
Puntos: 2
Respuesta: Tpl y php

yo tambien he probado con template($ruta, $web1['Codigo']); y nada
  #10 (permalink)  
Antiguo 10/12/2012, 16:07
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años, 6 meses
Puntos: 839
Respuesta: Tpl y php

En primer lugar, tu función template en lugar de pedir una ruta tiene que pedir la cadena a modificar:
Código PHP:
Ver original
  1. function template($template, $array)
Luego, borra la línea que lee el archivo. Esta:
Código PHP:
Ver original
  1. $template = file_get_contents("$ruta");
Finalmente, llamas a la función:
Código PHP:
Ver original
  1. echo template('cadena que quieres modificar', array con los diferentes reemplazos);
Trata de leer el código. Si alguna parte no entiendes, consulta el manual. Debes tomarte el tiempo para investigar también.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #11 (permalink)  
Antiguo 10/12/2012, 16:13
 
Fecha de Ingreso: diciembre-2012
Mensajes: 223
Antigüedad: 11 años, 11 meses
Puntos: 2
Respuesta: Tpl y php

echo template('cadena que quieres modificar', array con los diferentes reemplazos);
Eso no lo he entendido pero lo de ruta lo tengo que dejar para incluir el archivo test.tpl que es donde esta lo de la base de dato.

Siempre me sale Cannot redeclare template() (previously declared y la consulta esta en la pagina test.tpl
  #12 (permalink)  
Antiguo 10/12/2012, 16:17
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años, 6 meses
Puntos: 839
Respuesta: Tpl y php

No te había entendido.

El eval() debería ir antes de hacer el reemplazo.

Y, tendrás que usar las funciones de control de salida para capturar lo que se imprime en ese archivo para luego realizar el reemplazo.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #13 (permalink)  
Antiguo 10/12/2012, 16:19
 
Fecha de Ingreso: diciembre-2012
Mensajes: 223
Antigüedad: 11 años, 11 meses
Puntos: 2
Respuesta: Tpl y php

¿que funcion de control de salida utilizo?
Pero lo raro que en el test.tpl si pongo solo {si} si lo sustituye

echo template('cadena que quieres modificar', array con los diferentes reemplazos);
Eso no lo he entendido pero lo de ruta lo tengo que dejar para incluir el archivo test.tpl que es donde esta lo de la base de dato.

Siempre me sale Cannot redeclare template() (previously declared y la consulta esta en la pagina test.tpl

a.php
Código PHP:
Ver original
  1. <?php
  2. function template($ruta,$array)
  3. {
  4.     /* Tomamos el archivo */
  5.     $template = file_get_contents($ruta);
  6.     /* Mostramos el template con los cambios realizados */
  7.     echo eval("?".">$template");  
  8.     /* Reemplazamos el contenido entre corchetes por la etiqueta PHP */
  9.     foreach ($array as $a => $b) {
  10.         $template = str_replace("{".$a."}", "$b", $template);
  11.     }
  12. }
  13. /* Establecemos las variables */
  14. $ruta = "test.tpl";
  15. $array = array(
  16.     "si" => "no",
  17.     "variable" => "m"
  18. );
  19. /* Llamamos a la funci贸n */
  20. template($ruta,$array);
  21. ?>

test.tpl
Código PHP:
Ver original
  1. <?php
  2. include("../config/config.php");
  3. ?>
  4. <?php
  5. include("a.php");
  6. $web = mysqli_query($conectar, "SELECT Codigo FROM Diseno WHERE Dominio = 'Mi Dominio'");
  7. if($web1 = mysqli_fetch_array($web)){
  8. echo template($web1['Codigo'],{si});
  9. }
  10. ?>
  #14 (permalink)  
Antiguo 10/12/2012, 16:28
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años, 6 meses
Puntos: 839
Respuesta: Tpl y php

En este caso no necesitas llamar a template() dentro del .tpl, como dije, es que te había entendido mal.

Con lo de capturar la salida me refería a esto:
Código PHP:
Ver original
  1. eval(...);
  2. $template = ob_get_contents();
  3.  
  4. // Aquí procesas los reemplazos en $template
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #15 (permalink)  
Antiguo 10/12/2012, 16:32
 
Fecha de Ingreso: diciembre-2012
Mensajes: 223
Antigüedad: 11 años, 11 meses
Puntos: 2
Respuesta: Tpl y php

Hacin?
Código PHP:
Ver original
  1. <?php
  2. $web = mysqli_query($conectar, "SELECT Codigo FROM Diseno WHERE Dominio = 'Mi Dominio'");
  3. if($web1 = mysqli_fetch_array($web)){
  4. eval($web1['Codigo']);
  5. $template = ob_get_contents();
  6. }
  7. ?>

Lo tengo que añadir en el primero o en el segundo archivo?
  #16 (permalink)  
Antiguo 10/12/2012, 16:34
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años, 6 meses
Puntos: 839
Respuesta: Tpl y php

Dentro de tu función, no allí. Y el eval es la misma línea que ya tienes.

Como te mencioné antes, en lugar de copiar directamente; primero analiza el código, lee, revisa la documentación, trata de entender cómo funciona, y después implementa. Tómate tu tiempo. Será más fácil intentar ayudarte si colaboras de esa manera.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #17 (permalink)  
Antiguo 10/12/2012, 16:38
 
Fecha de Ingreso: diciembre-2012
Mensajes: 223
Antigüedad: 11 años, 11 meses
Puntos: 2
Respuesta: Tpl y php

Código PHP:
Ver original
  1. function template($ruta,$array)
  2. {
  3.     /* Tomamos el archivo */
  4.     $template = file_get_contents("$ruta");
  5.  
  6.     /* Mostramos el template con los cambios realizados */
  7.     ob_start();
  8.     echo eval("?".">$template");    
  9.     $template = ob_get_contents();
  10.     ob_end_clean();
  11.  
  12.     /* Reemplazamos el contenido entre corchetes por la etiqueta PHP */
  13.     foreach ($array as $a => $b) {
  14.         $template = str_replace("{".$a."}", "$b", $template);
  15.     }
  16. }
Hacin? esque es para un user y este para mi es nuevo, ya cuando lo consiga intentare aprenderlo

PD: ahora la pagian esta en blanco y no muestra nada
  #18 (permalink)  
Antiguo 10/12/2012, 16:54
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años, 6 meses
Puntos: 839
Respuesta: Tpl y php

Tienes que devolver ese valor usando return:
Código PHP:
Ver original
  1. return $template;
Y finalmente imprimir el resultado de llamar a la función.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #19 (permalink)  
Antiguo 10/12/2012, 17:01
 
Fecha de Ingreso: diciembre-2012
Mensajes: 223
Antigüedad: 11 años, 11 meses
Puntos: 2
Respuesta: Tpl y php

echo template($web1['Codigo']); hacin lo imprimo?

El archivo me a quedado
Código PHP:
Ver original
  1. <?php
  2. function template($ruta,$array)
  3. {
  4.     /* Tomamos el archivo */
  5.     $template = file_get_contents("$ruta");
  6.  
  7.     /* Mostramos el template con los cambios realizados */
  8.     ob_start();
  9.     echo eval("?".">$template");    
  10.     $template = ob_get_contents();
  11.     ob_end_clean();
  12.  
  13.     /* Reemplazamos el contenido entre corchetes por la etiqueta PHP */
  14.     foreach ($array as $a => $b) {
  15.         $template = str_replace("{".$a."}", "$b", $template);
  16.     }
  17.     return $template;
  18. echo template($web1['Codigo']);
  19. }
  20. /* Establecemos las variables */
  21. $ruta = "test.tpl";
  22. $array = array(
  23.     "si" => "no",
  24.     "variable" => "m"
  25. );
  26. /* Llamamos a la funci贸n */
  27. template($ruta,$array);
  28. ?>

Y al ejecutarlo sale todo blanco.
  #20 (permalink)  
Antiguo 10/12/2012, 23:26
Avatar de web2013  
Fecha de Ingreso: diciembre-2012
Ubicación: Peru
Mensajes: 19
Antigüedad: 11 años, 11 meses
Puntos: 2
Respuesta: Tpl y php

Hola XD2XD2

Lo mejor es que en el template tengas solamente un valor que seria el resultado:
1) test.tpl: {resultado}
2) Y en la base de datos tienes: Hola {variable} ¿Como {si}?
3) Y Luego via PHP procesas las variables del punto 2) y finalmente lo muestras en el resultado del punto 1) --> {resultado}
  #21 (permalink)  
Antiguo 11/12/2012, 05:26
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años, 6 meses
Puntos: 839
Respuesta: Tpl y php

Es en la línea 27 donde debes hacer echo template($ruta, $array);
La línea 18 sobra.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #22 (permalink)  
Antiguo 11/12/2012, 08:41
 
Fecha de Ingreso: diciembre-2012
Mensajes: 223
Antigüedad: 11 años, 11 meses
Puntos: 2
Respuesta: Tpl y php

ea asin no?
Código PHP:
Ver original
  1. <?php
  2. function template($ruta,$array)
  3. {
  4.     /* Tomamos el archivo */
  5.     $template = file_get_contents("$ruta");
  6.  
  7.     /* Mostramos el template con los cambios realizados */
  8.     ob_start();
  9.     echo eval("?".">$template");    
  10.     $template = ob_get_contents();
  11.     ob_end_clean();
  12.  
  13.     /* Reemplazamos el contenido entre corchetes por la etiqueta PHP */
  14.     foreach ($array as $a => $b) {
  15.         $template = str_replace("{".$a."}", "$b", $template);
  16.     }
  17.     return $template;
  18. }
  19. /* Establecemos las variables */
  20. $ruta = "test.tpl";
  21. $array = array(
  22.     "si" => "no",
  23.     "variable" => "m"
  24. );
  25. /* Llamamos a la funci贸n */
  26. template($ruta,$array);
  27. ?>
  #23 (permalink)  
Antiguo 11/12/2012, 08:56
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años, 6 meses
Puntos: 839
Respuesta: Tpl y php

Cita:
Es en la línea 27 donde debes hacer echo template($ruta, $array);
Línea 26 en este caso.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #24 (permalink)  
Antiguo 11/12/2012, 09:03
 
Fecha de Ingreso: diciembre-2012
Mensajes: 223
Antigüedad: 11 años, 11 meses
Puntos: 2
Respuesta: Tpl y php

Correcto, y en el test.tpl tengo puesto
Código PHP:
Ver original
  1. <?php
  2. include("../config/config.php");
  3. ?>
  4. <?php
  5. $web = mysqli_query($conectar, "SELECT Codigo FROM Diseno WHERE Dominio = 'Mi dominio'");
  6. if($web1 = mysqli_fetch_array($web)){
  7. echo template($web1['Codigo']);
  8. }
  9. ?>

Me da este error
Código PHP:
Ver original
  1. Warning: Missing argument 2 for template(), called in /home/xdxdx157/public_html/cms/diseno/a.php(9) : eval()'d code on line 7 and defined in /home/xdxdx157/public_html/cms/diseno/a.php on line 2
  2.  
  3. Warning: file_get_contents(ferger fgr rg ewf ewr ewr no) [function.file-get-contents]: failed to open stream: No such file or directory in /home/xdxdx157/public_html/cms/diseno/a.php on line 5
  4.  
  5. Warning: Invalid argument supplied for foreach() in /home/xdxdx157/public_html/cms/diseno/a.php on line 14
  #25 (permalink)  
Antiguo 11/12/2012, 09:54
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años, 6 meses
Puntos: 839
Respuesta: Tpl y php

Hace unos cuantos mensajes atrás te había dicho:
Cita:
En este caso no necesitas llamar a template() dentro del .tpl, como dije, es que te había entendido mal.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #26 (permalink)  
Antiguo 11/12/2012, 10:01
 
Fecha de Ingreso: diciembre-2012
Mensajes: 223
Antigüedad: 11 años, 11 meses
Puntos: 2
Respuesta: Tpl y php

¿Como, no te entendi
  #27 (permalink)  
Antiguo 11/12/2012, 10:04
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años, 6 meses
Puntos: 839
Respuesta: Tpl y php

Que esto:
Código PHP:
Ver original
  1. echo template($web1['Codigo']);
Debería ser solamente:
Código PHP:
Ver original
  1. echo $web1['Codigo'];
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #28 (permalink)  
Antiguo 11/12/2012, 10:09
 
Fecha de Ingreso: diciembre-2012
Mensajes: 223
Antigüedad: 11 años, 11 meses
Puntos: 2
Respuesta: Tpl y php

GRACIASSSSSSSSSSSSSSSSSSSS
Todo solucionado

Etiquetas: tpl, variables
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 14:26.