Ajouter des liens actifs personnalisés à la navigation du compte client dans Magento 2


10

J'essaie d'ajouter un lien personnalisé dans la navigation du compte client. Mon lien personnalisé s'affiche dans la navigation du compte et fonctionne également, mais il ne s'affiche pas comme actif / actuel au clic.

entrez la description de l'image ici

Voici le code que j'ai:

/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
Changer le chemin de <argument name="path" xsi:type="string">support/customer/index</argument> à<argument name="path" xsi:type="string">support/customer</argument>
— Codrain Technolabs Pvt Ltd

Faites-moi savoir si cela aide
— Codrain Technolabs Pvt Ltd

@YagneshPonkiya. Merci pour votre réponse rapide. Oui, ça marche. Mettez votre commentaire comme réponse pour que je puisse l'accepter.
— Shyam

@YagneshPonkiya. Pouvez-vous également me dire quel était le problème? Pourquoi avons-nous dû changer cela? Merci d'avance.
— Shyam

@Shyam, avez-vous terminé ce module? Je crée la même fonctionnalité dans mon projet M2. Alors, pourriez-vous s'il vous plaît me guider comment je peux créer cette fonctionnalité? Merci
— mageDev0688

Réponses:


23

Pour faire avancer les choses, veuillez changer le chemin dans votre fichier de mise en page comme ci-dessous.

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

Veuillez noter que j'ai supprimé la partie action de la chaîne de chemin d'accès.

Pour plus d'informations, pourquoi vous devez le faire, veuillez étudier le fichier ci-dessous.

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

J'espère que cela vous aidera.


Si j'ai un autre nom d'action au lieu d'Index, alors je ne l'appelle pas ....
— Manish

si vous avez une autre action que "index". vous devez utiliser le chemin complet comme "support / client / abc". Assurez-vous également que votre frontname et votre identifiant d'itinéraire sont identiques.
— Codrain Technolabs Pvt Ltd

@YagneshPonkiya, je suis confronté au même problème en ce moment et j'ai posé la question ici, j'ai essayé avec le code ci-dessus, mais je reçois un problème de page 404.
— mageDev0688

@Yagnesh si je suis client / compte / page alors le menu a la classe "courant". Cependant, si je suis sur la page client / compte / édition, la classe "actuelle" n'est pas présente. Pouvez-vous m'aider? Je veux aussi avoir la classe "actuelle" dans le menu des pages internes.
— Sejal Shah

@YagneshPonkiya Qu'en est-il de la page cms?
— Nitesh

2

Vous pouvez écrire dans votre mise en page personnalisée

<referenceBlock name="customer-account-navigation-suppport-ticket-link">
                <arguments>
                    <argument name="current" xsi:type="boolean">true</argument>
                </arguments>
    </referenceBlock>
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.