Estaba leyendo esta pregunta en stackoverflow:
/programming/104516/calling-php-functions-within-heredoc-strings
y la respuesta aceptada dice hacer plantillas PHP simples como esta:
template.php:
<html> <head> <title><?=$title?> </title> </head> <cuerpo> <? = getContent ()?> </body> </html>
index.php:
<? php $ title = 'Título de demostración'; función getContent () { volver '<p> ¡Hola mundo! </p>'; } include ('template.php'); ?>
Para mí, lo anterior no está bien estructurado en el sentido de que template.php depende de variables que están definidas en otros scripts. Y está usando un include () para ejecutar código cuando lo hace include('template.php')
(en lugar de usar include () para incluir una clase o una función que no se ejecuta inmediatamente).
Siento que un mejor enfoque es envolver su plantilla dentro de una función:
template.php:
<? php plantilla de función ($ título, $ contenido) { ob_start (); ?> <html> <head> <title><?=$title?> </title> </head> <cuerpo> <? = $ contenido?> </body> </html> <? php return ob_get_clean (); } ?>
index.php:
<? php require_once ('template.php'); plantilla de impresión ('Título de demostración', '<p> ¡Hola mundo! </p>'); ?>
¿Es mejor el segundo enfoque? ¿Hay una forma aún mejor de hacerlo?
extract($this->properties);
para extraer las propiedades en variables, justo antes de la declaración de inclusión.Una plantilla siempre dependerá de variables externas y, dado que PHP es un lenguaje dinámico, no hay forma de exigir en el momento de la compilación que estarán allí. Entonces, el primer enfoque probablemente esté bien; Sin embargo, todavía hay algunos problemas:
Un enfoque muy directo es escribir una función, preferiblemente con un nombre muy corto, que se encargue de ambos; llamarlo
_()
parece ser una convención común. Una versión simple podría verse así:Y luego en su plantilla, haría:
Más cosas que hacer con la
_()
función:htmlspecialchars
llamada, en los casos en que desee pasar HTML en lugar de cadenas sin formato.Array
yObject
, sino más bien algo significativo (o cadena vacía).fuente
El primero
template.php
es más fácil de cargar tal como está en dreamweaver / bluegriffon / lo que sea y editado por un diseñador web no conocedor del lado del servidor, el segundo ... bueno, aún podría, pero es mucho más probable que se rompa durante el proceso de edición .Iría con el primero para mantenerlo como HTML con beneficios , como prefieren los diseñadores de terceros.
fuente
Debido a que Codeigniter es mi marco favorito, le propongo una solución Codeigniter-ish:
Su plantilla se vería así:
Y lo renderizaría instanciando la clase, pasando datos en una matriz como un parámetro de constructor y llamando al método 'render':
De esta manera, no está ejecutando directamente el código incluido, y también mantiene su plantilla legible, por lo que los diseñadores estarán felices.
fuente
Php no es un lenguaje de programación. Por lo tanto, no es posible escribir con letra muy fuerte si su idioma no tiene un sistema de tipos real. Pero puedes ayudar a tu IDE como PHP-Storm a hacer el truco que quieras ...
Su definición de vista:
Su archivo de plantilla:
fuente