如何在v2.1中覆盖块
我正在尝试覆盖Magento 2.1中的Topmenu块,但找不到任何指导。我在这里和其他地方找到的所有内容似乎仅适用于2.0版,该版本似乎使用了不同的文件夹结构,或者仅包含部分代码示例,希望我已经知道它们的适当上下文(我不知道)。 我当前的自定义主题文件夹结构为app/design/frontend/Vendor/theme_name。在其中,我有注册,主题和作曲家文件以及各个模块(例如Magento_Theme和)的文件夹Magento_Search。 据我了解,我需要etc/di.xml从如下文件开始,从这里编辑: <?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"> <preference for="Magento\Theme\Block\Html\Topmenu" type="[Namespace]\[Module]\Block\Html\Topmenu" /> </config> 我也了解下一步是添加一个Block/Html/Topmenu.php类似下面的文件(同样从上面的源代码编辑): namespace [Namespace]\[Module]\Block\Html; class Topmenu extends \Magento\Theme\Block\Html\Topmenu { protected function _addSubMenu($child, $childLevel, $childrenWrapClass, $limit) { } } 但是,我不清楚我应该用于[Namespace]和以及[Module]将这些文件放在何处。我尝试使用供应商和主题名称,并将etc和Block文件夹放在中app/design/frontend/Vendor/theme_name,以及将它们放在中app/design/frontend/Vendor/theme_name/Magento_Theme,将名称空间修改为Vendor\theme_name\Magento_Theme\Block\Html,但都没有任何效果。 如果有人可以帮助您确切地解释在2.1版中重写Topmenu块(以及通过推断任何其他块)需要做的事情,我将不胜感激。 附录 我尝试了Khoa TruongDinh的回答,但没有任何效果。我使用了以下文件: app/code/Vendor/MagentoTheme/Block/Html/Topmenu.php <?php namespace Vendor\MagentoTheme\Block\Html; class Topmenu extends \Magento\Theme\Block\Html\Topmenu { protected function _addSubMenu($child, $childLevel, $childrenWrapClass, …