Clase de Sintaxis de Plantilla
La Clase de Sintaxis de Plantilla le permite usar pseudo variables dentro de sus archivos de vista. Pueden ser simples variables o pares de etiquetas de variables. Si nunca ha usado un motor de plantillas, las pseudo variables se ven así:
<html>
<head>
<title>{blog_titulo}</title>
</head>
<body>
<h3>{blog_encabezado}</h3>
{blog_entradas}
<h5>{titulo}</h5>
<p>{cuerpo}</p>
{/blog_entradas}
</body>
</html>
Estas variables no son verdaderas variables de PHP, sino representaciones en texto plano que le permiten eliminar PHP de sus plantillas (archivos de vista).
Nota: CodeIgniter no requiere que use esta clase ya que usar puro PHP en sus páginas de vista las hace correr un poco más rápido. Sin embargo, algunos desarrolladores prefieren usar un motor te plantillas si trabajar con diseñadores que pueden sentir consfusión trabajando con PHP.
También Note: La Clase de Sintaxis de Plantillas no es una solución completa a las sintaxis de plantillas. Lo hemos mantenido muy delgada para mantener al máximo el desempeño.
Inicializando la Clase
Como la mayoría de las otras clases en CodeIgniter, la clase de Sintaxis es inicializada en su controlador usando la función $this->load->library:
$this->load->library('parser');
Una vez cargada, el objeto de la librería de Sintaxis estará disponible usando: $this->parser
Las siguientes funciones están disponibles en esta librería:
$this->parser->parse()
Esta función acepta un nombre de plantilla y un arreglo de datos como entrada, y genera una versión en consecuencia. Ejemplo:
$this->load->library('parser');
$data = array(
'blog_titulo' => 'El Título de mi Blog',
'blog_heading' => 'El Encabezado de mi Blog'
);
$this->parser->parse('blog_plantilla', $data);
El primer contiene el nombre del archivo de vista (en este ejemplo sería llamado blog_plantilla.php), y el segundo parámentro contiene un arreglo asociativo de datos para ser reemplazados en la plantilla. En el ejemplo anterior, la plantilla contendría dos variabels: {blog_titulo} y {blog_heading}
No hay necesidad de "echo" o de hacer algo con los datos devueltos por $this->parser->parse(). es automáticamente pasado a la clase de salida para ser enviado al explorador. Sin embargo, si quiere que los datos sean devueltos en vez de enviados a la clase de salida puede pasar TRUE (buleano) al tercer parámetro:
$string = $this->parser->parse('blog_plantilla', $data, TRUE);
Pares de variables
En el ejemplo anterior el código permite variables simples ser reemplazadas. ¿Qué pasa si quiere un bloque entero de variables sean repetidos, con cada iteración conteniendo nuevos valores? Considere el ejemplo de la plantilla que mostramos al principio de la página:
<html>
<head>
<title>{blog_titulo}</title>
</head>
<body>
<h3>{blog_heading}</h3>
{blog_entradas}
<h5>{titulo}</h5>
<p>{cuerpo}</p>
{/blog_entradas}
</body>
</html>
En el código anterior notará un par de variables: {blog_entradas} datos... {/blog_entradas}. En un caso como este, el pedazo entero de datos entre este par se repetirá múltiples veces, correspondiendo al número de filas en un resultado.
La sintaxis de pares de variables es hecho usando el idéntico código mostrado arriba para sintaxis de variables simples, a excepción que agregará un arreglo multi-dimensional correspondiente a sus datos de pares de variables. Considere este ejemplo:
$this->load->library('parser');
$data = array(
'blog_titulo' => 'El Título de mi Blog',
'blog_heading' => 'El Encabezado de mi Blog',
'blog_entradas' => array(
array('titulo' => 'Titulo 1', 'cuerpo' => 'Cuerpo 1'),
array('titulo' => 'Titulo 2', 'cuerpo' => 'Cuerpo 2'),
array('titulo' => 'Titulo 3', 'cuerpo' => 'Cuerpo 3'),
array('titulo' => 'Titulo 4', 'cuerpo' => 'Cuerpo 4'),
array('titulo' => 'Titulo 5', 'cuerpo' => 'Cuerpo 5')
)
);
$this->parser->parse('blog_plantilla', $data);
Si sus "pares" de datos vienen de un resultado de base de datos, el cual ya es un arreglo multidimensional, puede simplemente usar la función result de base de datos:
$query = $this->db->query("SELECT * FROM blog");
$this->load->library('parser');
$data = array(
'blog_titulo' => 'El Título de mi Blog',
'blog_heading' => 'El Encabezado de mi Blog',
'blog_entradas' => $query->result_array()
);
$this->parser->parse('blog_plantilla', $data);