Agregue enlaces activos personalizados a la navegación de la cuenta del cliente en Magento 2

10

Estoy tratando de agregar un enlace personalizado en la navegación de la cuenta del cliente. Mi enlace personalizado se muestra en la navegación de la cuenta y también funciona, pero no se muestra como activo / actual al hacer clic.

ingrese la descripción de la imagen aquí

A continuación se muestra el código que tengo:

/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
fuente
66
Cambiar el camino de <argument name="path" xsi:type="string">support/customer/index</argument> a<argument name="path" xsi:type="string">support/customer</argument>
Codrain Technolabs Pvt Ltd
Avíseme si ayuda
Codrain Technolabs Pvt Ltd
@YagneshPonkiya. Gracias por tu rápida respuesta. Si, esta funcionando. Pon tu comentario como respuesta para que pueda aceptar.
Shyam
@YagneshPonkiya. Además, ¿puede decirme cuál fue el problema? ¿Por qué necesitábamos cambiar eso? Gracias por adelantado.
Shyam
@Shyam, ¿Has completado este módulo? Estoy creando la misma funcionalidad en mi proyecto M2. Entonces, ¿podría guiarme cómo puedo crear esta funcionalidad? Gracias
mageDev0688

Respuestas:

23

Para hacer las cosas, cambie la ruta en su archivo de diseño como se muestra a continuación.

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

Tenga en cuenta que he eliminado la parte de acción de la cadena de ruta.

Para obtener más información, por qué necesita hacer esto, estudie el archivo a continuación.

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

Espero que esto te ayudará.

Codrain Technolabs Pvt Ltd
fuente
Si tengo otro nombre de acción en lugar de Index, entonces no se llama ...
Manish
si tiene otra acción que no sea "index". debe usar la ruta completa como "support / customer / abc". También asegúrese de que su nombre de usuario y su ID de ruta sean los mismos.
Codrain Technolabs Pvt Ltd
@YagneshPonkiya, estoy enfrentando el mismo problema en este momento y he puesto una pregunta aquí. He intentado con el código anterior pero estoy recibiendo un problema de 404 páginas.
mageDev0688
@Yagnesh si estoy en cliente / cuenta / página, entonces el menú tiene la clase "actual". Sin embargo, si estoy en la página cliente / cuenta / editar, la clase "actual" no está presente. ¿Puede usted ayudar? Quiero tener una clase "actual" en el menú para páginas internas también.
Sejal Shah
@YagneshPonkiya ¿Qué pasa con la página de cms?
Nitesh
2

Puedes escribir en tu diseño personalizado

<referenceBlock name="customer-account-navigation-suppport-ticket-link">
                <arguments>
                    <argument name="current" xsi:type="boolean">true</argument>
                </arguments>
    </referenceBlock>
Extravagante
fuente