Tutorial para la creación de una Extensión de Magento (parte 4)
En las partes anteriores del tutorial vimos cómo crear una nueva extensión para Magento siguiendo el modelo vista-controlador (MVC). En la última parte vimos una forma sencilla, aunque no muy flexible, de crear una vista para nuestra extensión. En esta parte del tutorial veremos una forma más potente para crear nuestras vistas utilizando “templates” o plantillas PHP para generar las diferentes partes de las páginas de nuestra extensión.
Vamos a comenzar modificando el fichero de layout que teníamos en el tutorial anterior:
/app/design/frontend/base/default/layout/holamundo.xml
<?xml version="1.0"?>
<layout version="0.1.0">
<default>
<holamundo_index_saludar>
<reference name="content">
<block type="page/html" name="holamundo" template="holamundo/holamundo.phtml/>
</reference>
</holamundo_index_saludar>
</default>
</layout>
En el fichero de layout hemos incluido una referencia a un template. A continuación tenemos que crear este fichero:
</pre> <pre>/app/design/frontend/base/default/template/holamundo/holamundo.phtml
<?php echo(get_class($this)); ?>
En el template podemos contar con una autoreferencia a nuestro propio objeto ($this). Pero no hemos creado ninguna clase! Es por eso que he incluido la línea que imprime por pantalla el nombre de la clase de $this en el template. Si accedemos a la url www.mitiendamagento.com/holamundo/index/saludar, podremos ver que estamos imprimiendo por pantalla el texto “Mage_Page_Block_Html”. Se trata de un bloque, nuestro template siempre estará asociado a un bloque, sólo que la salida ya no se genera, como en el tutorial anterior, mediante el método _toHtml del bloque, sino que se hace utilizando el template. En este caso hemos utilizado un bloque genérico de Magento para mostrar templates. Si nuestro template no necesitara realizar ninguna acción podríamos dejarlo así, ¡pero nosotros queremos nuestro propio bloque! Así que vamos a crearlo:
/app/code/local/Brainsins/Holamundo/Block/Formsaludos.php
<?php
class Brainsins_Holamundo_Block_Formsaludos extends Mage_Core_Block_Template {
public function _prepareLayout()
{
return parent::_prepareLayout();
}
public function construirSaludo() {
$input = $this->getRequest()->getParam("nombre");
$name = $input ? $input : "Desconocido";
return Mage::getSingleton("holamundo/holamundo")->construirSaludo($name);
}
}
A diferencia del último tutorial, ahora extendemos la clase Mage_Core_Block_Template. Sólo con esto, nuestro bloque ya está preparado para trabajar con templates. Simplemente hemos añadido un método para poder utilizarlo cómodamente desde el template. Si cambiamos en el template page/html por holamundo/formsaludos, veremos que ahora, la clase de bloque que se estará utilizando es Brainsins_Holamundo_Block_Formsaludos, es decir, nuestro nuevo bloque. A continuación vamos a modificar el template que ya hemos creado para que se encargue de saludar. En este caso, vamos a mostrar dos páginas diferentes en función de si está presente el parámetro GET “nombre” con el nombre a saludar. Si está presente, lo saludaremos, y en caso contrario mostraremos un pequeño formulario para preguntar al usuario por su nombre.
/app/design/frontend/base/default/template/holamundo/holamundo.phtml
<h1> Bienvenido al Saludador </h1>
<?php
if (isset($_GET['nombre'])) {
$saludo = $this->construirSaludo("alex");
echo("<h4>" . $saludo . "</h4>");
} else {
?>
<form action="saludar" method="GET">
<label for="nombre">Dime tu nombre</label>
<input type="text" name="nombre"/>
<input type="submit"/>
</form>
<?php
}
?>

