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>

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

@シャム、このモジュールを完了しましたか?M2プロジェクトで同じ機能を作成しています。それで、この機能を作成する方法を教えていただけませんか?ありがとう
mageDev0688

回答:


23

作業を完了するには、レイアウトファイルのパスを以下のように変更してください。

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

パス文字列からアクション部分を削除したことに注意してください。

詳細については、なぜこれを行う必要があるのか​​、以下のファイルをご覧ください。

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

これがあなたを助けることを願っています。


Indexの代わりに別のアクション名を指定しても、呼び出されません...
Manish

「インデックス」以外のアクションがある場合。「support / customer / abc」のような完全なパスを使用する必要があります。また、フロントネームとルートIDが同じであることを確認してください。
Codrain Technolabs Pvt Ltd 2016

@YagneshPonkiya、私は現在同じ問題に直面しており、ここに質問を投げかけました。上記のコードで試しましたが、404ページの問題が発生しています。
mageDev0688

@Yagnesh私が顧客/アカウント/ページにいる場合、メニューには「current」というクラスがあります。ただし、顧客/アカウント/編集ページにいる場合、「現在の」クラスは存在しません。手伝ってくれますか?内部ページのメニューにも「現在の」クラスを設定したいと考えています。
Sejal Shah 2017

@YagneshPonkiya cmsページはどうですか?
Nitesh 2017

2

あなたはカスタムレイアウトで書くことができます

<referenceBlock name="customer-account-navigation-suppport-ticket-link">
                <arguments>
                    <argument name="current" xsi:type="boolean">true</argument>
                </arguments>
    </referenceBlock>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.