Как добавить JS/CSS из layout.xml только при соблюдении нескольких условий?


У меня есть три поля в разделе конфигурации администратора, которые необходимо проверить. Если хотя бы для одного из них установлено значение true, файлы должны загружаться.

Layout.xml

<reference name="head">
    <action method="addItem">
        <type>skin_js</type>
        <name>path/to/file1.js</name>
    </action>
    <action method="addItem">
        <type>skin_js</type>
        <name>path/to/file2.js</name>
    </action>
    ...
</reference>

Идеи:

  1. добавьте помощника для каждого файла
  2. добавьте новое (скрытое?) поле в конфигурацию и в разделах save_before установите значение в зависимости от других полей
  3. Расширенное расширение ifconfig уже установлено, но не знаю, как для настройки условий

На данный момент я предпочитаю 2-й...

Есть еще какие-нибудь идеи? Есть какие-нибудь предложения?

Author: sv3n, 2017-06-30

1 answers

Пока решил это так:

Layout.xml

<action method="addItem" ifconfig="[section]/[group]/enabled">
    <type>skin_js</type>
    <name>path/to/file1.js</name>
</action>

Config.xml

<adminhtml>
    <events>
        <admin_system_config_changed_section_[section]>
            <observers>
                <module_enabledisable>
                    <class>[module]/observer</class>
                    <method>setConfig</method>
                </module_enabledisable>
            </observers>
        </admin_system_config_changed_section_[section]>
    </events>
</adminhtml>

Observer.php

public function setModuleEnabledDisabled(Varien_Event_Observer $observer)
{
    if (!$website = $observer->getWebsite()) {
        $scope = 'default';
        $scopeId = 0;
    } elseif (!$store = $observer->getStore()) {
        $scope = 'websites';
        $scopeId = Mage::app()->getWebsite($website)->getId();
    } else {
        $scope = 'stores';
        $scopeId = Mage::app()->getStore($store)->getId();
    }

    if ($scope == 'websites') {
        $storeId = Mage::app()->getWebsite($website)->getDefaultStore()->getId();
    } else {
        $storeId = $scopeId;
    }

    $path = '[module]/[section]/';
    $value = Mage::getStoreConfigFlag($path . 'to_cart', $storeId)
          || Mage::getStoreConfigFlag($path . 'to_compare', $storeId)
          || Mage::getStoreConfigFlag($path . 'to_wishlist', $storeId);

    try {
        Mage::getConfig()->saveConfig($path . 'enabled', (int) $value, $scope, $scopeId);
    } catch (Exception $e) {
        Mage::log($e->getMessage());
    }
}

Если у вас есть какие-нибудь идеи получше...

 0
Author: sv3n, 2017-07-03 13:22:20