限制JavaScript在模块中包含商店
-
16-10-2019 - |
题
我有一个付款模块,该模块需要在启用其启用的商店的结帐页面上进行一些JavaScript。好消息是它正确地包括结帐页面上的链接。不幸的是,它还包括每个其他页面和每个商店中的链接。
您如何设置JavaScript Incluct,仅在某个部分中出现在启用其启用的商店中?
解决方案
如果您的模块具有每个商店范围的简单启用/禁用配置设置(似乎是),则可以使用 ifconfig, ,通过 Mage::getStoreConfigFlag()
:
<?xml version="1.0" encoding="UTF-8"?>
<layout>
<checkout_onepage_index><!-- the onepage checkout "page" -->
<reference name="head"><!-- The HTML head block -->
<action method="addJs" ifconfig="your/checkout_module/enabled">
<js>your/file.js</js><!-- i.e. js/your/file.js -->
</action>
</reference>
</checkout_onepage_index>
</layout>
其他提示
我构建了一个观察者,该观察者添加了一个布局句柄,如果
<?xml version="1.0"?>
<config>
<frontend>
<events>
<controller_action_layout_load_before>
<observers>
<myobserver>
<type>singleton</type>
<class>Namespace_MyModule_Model_Observer</class>
<method>controllerActionLayoutLoadBefore</method>
</myobserver>
</observers>
</controller_action_layout_load_before>
</events>
</frontend>
</config>
和观察者:
<?php
class Namespace_MyModule_Model_Observer
{
/**
* add update handles
*
* @param Varien_Event_Observer $observer
*/
public function controllerActionLayoutLoadBefore(Varien_Event_Observer $observer)
{
/* @var $controller Mage_Core_Controller_Front_Action */
$controller = $observer->getAction();
$request = $controller->getRequest();
/* @var $layoutUpdate Mage_Core_Model_Layout_Update */
$layoutUpdate = $observer->getLayout()->getUpdate();
// check whether to add the handle or not
$layoutUpdate->addHandle('my_layout_handle');
}
}
然后,您可以将JS添加到手柄中,并决定是否添加它。
该JavaScript是否嵌入了布局文件中,并且商店具有适当的主题?如果是这种情况,您可以按照以下示例进行配置:无需定义观察者,超载,没有自定义:
想象一下您的模块来自A布局句柄myModuleLayout.xml
您应该拥有应用程序/design/frontend/base/default/layout/mymodulelayout.xml
仅在您要启用此模块的商店中移动此文件:
app/design/frontend/yourwebsite/yourtheme/layout/mymodulelayout.xml
仅当应用您的网站包装并应用主题时,才会使用此布局,因此,对于要在结帐中加载此元素的商店中。
问候