2011-08-11 12 views
8

Pracuję nad modułem Magento, gdzie chcę pobrać układ ze strony frontend. Przez stronę początkową mam na myśli wszystkie typy stron, tj. Stronę cms, kategorię, produkt, koszyk, moje konto, itp.Magento uzyskać układ dla danej strony

Przeczytałem świetny ebook od Magento-nofrills od Alana Storma i używam jego wtyczki Commercebug aby pomóc mi rozwinąć moją stronę magento. Spędziłem też trochę czasu na stackoverflow szukając pytania na temat similairu, proszę wybacz mi, jeśli przeoczyłem.

Jeśli na przykład mam identyfikator strony lub identyfikator kategorii, w jaki sposób mogę pobrać układ tej strony frontend z kodu uruchamianego w backend?

Grałem z prośbą i kiedy uruchomić ten kod w frontend widzę, że moduł, kontroler, layouthandles etc są zmieniane, gdy na przykład patrząc na strony katalogu

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

Ale kiedy sprawdzić xml z układu, nie mogę wydawać się zmusić Magento pokazać mi xml dla (w tym przykładzie) stronę cMS id = 6:

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

może myślę zbyt skomplikowany chociaż. Chciałbym sprawdzić, czy dana strona ma paski boczne, które bloki i elementy są pokazywane na stronie i na paskach bocznych (tylko aktywne bloki, a nie te ignorowane).

Z góry dziękuję! Tim

+1

Czy to wymyśliłeś? jestem ciekawy sam. – chrisjlee

Odpowiedz

5

Zadzwoń do loadLayout() przed getLayout().

Można sprawdzić, czy blok jest aktywny w układzie poprzez wywołanie getBlock ($ block_name):

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

Jeśli blok nie jest częścią układu (lub jest ignorowany), a następnie $ left_block będzie fałszywy. Można użyć getBlock() w połączeniu z getSortedChildren(), aby zobaczyć jego bloki podrzędne:

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

Powyższy zwróci tablicę ciągów nazw bloków w bloku „Zawartość”. Zostaną zwrócone tylko nazwy aktywnych bloków.

+0

Próbowałem użyć Twojego fragmentu kodu, by uzyskać $ left_block; , ale wystąpił błąd wyjątku. Czy jest coś, co powinienem dodać przed tą linią kodu? – Kamal

+0

Gdzie umieściłeś kod? Powyższy przykład należy do pliku kontrolera. – Joe

+0

owh ... Potrzebuję go użyć na pliku phtml ... czy jest jakiś sposób mogę to zrobić? Pytam tutaj http://stackoverflow.com/questions/11133522/magent-get-which-layout-being-used-on-phtml-files. Byłbym szczęśliwy, gdybyś mógł odpowiedzieć :) – Kamal

Powiązane problemy