У меня есть пользовательский контроллер, доступный по пути, /custommodule/customer/info
который загружает 2columns-left.phtml
шаблон на root
узле следующим образом:
<custommodule_customer_info>
<reference name="root">
<action method="setTemplate"><template>page/2columns-left.phtml</template></action>
</reference>
</custommodule_customer_info>
Я хотел бы обновить корневой шаблон для клиентов, которые не вошли в систему, например:
<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>
Я понимаю, что не могу ориентироваться на несколько дескрипторов макета таким образом, но цель должна быть ясной; обновите корневой шаблон для этого дескриптора макета, пока клиенты не вошли в систему.
Я думал, что могу нацелить ручку моего контроллера с помощью следующего:
<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>
Это действительно обновляет корневой шаблон с помощью 1column.phtml
шаблона, но он делает это на том, что выглядит как все страницы, а не только страница, предназначенная для моего reference
узла.
Я пробовал несколько перестановок этого обновления макета, но, похоже, ни одна из них не работает. Как можно настроить таргетинг на этот дескриптор макета, одновременно используя customer_logged_out
дескриптор макета?
- edit - Чтобы было понятно, это на самом деле сторонний модуль.
customer_logged_in/out
ручки могут быть такими мощными, но они ограничиваются из-за этого ограничения.Алан Шторм ответил примерно так:
/programming//a/5601579/1157493
Вы можете использовать помощника для проверки логики входа в систему.
Он вызовет
Mage::helper('mymodule/myhelper')->switchTemplateIf();
In the helper, вы можете решить переключить шаблон или просто оставить его таким.Я считаю, что это устанавливает шаблон для того, что вы
return
в этой функции.Это будет выглядеть примерно так:
Непроверенные
источник
Недавно мне понадобился такой вид функциональности, и мне становилось все труднее добавлять все больше и больше дескрипторов макета для всех различных комбинаций существующих дескрипторов макета, поэтому я создал расширение magento, чтобы добавить возможность нацеливания на несколько дескрипторов макета непосредственно из XML-макета.
Вот ссылка на расширение - https://github.com/mridul89/MultipleHandles.git
Вы бы использовали это так
Это скажет magento использовать только этот конкретный
customer_logged_out
дескриптор макета, еслиcustommodule_customer_info
макета, он также присутствует.источник