Foros del Web » Programando para Internet » PHP »

preg_replace() y el uso de constantes

Estas en el tema de preg_replace() y el uso de constantes en el foro de PHP en Foros del Web. Estoy construyendo un sistema de templates. Mi template es un archivo HTML plano común y corriente. En ese archivo HTML hago algunas llamadas a contenido ...
  #1 (permalink)  
Antiguo 29/06/2005, 10:26
Avatar de Takitei  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 1.231
Antigüedad: 20 años, 2 meses
Puntos: 5
preg_replace() y el uso de constantes

Estoy construyendo un sistema de templates. Mi template es un archivo HTML plano común y corriente. En ese archivo HTML hago algunas llamadas a contenido dinámico de esta forma:

{LATEST_NEWS}

Entonces, supongamos que tenemos:

<title>{WEBSITE_TITLE}</title>

Eso deberá reemplazarse por su respectiva constante WEBSITE_TITLE. Esto lo esto haciendo con un preg_replace asi:

Código PHP:
// esto es un ejemplo
define('WEBSITE_TITLE''Mi pagina web.com');
$result='<title>{WEBSITE_TITLE}</title>';
$result=preg_replace("`\{(.*)?\}`i","$1",$result);
echo 
$result
Lo cual debería dar como resultado:

Código HTML:
<title>Mi pagina web.com</title> 
Pero no funciona, no me esta imprimiendo el valor de la constante. ¿Qué puedo hacer para imprimir el valor de la constante?

THankz!
__________________
Takitei
Ingeniarte.com
DannyHerran.com
"Dadme un punto de apoyo y moveré la tierra" - Arquímedes.
  #2 (permalink)  
Antiguo 29/06/2005, 11:00
 
Fecha de Ingreso: mayo-2005
Mensajes: 201
Antigüedad: 19 años, 5 meses
Puntos: 2
bueno la idea es carcana, pero se te esta pasando que la referencia que estas usando en la funcion esta llamando a lo que cotejo en la busqueda que en este caso es WEBSITE_TITLE pero esto no indica que estes sustituyendo ese valor por la constante definida en tu codigo. asi que tomando en cuenta este detalle tienes que cambiar tu codigo a algo asi:
Código PHP:
define('WEBSITE_TITLE''Mi pagina web.com');
$result='<title>{WEBSITE_TITLE}</title>';
$result=preg_replace("`\{(.*)?\}`i",WEBSITE_TITLE,$result);
echo 
htmlentities($result); 
Si notas estoy llamando directamente a la constante.

Saludos.
  #3 (permalink)  
Antiguo 29/06/2005, 11:50
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 19 años, 10 meses
Puntos: 7
En lugar de definir constantes deberías usar variables para hacer más fácil el reemplazo, probablemente el código debería ser así:
Código PHP:
$WEBSITE_TITLE 'Mi pagina web.com';
$PAGE_SECTION 'otro';
$result='<title>{WEBSITE_TITLE} {PAGE_SECTION}</title>';
$result=preg_replace("`\{([^\}]+)\}`ies""$$1",$result);
echo 
htmlentities($result); 
Actualización, también puedes hacerlo con constantes:
Código PHP:
define('WEBSITE_TITLE''Mi pagina web.com');
define('PAGE_SECTION''otro');
 
$result='<title>{WEBSITE_TITLE} {PAGE_SECTION}</title>';
 
$result=preg_replace("`\{([^\}]+)\}`ies""$1",$result);
 echo 
htmlentities($result); 
Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño

Última edición por xknown; 29/06/2005 a las 12:15
  #4 (permalink)  
Antiguo 29/06/2005, 13:43
Avatar de Takitei  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 1.231
Antigüedad: 20 años, 2 meses
Puntos: 5
Funciona perfecto xknown, sin embargo, me doy cuenta de que lo único que hizo que funcionara es que tu cambiastes la expresión regular,

"`\{([^\}]+)\}`ies"

Gracias a eso es que funciona. Usastes el modificador de patrón i, e y s. Además el núcleo de la expresión ([^\}]+) está mejorado.

¿Qué tiene que ver la expresión regular con el uso de constantes?
__________________
Takitei
Ingeniarte.com
DannyHerran.com
"Dadme un punto de apoyo y moveré la tierra" - Arquímedes.
  #5 (permalink)  
Antiguo 29/06/2005, 13:44
Avatar de Takitei  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 1.231
Antigüedad: 20 años, 2 meses
Puntos: 5
Ahh por cierto, el uso de htmlentities() no es correcto. Si se usa esa función, solo se verá código HTML en pantalla.
__________________
Takitei
Ingeniarte.com
DannyHerran.com
"Dadme un punto de apoyo y moveré la tierra" - Arquímedes.
  #6 (permalink)  
Antiguo 29/06/2005, 14:09
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 19 años, 10 meses
Puntos: 7
Lo de htmlentities lo copié del mensaje anterior y no me fijé si tu lo habías puesto, ahora el punto más importante de la expresión regular que te mandé es el modificador "e", esto indica que la cadena a reemplazar se trate como código PHP, puedes ver la documentación al respecto http://www.php.net/preg_replace.

Me imagino para que sabes sirve el modificador "s"

Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #7 (permalink)  
Antiguo 29/06/2005, 14:21
Avatar de Takitei  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 1.231
Antigüedad: 20 años, 2 meses
Puntos: 5
Exacto... ese detalle de la simple "e" fue importante. Al tratarse como código PHP la constante se maneja como una constante y no como una simple frase escrita.

El modificador "s" es para usar el punto como cualquier carácter alfanumérico incluyendo el salto de línea.

Para los que quieran leer más info al respecto:

http://ve.php.net/manual/es/referenc....modifiers.php

"e"
Si éste modificador es usado, preg_replace() realiza las sustituciones normales de referencias hacia atrás en la cadena de reemplazo, evalúa ésta como código PHP y usa el resultado para reemplazar la cadena de búsqueda. Las comillas sencillas y dobles son escapadas con barras invertidas en las referencias hacia atrás sustituidas.
__________________
Takitei
Ingeniarte.com
DannyHerran.com
"Dadme un punto de apoyo y moveré la tierra" - Arquímedes.
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:50.