Как устранить конфликт Raveinfosys_Deleteorder_Block_Adminhtml_Sales_Order_Grid и Df_Adminhtml_Block_Sales_Order_Grid

[10 ноября 2016 г.]    Российская сборка Magento 2.49.12
Magento 2: модули и услуги
#1 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8886
  • Регистрация: 20.02.2010

02.09.2014 18:01

Описание проблемы:
  • Предупреждение администратору:
    Системный класс «adminhtml/sales_order_grid» типа «block» перекрывают конфиктующие между собой классы:
        Raveinfosys_Deleteorder_Block_Adminhtml_Sales_Order_Grid [используется]
        Df_Adminhtml_Block_Sales_Order_Grid

  • Источник предупреждения: модуль «Рекомендации администратору»

Описание способа устранения проблемы:
Классы Raveinfosys_Deleteorder_Block_Adminhtml_Sales_Order_Grid и Df_Adminhtml_Block_Sales_Order_Grid перекрывают один и те же метод родительского системного класса Mage_Adminhtml_Block_Sales_Order_Grid: _prepareColumns.
Однако реализация этого метода у классов Raveinfosys_Deleteorder_Block_Adminhtml_Sales_Order_Grid и Df_Adminhtml_Block_Sales_Order_Grid не конфликтует между собой.
Это позволяет решить конфликт стандартным способом: изменив иерархию наследования.
Если один из конфликтующих классов — класс Российской сборки Magento (имя начинается с «Df_»), то, как правило, именно его рекомендуется делать родительским классом: при таком подходе правки делаются вне Российской сборки Magento и не перетираются при обновлении Российской сборки Magento.

Конкретная инструкция по устранению проблемы:
  • Изменить иерархию наследования:
    • Файл: app/code/community/Raveinfosys/Deleteorder/Block/Adminhtml/Sales/Order/Grid.php
    • Строка: 2
    • Что найти:
      class Raveinfosys_Deleteorder_Block_Adminhtml_Sales_Order_Grid extends Mage_Adminhtml_Block_Widget_Grid

    • На что заметить:
      class Raveinfosys_Deleteorder_Block_Adminhtml_Sales_Order_Grid extends Df_Adminhtml_Block_Sales_Order_Grid

  • Теперь после удаления кэша предупреждение должно пропасть.
    Обратите внимание, что в данном случае не требуется удалять директиву rewrite, потому что наши изменения не привели к изменению активного (используемого для перекрытия) класса, это по-прежнему класс Raveinfosys_Deleteorder_Block_Adminhtml_Sales_Order_Grid.
    В такой ситуации Российская сборка Magento «знает», что конфликтующие классы теперь находятся в родственном отношении родитель-сын, и не считает такую ситуацию конфоликтом, потому что класс-сын (Raveinfosys_Deleteorder_Block_Adminhtml_Sales_Order_Grid) наследует программную реализацию класса-отца.


Поделиться темой: