2011-08-11 11 views
8

Estoy trabajando en un módulo de Magento donde quiero obtener el diseño de una página frontend. Por página frontend quiero decir todos los tipos de páginas, es decir, página cms, categoría, producto, carro, mi cuenta, etc.Magento obtener el diseño de la página dada

He leído el excelente ebook magento-nofrills de Alan Storm y estoy usando su plugin Commercebug para ayudarme a desarrollar mi sitio magento. También he pasado un tiempo en stackoverflow buscando una pregunta similar, por favor perdónenme si me la he perdido.

Si, por ejemplo, tengo una identificación de página o una identificación de categoría, ¿cómo obtengo el diseño de esa página frontend del código ejecutado en el back-end?

He estado jugando con la solicitud y cuando corro este código en el frontend puedo ver que el módulo, controlador, etc layouthandles se cambian cuando, por ejemplo mirando una página del catálogo

$request = Mage::app()->getRequest(); 
$request->setModuleName('cms'); 
$request->setRouteName('cms'); 
$request->setControllerName('page'); 
$request->setActionName('view'); 
$request->setParam('page_id', 6); 

Pero cuando examino el xml de la disposición, que parece que no puede obligar a Magento para mostrarme el XML para (en este ejemplo) página cms con id = 6:

Mage::app()->getLayout()->getNode()->asXml(); 

Tal vez estoy pensando demasiado complicado aunque. Me gustaría comprobar si una determinada página tiene barras laterales, qué bloques y elementos se muestran en la página y en las barras laterales (solo bloques activos, no los ignorados).

¡Gracias de antemano! Tim

+1

¿Has descubierto esto? tengo curiosidad yo mismo. – chrisjlee

Respuesta

5

Llamada loadLayout() antes de getLayout().

Puede comprobar si un bloque está activo en el diseño llamando getBlock ($ block_name):

$left_block = $this->loadLayout()->getLayout()->getBlock('left'); 

Si el bloque no es parte de la disposición (o se ignora) y luego $ left_block será falso. Puede utilizar getBlock() en conjunción con getSortedChildren() para ver sus bloques del niño:

$this->loadLayout()->getLayout()->getBlock('content')->getSortedChildren(); 

El anterior devolverá una matriz de cadenas de nombres de bloques dentro del bloque "contenido". Solo se devolverán los nombres de los bloques activos.

+0

Intenté usar tu fragmento para obtener $ left_block; pero recibí un error de excepción. ¿Hay algo que debería agregar antes de esa línea de código? – Kamal

+0

¿Dónde colocaste el código? El ejemplo anterior pertenece al archivo del controlador. – Joe

+0

owh ... Necesito usarlo en un archivo phtml ... ¿hay alguna manera de que yo pueda hacer eso? Lo estoy preguntando aquí http://stackoverflow.com/questions/11133522/magento-get-which-layout-being-used-on-phtml-files. estaría contento si pudieras responderlo :) – Kamal

Cuestiones relacionadas