我继承了一个需要从 2.1 升级到更新版本的 Magento 项目,因此我对 Magento 2.4.3 进行了更新。大多数事情似乎都没有问题,但是顶部菜单中的主导航没有呈现。
在我的design/frontend/<VENDOR>/<THEME>/templates/html/topmenu.phtml
文件中,我有以下代码:
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
$columnsLimit = $block->getColumnsLimit() ?: 0;
$_menu = $block->getHtml('level-top', 'submenu', $columnsLimit);
?>
<nav class="navigation" data-action="navigation">
<ul data-mage-init='{"menu":{"responsive":true, "expanded":true, "position":{"my":"left top","at":"left bottom"}}}'>
<?= /* @noEscape */ $_menu ?>
<?= $block->getChildHtml() ?>
</ul>
</nav>
在我的自定义design/frontend/<VENDOR>/<THEME>/layout/default.xml
文件中,我添加了以下代码:
<referenceContainer name="store.menu">
<block class="<VENDOR>\Theme\Block\Html\Topmenu" name="catalog.topnav" template="Magento_Theme::html/topmenu.phtml" />
</referenceContainer>
该类引用的块只是在 中找到的原始块的复制/粘贴app/code/Magento/Theme/Block/Html/Topmenu.php
,因此没有进行自定义编辑。
使用原始块根本不会显示该块。相反,使用Magento\Framework\View\Element\Template
我的自定义块时,会呈现一个空块。
这是输出:
<nav class="navigation" data-action="navigation">
<ul id="ui-id-2" class="ui-menu ui-widget ui-widget-content ui-corner-all" role="menu" tabindex="0">
<!-- Nothing in here -->
</ul>
</nav>
而我希望为每个类别及其子项呈现不同的列表项。
所有类别都已启用并包含在菜单中,并且都是后端为商店视图选择的主根类别的所有子类别。
如果我尝试记录返回的内容,$block->getHtml()
我会得到一个空字符串。
Magento 使用内置缓存,而不是 Varnish,并且所有内容都可以编译而没有任何错误。
可能是什么问题呢?