Изящное ухудшение зависимости от модуля
Краткая предыстория: Мы используем стороннее расширение, поэтому отправляйте почту с помощью Mandrill. Это расширение выполняет это, переопределяя метод core/email_template::send()
. Мне нужно внедрить фильтр электронной почты, чтобы остановить отправку всех электронных писем на определенные поддельные адреса электронной почты, что я бы сделал, также переопределив core/email_template::send()
. Достаточно просто, я бы просто убедился, что мой модуль зависит от стороннего расширения, используя <depend>
в конфигурации моего модуля.
Проблема: Если мы решаем деактивировать или удалить стороннее расширение Mandrill, мой модуль фильтрации электронной почты перестанет работать, поскольку он зависит от стороннего расширения. Я бы хотел, чтобы он продолжал работать без необходимости вносить в него какие-либо изменения.
Возможное решение: Удалите <depend>
и порядок загрузки модуля magentos разрешит его.
Насколько я понимаю magento, модули загружаются в порядке core
, community
и последний local
, а затем в алфавитном порядке внутри этих бассейнов? Поскольку стороннее расширение размещено в пуле сообщества, а мой модуль находится в локальном пуле, мой модуль всегда будет переопределяться, и все будет работать так, как ожидалось. Однако я не считаю, что это очень надежное решение. Если модули будут перемещены в другие пулы или переименованы, все может перестать работать правильно, и никто этого не заметит.
1 answers
Как сказал Cags, вы можете выполнять различные расширения, например, вы можете поместить это в начало файла перезаписи и расширить перезапись с Custom_Modulename_Model_Email_Template_base
if (
Mage::helper('core')->isModuleEnabled('module_name') &&
Mage::getStoreConfig('modulename/general/enabled')
) {
class Custom_Modulename_Model_Email_Template_Base
extends 3rdParty_Modulename_Email_Template
{
}
} else {
class Custom_Modulename_Model_Email_Template_Base
extends Mage_Core_Model_Email_Template
{
}
}