Добавление пользовательских активных ссылок для навигации по учетной записи клиента в Magento 2

10

Я пытаюсь добавить пользовательскую ссылку в навигацию по учетной записи клиента. Моя пользовательская ссылка отображается в навигации по аккаунту и работает, но она не отображается как активная / текущая при клике.

введите описание изображения здесь

Ниже приведен код, который я имею:

/app/code/Namespace/Support/view/frontend/layout/customer_account.xml

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceBlock name="customer_account_navigation">
            <block class="Magento\Framework\View\Element\Html\Link\Current" name="customer-account-navigation-suppport-ticket-link" after="-">
                <arguments>
                    <argument name="path" xsi:type="string">support/customer/index</argument>
                    <argument name="label" xsi:type="string">Support Ticket</argument>
                </arguments>
            </block>
        </referenceBlock>
    </body>
</page>

/app/code/Namespace/Support/Controller/Customer/Index.php

<?php
namespace Namespace\Support\Controller\Customer;

use Magento\Framework\App\Action;
use Magento\Framework\Exception\NotFoundException;
use Magento\Framework\Controller\ResultFactory;

class Index extends \Namespace\Support\Controller\Index
{
    /**
     * Show customer tickets
     *
     * @return \Magento\Framework\View\Result\Page
     * @throws NotFoundException
     */
    public function execute()
    {
        /** @var \Magento\Framework\View\Result\Page resultPage */
        $resultPage = $this->resultFactory->create(ResultFactory::TYPE_PAGE);
        return $resultPage;
    }
}

/app/code/Namespace/Support/view/frontend/layout/support_customer_index.xml

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <update handle="customer_account"/>
    <head>
        <title>Support Ticket</title>
        <css src="Namespace_Support::css/styles.css"/>
    </head>
    <body>
        <referenceContainer name="content">
            <block class="Namespace\Support\Block\TicketList" name="ticketViewList" template="Namespace_Support::list.phtml" />
        </referenceContainer>
    </body>
</page>
Shyam
источник
6
Измените путь с <argument name="path" xsi:type="string">support/customer/index</argument> на<argument name="path" xsi:type="string">support/customer</argument>
Codrain Technolabs Pvt Ltd
Дайте мне знать, если это поможет
Codrain Technolabs Pvt Ltd
@YagneshPonkiya. Спасибо за ваш быстрый ответ. Да, это работает. Поместите ваш комментарий в качестве ответа, чтобы я мог принять.
Shyam
@YagneshPonkiya. Кроме того, не могли бы вы сказать мне, в чем была проблема? Почему мы должны были изменить это? Заранее спасибо.
Shyam
@Shyam, вы закончили этот модуль? Я создаю ту же функциональность в моем проекте M2. Итак, не могли бы вы рассказать мне, как я могу создать эту функцию? Спасибо
mageDev0688

Ответы:

23

Чтобы добиться цели, измените путь в файле макета, как показано ниже.

<argument name="path" xsi:type="string">support/customer</argument>

Пожалуйста, обратите внимание, я удалил часть действия из строки пути.

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

Magento \ Framework \ View \ Элемент \ Html \ Ссылка \ Current.php

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

Codrain Technolabs Pvt Ltd
источник
Если у меня есть другое имя действия вместо Index, то не называется ....
Manish
если у вас есть другие действия, кроме «индекса». Вы должны использовать полный путь, например, «support / customer / abc». Также убедитесь, что ваше имя и идентификатор маршрута совпадают.
Codrain Technolabs Pvt Ltd
@YagneshPonkiya, в настоящий момент я сталкиваюсь с той же проблемой, и я поставил здесь вопрос, я пытался использовать приведенный выше код, но у меня проблема 404 страницы.
mageDev0688
@ Ягнешь, если я нахожусь на странице клиента / аккаунта / страницы, то в меню есть класс "текущий". Однако, если я нахожусь на странице клиента / учетной записи / редактирования, «текущий» класс отсутствует. Вы можете помочь? Я хочу, чтобы "текущий" класс был в меню и для внутренних страниц.
Седжал Шах
@YagneshPonkiya А как насчет страницы CMS?
Nitesh
2

Вы можете написать в своем собственном макете

<referenceBlock name="customer-account-navigation-suppport-ticket-link">
                <arguments>
                    <argument name="current" xsi:type="boolean">true</argument>
                </arguments>
    </referenceBlock>
цветистый
источник