Как добавить 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>
Идеи:
- добавьте помощника для каждого файла
- добавьте новое (скрытое?) поле в конфигурацию и в разделах
save_before
установите значение в зависимости от других полей - Расширенное расширение ifconfig уже установлено, но не знаю, как для настройки условий
На данный момент я предпочитаю 2-й...
Есть еще какие-нибудь идеи? Есть какие-нибудь предложения?
1
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