Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml Magento条件性<;客户已注销>;奇怪的行为_Xml_Magento_Configuration Files - Fatal编程技术网

Xml Magento条件性<;客户已注销>;奇怪的行为

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="

如果用户未登录,我想添加一个小js文件。
我有这样一个场景:
文件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');
            }
        }
    }
}