Mam niestandardowy kontroler dostępny na ścieżce, /custommodule/customer/info
która ładuje 2columns-left.phtml
szablon do root
węzła w następujący sposób:
<custommodule_customer_info>
<reference name="root">
<action method="setTemplate"><template>page/2columns-left.phtml</template></action>
</reference>
</custommodule_customer_info>
Chciałbym zaktualizować szablon główny dla klientów, którzy nie są zalogowani, na przykład:
<customer_logged_out>
<custommodule_customer_info>
<reference name="root">
<action method="setTemplate"><template>page/1column.phtml</template></action>
</reference>
</custommodule_customer_info>
</customer_logged_out>
Rozumiem, że nie mogę celować w wiele uchwytów układu w ten sposób, ale cel powinien być jasny; zaktualizuj szablon główny dla tego uchwytu układu, gdy klienci nie są zalogowani.
Myślałem, że mogę celować w uchwyt mojego kontrolera za pomocą:
<customer_logged_out>
<reference name="custommodule_customer_info">
<reference name="root">
<action method="setTemplate"><template>page/1column.phtml</template></action>
</reference>
</reference>
</customer_logged_out>
To rzeczywiście aktualizuje szablon główny o 1column.phtml
szablon, ale robi to na czymś, co wydaje się być wszystkimi stronami, a nie tylko stroną docelową w moim reference
węźle.
Próbowałem kilku permutacji tej aktualizacji układu, ale wydaje się, że żadna nie działa. Jak mogę celować w ten jeden uchwyt układu, jednocześnie korzystając z customer_logged_out
uchwytu układu?
- edytuj - aby było jasne, w rzeczywistości jest to moduł innej firmy.
customer_logged_in/out
uchwyty mogą być tak potężne, ale z powodu tego ograniczenia dają się nabrać.Alan Storm odpowiedział na coś podobnego:
/programming//a/5601579/1157493
Możesz użyć pomocnika do wykonania logiki sprawdzania, czy zalogowany użytkownik jest zalogowany.
Zadzwoni
Mage::helper('mymodule/myhelper')->switchTemplateIf();
W tym pomocniku, możesz zdecydować o zmianie szablonu lub po prostu zachować go w ten sposób.Wierzę, że ustawia szablon na cokolwiek
return
w tej funkcji.Wyglądałoby to tak:
Niesprawdzone
źródło
Ostatnio potrzebowałem tego rodzaju funkcjonalności i było coraz trudniej dodawać coraz więcej uchwytów układu dla wszystkich różnych kombinacji istniejących uchwytów układu, więc stworzyłem rozszerzenie magento, aby dodać możliwość celowania w wiele uchwytów układu bezpośrednio z xml układu.
Oto link do rozszerzenia- https://github.com/mridul89/MultipleHandles.git
Użyłbyś tego w ten sposób
Spowoduje to, że magento będzie używać tego konkretnego
customer_logged_out
uchwytucustommodule_customer_info
układu tylko wtedy, gdy uchwyt układu jest również obecny.źródło