Adicione links ativos personalizados à navegação da conta do cliente no Magento 2


10

Estou tentando adicionar um link personalizado na navegação da conta do cliente. Meu link personalizado está sendo exibido na navegação da conta e também está funcionando, mas não está ativo / atual ao clicar.

insira a descrição da imagem aqui

Abaixo está o código que tenho:

/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>

6
Alterar o caminho de <argument name="path" xsi:type="string">support/customer/index</argument> para<argument name="path" xsi:type="string">support/customer</argument>
Codrain Technolabs Pvt Ltd

Deixe-me saber se ajuda
Codrain Technolabs Pvt Ltd

@YagneshPonkiya. Obrigado pela sua resposta rápida. Sim, está funcionando. Coloque seu comentário como resposta para que eu possa aceitar.
Shyam

@YagneshPonkiya. Além disso, você pode me dizer qual foi o problema? Por que precisamos mudar isso? Desde já, obrigado.
Shyam

@Shyam, você completou este módulo? Estou criando a mesma funcionalidade no meu projeto M2. Então, você poderia me orientar como posso criar essa funcionalidade? Obrigado
mageDev0688

Respostas:


23

Para concluir, altere o caminho no seu arquivo de layout, como abaixo.

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

Observe que eu removi a parte da ação da string do caminho.

Para mais informações, por que você precisa fazer isso, estude o arquivo abaixo.

Magento \ Framework \ View \ Element \ Html \ Link \ Current.php

Espero que isso ajude você.


Se eu tiver outro nome em vez do Índice de ação, então doesnot não é chamado ....
Manish

se você tiver outra ação que não seja "index". você deve usar o caminho completo como "support / customer / abc". Verifique também se o nome da frente e o ID da rota são iguais.
Codrain Technolabs Pvt Ltd

@ YagneshPonkiya, estou enfrentando o mesmo problema no momento e coloquei a pergunta aqui , tentei com o código acima, mas estou tendo um problema de página 404.
MageDev0688

@ Yagnesh se eu estiver no cliente / conta / página, o menu tem a classe "atual". No entanto, se eu estiver na página cliente / conta / edição, a classe "atual" não estará presente. Você pode ajudar? Também quero ter a classe "atual" no menu de páginas internas.
Sejal Shah

@YagneshPonkiya What about cms page?
Nitesh

2

Você pode escrever em seu layout personalizado

<referenceBlock name="customer-account-navigation-suppport-ticket-link">
                <arguments>
                    <argument name="current" xsi:type="boolean">true</argument>
                </arguments>
    </referenceBlock>
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.