Как добавить пользовательскую ссылку в главное меню в Magento 2?


Я хочу добавить страницы CMS и Контактную страницу ссылку в главном меню.

Как добавить эти ссылки в главное меню и их подменю?

Author: Rafael Corrêa Gomes, 2017-12-20

2 answers

Скопировать файл из

vendor/magento/module-theme/view/frontend/templates/html/topmenu.phtml

И поместите этот файл в папку вашей темы

app/design/frontend/Vendor/YourTheme/Magento_Theme/templates/html/topmenu.phtml

Добавьте ниже <li> структуру сразу после строки <?php /* @escapeNotVerified */ echo $block->getChildHtml(); ?> в topmenu.phtml

<li class="level0 level-top ui-menu-item">
    <a href="<?php echo $this->getBaseUrl()."yourlink"; ?>" class="level-top ui-corner-all"  role="menuitem">
        <span><?php echo __("Your Custom Menu")?></span>
    </a>
</li>
 12
Author: Suresh Chikani, 2019-07-16 06:25:05

Другой альтернативой является использование нового файла шаблона с помощью xml-макета.

./app/design/frontend/Company/Yourtheme/Magento_Theme/layout/default.xml

<?xml version="1.0"?>
<!--
/**
 * Copyright info.
 */
-->
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceBlock name="catalog.topnav">
            <block name="custom.menu.links" template="Magento_Theme::html/topmenu_custom.phtml"/>
        </referenceBlock>
    </body>
</page>

Затем используйте этот файл шаблона для создания html-ссылки.

./приложение/дизайн/интерфейс/Компания/Ваша тема/magento_theme/шаблоны/html/topmenu_custom.phtml

<?php
/** @var \Magento\Framework\View\Element\Template $block */
?>
<li class="level0 level-top ui-menu-item">
    <a href="<?php echo $this->getBaseUrl()."faq"; ?>" class="level-top ui-corner-all"  role="menuitem">
        <span><?= __("FAQ")?></span>
    </a>
</li>
<li class="level0 level-top ui-menu-item">
    <a href="<?php echo $this->getUrl('custom/index/index'); ?>" class="level-top ui-corner-all"  role="menuitem">
        <span><?= __("Custom Designs")?></span>
    </a>
</li>

Когда вы очистите кэш layout и block_html, они отобразятся в меню. Примечание:

  • Таким образом, мы не будем касаться оригинала topmenu.phtml
  • Для вывода будет использоваться файл topmenu.phtml $block->getChildHtml()
  • В xml-файлах макета если вы игнорируете атрибут class="" для блока, то по умолчанию будет использоваться класс \Magento\Framework\View\Element\Template.

Надеюсь, это поможет

 7
Author: Dilhan Maduranga, 2019-07-16 03:16:44