Una de las grandes bondades (y de los grandes problemas en el comienzo de la curva de aprendizaje) es el manejo de los templates a través de las definiciones xml del layout.
Normalmente, cuando trabajamos con un skin desde el comienzo, más allá de las líneas de diseño que puedan existir, tenemos bastante libertad de elección en la forma en que se va estructurar ese theme.
Ahora bien, cambia radicalmente el escenario cuando nos dedicamos a crear extensiones o cuando ciertas customizaciones que hayamos desarrollado se tornan parte de la batería de módulos y ajustes que usamos en cada proyecto.
Si para cada caso debiéramos estar modificando los archivos phtml, los xml, el css… bueno, sería bastante molesto y estaríamos dejando de tener código reutilizable.
A través de las definiciones de layout podemos aplicar cambios al momento de renderear el template sin hacer modificaciones a los archivos que ya se estén usando. En realidad, hay unas cuantas cosas que pueden hacerse, pero dada la cantidad de funciones con las que contamos para el manejo del layout, sólo me voy a centrar en el reemplazo de llamadas a los phtml.
Como ejemplo, vamos a tomar el selector de moneda. Vamos a suponer también que tenemos definido el update de layout en el módulo.
Ahora bien, el selector de moneda (suponiendo que nuestra tienda posee más de una y lo tenemos cofigurado) se muestra en varias secciones. En el archivo /app/design/frontend/base/default/layout/directory.xml tenemos todas las indicaciones.
Para el ejemplo, vamos a usar la llamada que se utiliza en la vista de categoría.
<?xml version="1.0"?> <layout version="0.1.0"> ... <catalog_category_default> <reference name="left"> <block type="directory/currency" name="currency" before="catalog.leftnav" template="directory/currency.phtml"/> </reference> </catalog_category_default> ... </layout>
Podemos ver que al bloque referenciado como “currency” se le asigna el template “directory/currency.phtml”.
Para hacer nuestro reemplazo sin alterar archivo alguno, tenemos que hacer uso del método setTemplate, que se encargará de reasignar un nuevo phtml al mismo bloque. Supongamos que la definición de layout de nuestro módulo estuviera en un archivo llamado currency.xml, el mismo debería tener la siguiente definición para aplicar el cambio.
<?xml version="1.0"?> <layout version="0.1.0"> ... <catalog_category_default> <reference name="currency"> <action method="setTemplate"><template>path/a/mi/nuevo/currency.phtml</template></action> </reference> </catalog_category_default> ... </layout>
Con ésta nueva definición, lo que estamos haciendo es indicar que en la vista de categoría, se busque el bloque llamado “currency” y se cambie el template por este que hemos definido.
De ésta forma, estamos haciendo una sobreescritura no intrusiva.
Pingback: Tweets that mention Sobreescribir templates en Magento desde el layout | Damián Culotta -- Topsy.com
Hola Damián buen día.
Estimado, soy un novato en magento, necesito poner mi página web (css/imagenes) hecha en php y con conexión a Mysql como página de inicio en magento, estoy picando piedra y entendiendo como hacerlo, pero llevo dias y sigo sin poder, será que pueda contar con tu valiosa ayuda?, si tienes algún manual/tutorial/guia para hacer ésta adapatación me será de gran utilidad!
Muchísimas Gracias!
Sldos.
Alberto
@Alberto
Para lo que creo entender que estás buscando, creo que tenés dos opciones (al menos en un comienzo):
1) Copiar el contenido que se genera en la otra página y copiarla como páginas estática.
2) Si el contenido es dinámico, creo que tendrías que armar algún módulo dentro de Magento que consuma esa información y la presente como corresponde (pero para esto se necestia un mínimo de conocimiento de la plataforma).
No tengo nada específico, pero tendrías que leer (en la wiki oficial hay referencias) sobre cómo agregar contenido (se habla normalmente de productos) en la home de Magento.
No puedo decirte mucho más, porque no tengo claro qué es el source que quieres mostrar.
Saludos.