Ограничение javascript включает в себя хранение в модуле


У меня есть платежный модуль, который требует немного javascript на странице оформления заказа для магазинов, где он включен. Хорошей новостью является то, что он правильно включает ссылку на странице оформления заказа. К сожалению, он также включает ссылку на каждой другой странице и в каждом магазине.

Как настроить включение javascript, чтобы он отображался только в определенном разделе и только в магазинах, где он включен?

Author: Marius, 2013-02-25

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>
 6
Author: benmarks, 2013-02-25 16:17:27

Я создал наблюдателя, который добавляет дескриптор макета, если

<?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 в дескриптор и решить, добавлять его или нет.

 1
Author: Fabian Blechschmidt, 2013-02-25 15:40:02

Встроен ли этот javascript в файл макета и есть ли в магазине соответствующая тема? Если это так, вы можете настроить свое приложение в соответствии со следующим примером: нет необходимости определять наблюдателя, перегружать, никаких настроек:

Представьте, что ваш модуль получен из дескриптора макета a mymodulelayout.xml

У вас должно быть app/design/frontend/base/default/layout/mymodulelayout.xml

Переместите этот файл только в хранилище, в котором вы хотите включить этот модуль:

App/design/frontend/yourwebsite/yourtheme/layout/mymodulelayout.xml

Этот макет будет использоваться только тогда, когда будет применен пакет вашего веб-сайта и применена ваша тема, поэтому для вашего магазина, в котором вы хотите загрузить эти элементы при оформлении заказа.

С уважением

 0
Author: Matthieu MARY, 2013-02-26 17:57:36