Как предотвратить переписывание модуля в классе в Magento
-
16-10-2019 - |
Вопрос
У меня есть проблема переписывания класса в OnePage OnePage, так как у меня есть пользовательский модуль в локальном пуле кода и расширение третьей стороны в пуле кодов сообщества, оба расширяют один и тот же класс ...
Я пытался добавить узел. Modulea_name.xml файл одного модуля, а затем расширяет класс Moduleb в OnePage.php Файл, но это не сработало.
Может ли кто -нибудь дать мне голову о том, как это сделать, я знаю, что есть еще один способ сделать это с помощью наблюдателя, но в данный момент мне может просто понадобиться решение? Кроме того, было бы опасно для меня использовать зависимость с тех пор, как Moduleb Может быть включен только для разных магазинов/просмотров, это будет означать, что зависимый модуль больше не будет работать?
Заранее спасибо за помощь ...
Модулеа
<global>
<rewrite>
<moduleA>
<from><![CDATA[#^/checkout/onepage/#]]></from>
<to>/moduleA/onepage/</to>
</moduleA>
<moduleA>
<from><![CDATA[#^/checkout/cart/add/#]]></from>
<to>/moduleA/cart/add/</to>
</moduleA>
</rewrite>
Moduleb
<global>
<models>
<salesrep>
<class>ModuleB_SalesRep_Model</class>
<resourceModel>salesrep_mysql4</resourceModel>
</salesrep>
<salesrep_mysql4>
<class>ModuleB_SalesRep_Model_Mysql4</class>
<entities>
<salesrep>
<table>salesrep</table>
</salesrep>
</entities>
</salesrep_mysql4>
<checkout>
<rewrite>
<type_onepage>ModuleB_SalesRep_Model_Type_Onepage</type_onepage>
</rewrite>
</checkout>
<modulebadminthemecontroller>
<class>LucidPath_SalesRep_Controller</class>
</modulebadminthemecontroller>
</models>
</global>
Решение
У вас есть 3 варианта для разрешения конфликтов:
- Объедините код из одного противоречивого файла в другой и выключите перезапись config.xml в одной
- Выключите перезапись в одном config.xml, а затем сделайте конфликтующий PHP -файл расширения расширить другое расширение
- Использовать
<depends>
Возможность сделать одно расширение зависит от другого. Затем они переписаны в таком порядке
Пример (вариант № 2)
class A_Extension_Model_Type_Onepage extends Mage_Checkout_Model_Type_Onepage
Вы бы изменили это на:
class A_Extension_Model_Type_Onepage extends B_Extension_Model_Type_Onepage
Видеть https://stackoverflow.com/questions/14815717/multiple-modules-overriding-same-core-file-in-magento