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>
Shyam
la source
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.

Codrain Technolabs Pvt Ltd
la source
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>
Flamboyant
la source