Xml Magento条件性<;客户已注销>;奇怪的行为
如果用户未登录,我想添加一个小js文件。Xml Magento条件性<;客户已注销>;奇怪的行为,xml,magento,configuration-files,Xml,Magento,Configuration Files,如果用户未登录,我想添加一个小js文件。 我有这样一个场景: 文件catalog.xml: <layout version="0.1.0"> <default> .... </default> <catalog_product_view translate="label"> <label>Catalog Product View (Any)</label> <reference name="
我有这样一个场景:
文件catalog.xml:
<layout version="0.1.0">
<default>
....
</default>
<catalog_product_view translate="label">
<label>Catalog Product View (Any)</label>
<reference name="head">
<action method="addJs">
<script>varien/configurable.js</script>
</action>
</reference>
....
</catalog_product_view>
</layout>
....
目录产品视图(任何)
varien/configurable.js
....
我编写了一个类似这样的local.xml文件:<layout version="0.1.0">
<customer_logged_out>
<catalog_product_view translate="label">
<reference name="head">
<action method="addJs">
<script>varien/file.js</script>
</action>
</reference>
</catalog_product_view>
</customer_logged_out>
</layout>
varien/file.js
此操作无效,并且未添加文件。但是,如果我去掉catalog\u product\u view标签,它会:
<layout version="0.1.0">
<customer_logged_out>
<!--<catalog_product_view translate="label">-->
<reference name="head">
<action method="addJs">
<script>varien/file.js</script>
</action>
</reference>
<!--</catalog_product_view>-->
</customer_logged_out>
</layout>
varien/file.js
我想,我没有测试,通过这种方式,文件被添加到所有页面中,尽管我只想将其添加到catalog\u product\u视图中
可能我不理解配置xml文件的所有逻辑。
谁能给我解释一下这件事吗
非常感谢。
当客户未登录时,将为所有页面加载句柄。并且不能在另一个布局句柄下使用两个布局句柄。
但你可以通过观察者实现你所需要的。
在其中一个模块中,将其添加到config.xml
文件中的config
标记中
<frontend>
<events>
<controller_action_layout_generate_blocks_after>
<observers>
<[module]>
<class>[Namespace]_[Module]_Model_Observer</class>
<method>addJs</method>
</[module]>
</observers>
</controller_action_layout_generate_blocks_after>
</events>
</frontend>
清除缓存即可完成
<?php
class [Namespace]_[Module]_Model_Observer
{
public function addJs($observer)
{
/** @var Mage_Customer_Model_Session $customerSession */
$customerSession = Mage::getSingleton('customer/session');
$action = $observer->getEvent()->getAction()->getFullActionName();
if (!$customerSession->isLoggedIn() && $action == 'catalog_product_view') {
$head = $observer->getEvent()->getLayout()->getBlock('head');
if ($head) {
$head->addJs('varien/file.js');
}
}
}
}