Конфликт [Megnor_AdvancedMenu_Block_Topmenu] [Df_Page_Block_Html_Topmenu]

[10 ноября 2016 г.]    Российская сборка Magento 2.49.12
Magento 2: модули и услуги
#1 Георгес Галич
  • Группа: Клиент
  • Сообщений: 8
  • Регистрация: 18.09.2014

03.10.2014 12:42

Описание проблемы:

  • Предупреждение администратору:


Системный класс «catalog/navigation» типа «block» перекрывают конфликтующие между собой классы:
Megnor_AdvancedMenu_Block_Navigation [используется]
Df_Catalog_Block_Navigation
Системный класс «page/html_topmenu» типа «block» перекрывают конфликтующие между собой классы:
Megnor_AdvancedMenu_Block_Topmenu [используется]
Df_Page_Block_Html_Topmenu


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


------------------

Попытки устранения проблемы:

  • Замена в файле app\code\local\Megnor\AdvancedMenu\Block\Topmenu.php


1. Строка

class Megnor_AdvancedMenu_Block_Topmenu extends Mage_Page_Block_Html_Topmenu


Замена на

class Megnor_AdvancedMenu_Block_Topmenu extends Df_Page_Block_Html_Topmenu


2. Строка

class Megnor_AdvancedMenu_Block_Topmenu extends Megnor_AdvancedMenu_Block_Navigation


Замена на

class Megnor_AdvancedMenu_Block_Topmenu extends Df_Catalog_Block_Navigation


  • Замена в файле app\code\local\Megnor\AdvancedMenu\Block\Navigation.php


Строка

class Megnor_AdvancedMenu_Block_Navigation extends Mage_Catalog_Block_Navigation


Замена на

class Megnor_AdvancedMenu_Block_Navigation extends Df_Catalog_Block_Navigation


Предупреждения не уходят. Даже после очистки кэша.

#2 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

03.10.2014 12:49

Опубликуйте целиком заголовки классов какими они были и какими они стали.

#3 Георгес Галич
  • Группа: Клиент
  • Сообщений: 8
  • Регистрация: 18.09.2014

03.10.2014 13:15

Я не программист. Опубликовал все, что мне написано в админке, и все действия, которые я сделал в попытках устранить проблему, основываясь на предыдущих сообщениях на этом форуме.

#4 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

03.10.2014 13:22

Опубликуйте целиком те участки программного кода, которые меняли: до изменения и после, по нескольку строк программного кода выше и ниже области внесения изменений.

#5 Георгес Галич
  • Группа: Клиент
  • Сообщений: 8
  • Регистрация: 18.09.2014

03.10.2014 13:29

Файл app\code\local\Megnor\AdvancedMenu\Block\Topmenu.php

Исходный

<?php

if (!Mage::getStoreConfig('advanced_menu/general/enabled') ||
   (Mage::getStoreConfig('advanced_menu/general/ie6_ignore') && Mage::helper('advancedmenu')->isIE6()))
{
class Megnor_AdvancedMenu_Block_Topmenu extends Mage_Page_Block_Html_Topmenu
    {

    }
    return;
}

class Megnor_AdvancedMenu_Block_Topmenu extends Megnor_AdvancedMenu_Block_Navigation
{

}


После моих правок

<?php

if (!Mage::getStoreConfig('advanced_menu/general/enabled') ||
   (Mage::getStoreConfig('advanced_menu/general/ie6_ignore') && Mage::helper('advancedmenu')->isIE6()))
{
class Megnor_AdvancedMenu_Block_Topmenu extends Df_Page_Block_Html_Topmenu
    {

    }
    return;
}

class Megnor_AdvancedMenu_Block_Topmenu extends Df_Catalog_Block_Navigation
{

}



Файл app\code\local\Megnor\AdvancedMenu\Block\Navigation.php

Исходный

<?php

class Megnor_AdvancedMenu_Block_Navigation extends Mage_Catalog_Block_Navigation
{
    const CUSTOM_BLOCK_TEMPLATE = "tm_advanced_menu_%d";

    private $_productsCount = null;

    public function showHomeLink()
    {
        return Mage::getStoreConfig('advanced_menu/general/show_home_link');
    }


После моих правок

<?php

class Megnor_AdvancedMenu_Block_Navigation extends Df_Catalog_Block_Navigation
{
    const CUSTOM_BLOCK_TEMPLATE = "tm_advanced_menu_%d";

    private $_productsCount = null;

