- Предупреждение администратору:
Системный класс «catalog/navigation» типа «block» перекрывают конфликтующие между собой классы: ThemeOptions_ExtraConfig_Block_Html_Topmenu[используется] Df_Page_Block_Html_Topmenu
- Источник предупреждения: модуль «Рекомендации администратору»
Описание способа устранения проблемы:
Классы ThemeOptions_ExtraConfig_Block_Html_Topmenu и Df_Page_Block_Html_Topmenu перекрывают один и те же метод _getHtml родительского системного класса Mage_Page_Block_Html_Topmenu.
Обратите внимание, что класс Df_Page_Block_Html_Topmenu в своей реализации вызывает родительский метод (parent::_getHtml()), в то время как класс ThemeOptions_ExtraConfig_Block_Html_Topmenu — не вызывает.
Это значит, что что если сделать родителем класс Df_Page_Block_Html_Topmenu: то класс-сын ThemeOptions_ExtraConfig_Block_Html_Topmenu не вызовет родительскую реализацию метода parent::_getHtml().
Поэтому оба возможных варианта устранения конфликта имеют свои недостатки:
- если сделать родителем Df_Page_Block_Html_Topmenu — то его реализация метода _getHtml не будет работать
- если сделать родителем ThemeOptions_ExtraConfig_Block_Html_Topmenu, то придется вносить правки в исходный код Российской сборки.
Я рекомендую в данной конкретной ситуации вариант 1, потому что метод Df_Page_Block_Html_Topmenu::_getHtml() — это всего лишь оптимизация родительского метода Mage_Page_Block_Html_Topmenu::_getHtml(), она позволяет ускорить отображение страницы (формирование товарного меню) по сравнению с Magento Community Edition.
Можно безболезненно отказаться от Df_Page_Block_Html_Topmenu::_getHtml(), и в то же время вариант 1 позволяет обновлять Российскую сборку без правок.
Конкретная инструкция по устранению проблемы:
- Изменить иерархию наследования:
- Файл: app/code/local/ThemeOptions/ExtraConfig/Block/Html/Topmenu.php
- Строка: 34
- Что найти:
ThemeOptions_ExtraConfig_Block_Html_Topmenu extends Mage_Core_Block_Template
- На что заметить:
ThemeOptions_ExtraConfig_Block_Html_Topmenu extends Df_Catalog_Block_Navigation
- Файл: app/code/local/ThemeOptions/ExtraConfig/Block/Html/Topmenu.php
- Теперь после удаления кэша предупреждение должно пропасть.
Обратите внимание, что в данном случае не требуется удалять директиву rewrite, потому что наши изменения не привели к изменению активного (используемого для перекрытия) класса, это по-прежнему класс ThemeOptions_ExtraConfig_Block_Html_Topmenu.
В такой ситуации Российская сборка Magento «знает», что конфликтующие классы теперь находятся в родственном отношении родитель-сын, и не считает такую ситуацию конфоликтом, потому что класс-сын (ThemeOptions_ExtraConfig_Block_Html_Topmenu) наследует программную реализацию класса-отца.