2012-07-21 13 views
5

Czy istnieje sposób, w jaki możemy dynamicznie zmieniać układ strony Magento (powiedzmy stronę kategorii produktów) za pomocą zmiennej systemowej, która została ustawiona w naszym własnym module? Chcę móc ustawić domyślny układ strony kategorii za pomocą mojego własnego panelu konfiguracyjnego modułu. Nie muszę więc zajmować się tym mylącym plikiem w układzie XML za każdym razem, gdy chcę zmienić domyślny układ dla pewnej strony magento.Magento zmienia układ dynamicznie za pomocą zmiennej systemowej

Wiem, że na pliku phtml możemy po prostu wywołać zmienną systemową naszego własnego modułu, wywołując Mage::getStoreConfig('module/scope/...'), aby użyć tej zmiennej systemowej. ale co jeśli chcemy użyć tej zmiennej systemowej, aby zmienić cały układ ustawiony domyślnie na pliku układu XML.

Nie widzę żadnych sposobów na pobranie wartości zmiennej systemowej z pliku układu XML.

Ale jestem prawie pewien, że musi to być właściwa droga. Jak dotąd, jest to wskazówka, że ​​najbliżej mam

Magento - xml layouts, specify value for ifconfig?

Ale wciąż nie mogłem znaleźć żadnej bezpośredniej odpowiedzi na to, co naprawdę chcesz osiągnąć

to jest treść my config.xml

Odpowiedz

10

Można to bardzo łatwo osiągnąć za pomocą układu xml i prostej metody w pomocniku. Nie widzę tutaj żadnego wymogu dla obserwatora ani dla niczego zbyt skomplikowanego.

Tak, zależnie od potrzeb, aby zmienić wszystkie układy kategorii Strona z własnych modułów wartości sklep config będzie wymagać następujących w xml układ:

<catalog_category_view> 
    <reference name="root"> 
     <action method="setTemplate"> 
      <template helper="yourmodule/switchTemplate" />     
     </action> 
    </reference> 
</catalog_category_view> 

A idąc w modułach domyślnej pomocnika:

public function switchTemplate() 
{ 
    $template = Mage::getStoreConfig('path_to/yourmodule/config'); 
    return $template; 
} 
+0

Dzięki, zwrócił ... Próbuję go ... ale mam ten błąd: Błąd krytyczny: Klasa "Mage_Prem_Spectra_Helper_Data" nie znajduje się w D: \ xampp \ htdocs \ magento17 \ app \ Mage.php na wiersz 546. Dodałem funkcję do domyślnego pomocnika. i ustaw . Jestem całkowicie początkującym z Magento ... czy mógłbyś mi powiedzieć, co jest nie tak z moją implementacją? – Kamal

+0

nadal nie działa. :(Wystąpił ten błąd: Błąd krytyczny: klasa "Mage_Spectra_Helper_Data" nie została znaleziona w D: \ xampp \ htdocs \ magento17 \ app \ Mage.php na linii 546 – Kamal

+0

Czy możesz opublikować zawartość swoich modułów config.xml może to być nie deklarujesz swojego węzła pomocnika –

-1

mówimy o szablonie elementu głównego, a więc o 3 kolumnach, 2 kolumnach itd.? poprawny?

Wdrożenie obserwatora, słuchać przypadku controller_action_layout_generate_blocks_before a następnie uzyskać blok w obserwatora i ustawić szablon

Mage::app()->getLayout()->getBlock('root')->setTemplate($myFancyTemplatePath);

To powinno wystarczyć.

Inny pomysł, spróbuj zdarzenie controller_action_layout_load_before, ale myślę, że jest za wcześnie.

-2

Oprócz Fabiana odpowiedź:

Można być może rozszerzyć funkcjonalność kategorii "trybów wyświetlania. Użycie zdarzenia , a następnie pobranie trybu wyświetlania kategorii i utworzenie dla niego uchwytu aktualizacji XML.

$category = Mage::registry('current_category'); 
    $handle = 'category_displaymode_' . strtolower($category->getDisplayMode()); 

    $layout = $observer->getEvent()->getLayout(); 
    $layout->getUpdate()->addHandle($handle); 

ten sposób można wstępnie określić wszystkie rodzaje układów w local.xml i łatwo przełączać się między nimi poprzez dostosowanie trybu wyświetlania „” rozwijaną na stronie edycji kategorii w admin.

Po wprowadzeniu kilku zmian w panelu administracyjnym można dodać dodatkowe tryby wyświetlania do menu rozwijanego, aby udostępnić więcej typów niestandardowych uchwytów aktualizacji w trybie wyświetlania.

Powiązane problemy