Я потратил много времени, копаясь в модуле темы и пустых шаблонах, пытаясь внести изменения в основную навигацию Magento2. До сих пор я создал собственный модуль для управления контентом, отображаемым на странице (Добавление ссылок на subnav), но я не могу понять, где находится меню навигации javaScript.
Я вижу файл navigation.menu.js в пустом шаблоне и файл menu.js в модуле темы, но ни одно из них не относится к главному меню, и я не могу найти другие места для поиска JS.
Поскольку блок генерируется XML и навигация, похоже, выполняется в пользовательском интерфейсе jQuery, у меня не так много возможностей для поиска. До сих пор я в основном изменял пользовательский шаблон, построенный на базовом шаблоне, выполняя поиск в каталоге поставщиков, но я выхожу пустым.
Я использую Magento 2.1 с пользовательским шаблоном, созданным на основе базового шаблона. Если кто-нибудь и укажет мне правильное направление, это будет очень полезно.
Edit1:
Итак, после еще большего количества поисков и поисков я наконец нашел второй файл menu.js в lib / web / mage, который, кажется, является правильным местом, однако сейчас я не могу его переопределить.
С моей новой информацией я фактически наткнулся на документы разработчиков Magento2, в которых есть пример переопределения меню и меню администратора. Поэтому я добавил следующее в мой модуль
Пространство имен / модуль / просмотр / интерфейс / требуют-config.js
var config = {
map: {
'*': {
'menu': 'Test_Topmenu/js/navigation-menu'
}
}
};
Пространство имен / модуль / вид / интерфейс / веб / JS / навигации-menu.js
define([
'jquery',
'jquery/ui',
'mage/menu'
], function ($) {
"use strict";
$.widget('Test_Topmenu.navigationMenu', $.mage.menu, {
_init: function () {
console.log('new init');
}
});
return $.Test_Topmenu.navigationMenu;
});
Теперь, просматривая файл vendor / magento / module-theme / view / frontend / templates / html / topmenu.phtml, я вижу, что они использовали data-mage-init виджета меню. Насколько я понимаю, для этого следует использовать измененную версию файла, однако, похоже, она не работает. Я добавил консольный журнал в init по умолчанию и перепробовал многочисленные коннотации случаев и пространств имен, чтобы убедиться, что я их не настроил неправильно (я видел много примеров, но люди обычно используют или не используют в других местах) , но я не могу получить новый init для вызова.
Я также очищал каталог pub / static / frontend и повторно развертывал после каждого изменения, чтобы убедиться, что только правильные версии могут быть вызваны.