    public function showHomeLink()
    {
        return Mage::getStoreConfig('advanced_menu/general/show_home_link');
    }


#6 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

03.10.2014 13:39

Для модуля Megnor AdvancedMenu надо использовать инструкцию
Как добавлять статьи в верхнее товарное меню при использовании модуля TemplateMela Megnor AdvancedMenu.
Если после аккуратного выполнения инструкции предупреждение не пропадёт, то удалите кэш и перезапустите интерпретатор PHP (пункт 8 инструкции по обновлению).

#7 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

03.10.2014 13:44

Другими словами, правка первого файла не нужна.
Правка второго файла - правильная.
Дополнительно надо сделать то, что написано в указанных инструкциях.

#8 Георгес Галич
  • Группа: Клиент
  • Сообщений: 8
  • Регистрация: 18.09.2014

03.10.2014 16:12

Первый файл вернул в исходное.
Изменил app/etc/modules/Megnor_AdvancedMenu.xml
Очистил кэш.
Предупреждения не пропадают.
Нужен root пароль к серверу, для его рестарта. не нашел его в данных, которые Вы дали.

#9 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

03.10.2014 16:15

Нарушение пункта 3 правил публикации сообщений.

#10 Георгес Галич
  • Группа: Клиент
  • Сообщений: 8
  • Регистрация: 18.09.2014

03.10.2014 16:40

Пункт 3 правил публикаций сообщений на этом форуме:

Цитата

Одна тема — один вопрос.
Два вопроса в одной теме задавать запрещено.
Для одного вопроса создавать несколько тем запрещено
В тему, созданную другим посетителем разрешено писать только в том случае, если Ваш вопрос в точности совпадает с вопросом этого посетителя.


Мое предыдущее сообщение содержит продолжение темы первого сообщения. Пытаюсь устранить проблему по инструкциям, которые Вы дали. Для рестарта сервера нужен рут. Мне для этого отдельную тему создать?

#11 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

03.10.2014 16:41

Нарушение пункта 3 правил публикации сообщений.

#12 Георгес Галич
  • Группа: Клиент
  • Сообщений: 8
  • Регистрация: 18.09.2014

03.10.2014 17:02

После ребута сервера осталось только одно предупреждение:

Системный класс «page/html_topmenu» типа «block» перекрывают конфликтующие между собой классы:
Megnor_AdvancedMenu_Block_Topmenu [используется]
Df_Page_Block_Html_Topmenu


#13 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

03.10.2014 17:12

Такая ситуация возможна только если модуль Megnor AdvancedMenu был зачем-то отключен и, таким образом, выполняется условие
!Mage::getStoreConfig('advanced_menu/general/enabled'

В таком случае попробуйте внести правки дополнительно в первый файл.
Почти так, как Вы это изначально делали, но только наполовину, внутри условия указанного выше условия
!Mage::getStoreConfig('advanced_menu/general/enabled'
:

<?php

if (!Mage::getStoreConfig('advanced_menu/general/enabled') ||
   (Mage::getStoreConfig('advanced_menu/general/ie6_ignore') && Mage::helper('advancedmenu')->isIE6()))
{
class Megnor_AdvancedMenu_Block_Topmenu extends Df_Page_Block_Html_Topmenu
    {

    }
    return;
}

class Megnor_AdvancedMenu_Block_Topmenu extends Megnor_AdvancedMenu_Block_Navigation
{

}

После правок надо сделать то же, что и после предыдущих правок.

#14 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

03.10.2014 17:17

Чтобы после каждых правок не приходилось перезапускать интерпретатор PHP, в файле /etc/php5/fpm/conf.d/opcache.ini для опции opcache.validate_timestamps поставьте значение 1.
Тогда интерпретатор PHP сам будет знать, что файл изменился, по дате последнего изменения файла.
После правок opcache.ini интерпретатор PHP всё-таки придётся один раз перезапустить, чтобы он прочитал новые значения настроек.

#15 Георгес Галич
  • Группа: Клиент
  • Сообщений: 8
  • Регистрация: 18.09.2014

03.10.2014 18:09

Изменения в файл внес. Кэш очистил. Сервер перезагрузил. Предупреждение осталось.

#16 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

03.10.2014 18:28

После правок и при включенном модуле Megnor AdvancedMenu иерахия наследования стала
Megnor_AdvancedMenu_Block_Topmenu => Megnor_AdvancedMenu_Block_Navigation => Df_Catalog_Block_Navigation
Класс Df_Page_Block_Html_Topmenu в этой иерархии никак не участвует, поэтому система видит в этом конлфикт.
В целом, система права: функциональность класса Df_Page_Block_Html_Topmenu не сработает.
Но в данном случае это не так страшно, потому что функциональность Df_Page_Block_Html_Topmenu заключается только в кэшировании стандартного меню, что ускоряет отображение витрины в Российской сборке Magento по сравнению с Magento Community Edition.
То, что витрина не будет отображаться быстрей — нет ничего страшного, поэтому это предупреждение можно либо просто скрыть, либо из файла app/code/local/Df/Page/etc/config.xml можно удалить строку
<html_topmenu>Df_Page_Block_Html_Topmenu</html_topmenu>

и тогда предупреждение пропадёт.

#17 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

13.12.2014 13:46

Теперь при использовании Российской сборки Magento версии 2.42.0.1 или более новой предупреждение о конфликте пропадёт; алгоритм обнаружения конфликтов стал учитывать исключения из правил: что некоторые конфликты неопасны и их можно проигнорировать. Теперь они игнорируются автоматически.

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