php - the_content - wordpress print the content
Plantillas de PHP con str_replace? (9)
Creo que el principio básico de un sistema de plantillas de PHP es el reemplazo de cadenas, ¿verdad? Entonces, ¿puedo usar una cadena para mantener mi código de plantilla html como
$str_template = "<html><head><title>{the_title}</title><body>{the_content}</body></html>"
y en el siguiente código simplemente haga un str_replace para insertar los datos en mi variable de plantilla como
str_replace( $str_template, ''{the_title}'', $some_runtime_generated_title );
str_replace( $str_template, ''{the_content}'', $some_runtime_generated_content );
entonces al fin
echo $str_template;
¿Esperemos que esto haga que todo el proceso de aprobación variable sea un poco más rápido? Sé que esta podría ser una pregunta extraña, pero ¿alguien lo ha intentado?
Construiría un analizador que descompone el código en sus tokens (variables y texto sin formato). Como un enfoque fácil, puede usar la función pre_split
para hacer esto:
$tokens = preg_split(''/(/{[^/}]+/})/'', $string, -1, PREG_SPLIT_DELIM_CAPTURE);
Ahora puede iterar los tokens y comprobar si se trata de una variable o texto sin formato:
foreach ($tokens as $token) {
if ($token[0] === ''{'' && $token[strlen($token)-1] === ''}'') {
// token is a variable
} else {
// token is plain text
}
}
La ventaja de este enfoque es que las variables no se reemplazan en texto que ya ha sido reemplazado. Asi que:
$foo = ''{bar}'';
$bar = ''bar'';
$template = ''Lorem {foo} {bar} sit amet …'';
Aquí el texto sería reemplazado por Lorem bar {bar} sit amet …
y no Lorem bar bar sit amet …
como sucedería con su código, cuando {bar}
está siendo reemplazado después de {foo}
.
Esa es generalmente la idea básica para un sistema de plantillas. Los sistemas de plantillas reales tienen muchas más capacidades, pero en el fondo esto es lo que hacen.
Usted pregunta si esto "hará que todo el proceso de paso variable sea un poco más rápido". Más rápido que qué? ¿Estás teniendo problemas de rendimiento con algo que estás haciendo en este momento?
Si solo hace expansión variable, puede hacer:
$str_template = "<html><head><title>$the_title</title><body>$the_content</body></html>";
Funcionará también ...
Varias personas se preguntan por qué hay un sistema de plantillas cuando PHP ya es un sistema de plantillas ...
Por supuesto, hay otras ventajas para estos sistemas, como un acceso más seguro a las variables, quizás más fácil de manejar por los diseñadores (o para generar herramientas), limitación de la lógica en la capa de visualización ... Lo cual es una crítica común de la plantilla pesada sistemas como Smarty, con tanta lógica que casi puedes escribir otro sistema de plantillas con él. ;-)
Algunos sistemas de plantillas, como Savant , toman un camino intermedio. :-)
Sin embargo, debes tener los argumentos en el orden correcto. str_replace()
También podría ser una buena idea colocar las plantillas en su propio archivo en lugar de mantenerlas en una cadena. Luego solo file_get_contents()
través de file_get_contents()
o similar.
Simplemente no puedes hacer una plantilla de esta manera.
Una plantilla de vida real requerirá no solo variables planas para llenar, sino también varias estructuras de control, o al menos algún tipo de bloques para controlar ciertas áreas de la página (para hacer un bucle, por ejemplo).
Entonces, no puedes hacer una plantilla con str_replace solamente. También se requerirán algunas expresiones regulares y un análisis sofisticado.
Por lo tanto, es mejor seguir con un motor de plantillas que ya está a su disposición: ¡un PHP en sí mismo!
En realidad, la respuesta de "Your Common Sense" es la correcta. Podría usar PHP para usar el contexto actual y reemplazar variables. En lugar de escribir el resultado, puede hacer ob_start () para mantenerlo en un búfer y obtener el contenido reemplazado. Fácil y elegante!
Sí, esa es la idea básica detrás de un sistema de plantillas. Puedes abstraerlo más, deja que otro método agregue los corchetes, por ejemplo.
También puede usar matrices con str_replace y así hacer muchas más sustituciones con una llamada a función como esta
str_replace(array(''{the_title}'', ''{the_content}''), array($title, $content), $str_template);
El sistema con el que trabajo es Spoon Library , su sistema de plantillas es bastante sólido, incluidas las plantillas compiladas, que representan una gran ganancia de rendimiento.
Es una buena idea usar un motor de plantillas.
Pero su idea se vuelve lenta cuando el html es más grande y se vuelve más lento si necesita más variables. recuerde que el reemplazo se ejecuta para cada solicitud.
puede usar archivos html que contengan etiquetas php para la salida (como <?=$var?>
) y solo bucles. incluirlos a través de "incluir" a su código php. eso es mucho más rápido.
echa un vistazo a smarty . este es mi motor de plantilla favorito para php. smarty tiene muchas características buenas como el almacenamiento en caché y es extensible mediante complementos.
si entiendes alemán echa un vistazo aquí . hay una pequeña introducción en smarty.
básicamente la idea es esa, pero la plantilla es algo que ofrece mucho más, por ejemplo, RainTPL es WYSIWYG, porque reemplaza las rutas relativas en la plantilla con las rutas del servidor, de esta manera diseñas tu plantilla en local y funciona en el servidor sin necesidad de cambiar img / css.