Magento - Проверка наличия модуля?
У меня есть небольшой фрагмент кода в файле шаблона, который я ТОЛЬКО хочу запустить, если установлен определенный модуль. Я нашел приведенный ниже код, который вы можете использовать, чтобы узнать, активен ли модуль, но я хочу знать, установлен ли модуль.
$modules = Mage::getConfig()->getNode('modules')->children();
$modulesArray = (array)$modules;
if($modulesArray['Mage_Paypal']->is('active')) {
echo "Paypal module is active.";
} else {
echo "Paypal module is not active.";
}
Я думаю, что мог бы получить список имен всех модулей, которые были установлены, а затем использовать
if (stristr($modulelist, 'Name_Extension'))
чтобы показать мой код только в том случае, если установлено расширение с ссылкой.
Кто-нибудь знает, как это сделать? Или любые лучшие решения?
Ответы
Ответ 1
Попробуйте следующее:
$modules = Mage::getConfig()->getNode('modules')->children();
$modulesArray = (array)$modules;
if(isset($modulesArray['Mage_Paypal'])) {
echo "Paypal module exists.";
} else {
echo "Paypal module doesn't exist.";
}
Ответ 2
Для этого есть основной помощник:
Mage::helper('core')->isModuleEnabled('MyCompany_MyModule');
В Mage_Core_Helper_Abstract
.
Также существует метод isModuleOutputEnabled()
для проверки того, отключен ли выход модуля в System → Configuration → Advanced → Disable Modules Output.
Ответ 3
Другой способ найти, установлен ли модуль, но отключен:
if (Mage::getStoreConfigFlag('advanced/modules_disable_output/Mage_Paypal')) {
echo "Paypal module is installed";
}
Edit
Только что поняли, что версия этого - с использованием малоизвестного ifconfig
- может показывать блок только в том случае, если другой модуль отключен. например.
<layout>
<default>
<reference name="content">
<block ifconfig="advanced/modules_disable_output/Mage_Paypal" type="core/template" template="sorry/this/is/unavailable.phtml" />
</reference>
</default>
</layout>
Ответ 4
Вы можете проверить, существует ли модуль при установке с использованием этого фрагмента Mage::getConfig()->getNode('modules/Mage_Paypal')
возвращает FALSE, если он не существует
Ответ 5
в объявлении вашего модуля, попробуйте добавить элемент depends
, например, на эту страницу.
Это, вероятно, вызовет исключение, с которым вы могли бы справиться с блоком try/catch.
Ответ 6
В любом классе, модели, контроллере или даже PHTML вы можете позвонить, и он будет работать.
Data.php
class Company_Module_Helper_Data extends Mage_Core_Helper_Abstract
{
const XML_PATH_GEN_ENABLE = 'Section/Group/Field';
public function isEnable()
{
return Mage::getStoreConfigFlag(XML_PATH_GEN_ENABLE,Mage::app()->getStore()->getId());
}
}
Вы можете позвонить, используя код ниже Mage::helper('module_name')->isEnable()
Ваш конфигурационный файл похож на
config.xml
<global>
<helpers>
<module_name>
<class>Company_Module_Helper</class>
</module_name>
</helpers>
// Another Necessary Code for this extension
</global>