Ограничение javascript включает в себя хранение в модуле
У меня есть платежный модуль, который требует немного javascript на странице оформления заказа для магазинов, где он включен. Хорошей новостью является то, что он правильно включает ссылку на странице оформления заказа. К сожалению, он также включает ссылку на каждой другой странице и в каждом магазине.
Как настроить включение javascript, чтобы он отображался только в определенном разделе и только в магазинах, где он включен?
3 answers
Если в вашем модуле есть простой параметр конфигурации включения/выключения для каждой области хранилища (который, похоже, есть), вы можете использовать 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
У вас должно быть app/design/frontend/base/default/layout/mymodulelayout.xml
Переместите этот файл только в хранилище, в котором вы хотите включить этот модуль:
App/design/frontend/yourwebsite/yourtheme/layout/mymodulelayout.xml
Этот макет будет использоваться только тогда, когда будет применен пакет вашего веб-сайта и применена ваша тема, поэтому для вашего магазина, в котором вы хотите загрузить эти элементы при оформлении заказа.
С уважением