Cómo eliminar los enlaces del panel de la cuenta del cliente

39

¿Quiero eliminar los siguientes enlaces en el panel izquierdo del panel de la cuenta del cliente?

  • mis aplicaciónes
  • Registro de regalos
  • Puntos de recompensa
  • Enlace de tarjeta de regalo

Estoy trabajando en la edición comunitaria de Magento 1.7. Cualquier ayuda será apreciada.

Oshan
fuente
También puede usar esta extensión gratuita y fácil de conectar y usar
Gerard de Visser
Magento, donde algo aparentemente tan fácil se convierte en algo tan innecesariamente difícil.
Joshua34

Respuestas:

52

Paso 1: vaya a (yourPackage / YourTemplate / customer / account / navigation.phtml)

Paso 2: Reemplace la línea de abajo

<?php $count = count($links); ?>
        **With**
<?php $_count = count($_links); /* Add or Remove Account Left Navigation Links Here -*/
      unset($_links['account']); /* Account Info */     
      unset($_links['account_edit']); /* Account Info */            
      unset($_links['tags']); /* My Tags */
      unset($_links['invitations']); /* My Invitations */
      unset($_links['reviews']);  /* Reviews */
      unset($_links['wishlist']); /* Wishlist */
      unset($_links['newsletter']); /* Newsletter */
      unset($_links['orders']); /* My Orders */
      unset($_links['address_book']); /* Address */
      unset($_links['enterprise_customerbalance']); /* Store Credit */
      unset($_links['OAuth Customer Tokens']); /* My Applications */
      unset($_links['enterprise_reward']); /* Reward Points */
      unset($_links['giftregistry']); /* Gift Registry */
      unset($_links['downloadable_products']); /* My Downloadable Products */
      unset($_links['recurring_profiles']); /* Recurring Profiles */
      unset($_links['billing_agreements']); /* Billing Agreements */
      unset($_links['enterprise_giftcardaccount']); /* Gift Card Link */
?>

El fragmento de código anterior contiene la forma de eliminar todos los enlaces de navegación. Espero que esto ayude a todos.

Enlace de referencia: https://github.com/Aproducktion/Magento-Remove-Dashboard-Links

Oshan
fuente
55
Si puede arreglar algo usando los XML de diseño, le recomendaría usar una solución codificada como esta. @Marius su respuesta es mucho más limpia.
Sander Mangel
1
@SanderMangel, ¿quieres decir If you can't?
Pratik
2
No, quiere decir "aconsejaría en contra "
Fabian Schmengler
Esta respuesta no impide el acceso a la funcionalidad subyacente de los sistemas que intenta eliminar; se debe agregar un descargo de responsabilidad a la respuesta. Visitar las rutas correctas o utilizar curl permitirá un acceso sin restricciones.
Luke A. Leber
No, él quiere decir 'no aconsejaría '
Xenocide8998
28

Veo 2 opciones aquí.

Primero y más fácil: solo busque los archivos de diseño que agregan estos elementos de menú y comente el código para ellos.
Por ejemplo, My applicationsse agrega a app/design/frontend/{interface}/{theme}/layout/oauth.xmltravés de esta parte de XML

<customer_account>
    <reference name="customer_account_navigation">
        <action method="addLink" translate="label" module="oauth">
            <name>OAuth Customer Tokens</name>
            <path>oauth/customer_token</path>
            <label>My Applications</label>
        </action>
    </reference>
</customer_account>

El segundo método, que no estoy 100% seguro de que funcionará es agregar este xml dentro del local.xmlarchivo de diseño de su tema:

<customer_account>
    <reference name="customer_account_navigation">
        <action method="removeLinkByUrl"><url>oauth/customer_token</url></action>
    </reference>
</customer_account>

Debe agregar una <action>etiqueta para cada enlace que desea eliminar.

También existe la tercera opción, si no está utilizando los módulos, desactívelos. Esto también puede aumentar el rendimiento.
Para esto crea este archivo: app/etc/modules/Zzzz.xmlcon este contenido:

<config>
    <modules>
        <Mage_Oauth>
             <active>false</active>
        </Mage_Oauth>
    </modules>
</config>

Puede tener algunos problemas aquí, hay algunos otros módulos que desea utilizar, dependiendo de los que desea deshabilitar.

Marius
fuente
Gracias @Marius por la respuesta. Bueno, probé la segunda opción (removeLinkByUrl) que sugirió antes de plantear la pregunta. Pero parece que no funcionó para mí.
Oshan
44
La segunda opción no puede funcionar porque Mage_Customer_Block_Account_Navigationno hereda de Mage_Page_Block_Template_Links.
mpw
26

Hay una extensión FOSS que agrega la opción de back-end a los enlaces de cuenta remota.

Hay un segundo módulo (también FOSS) que agrega el removeLinkmétodo para que pueda usar lo siguiente en sulocal.xml

Descargo de responsabilidad: soy desarrollador de la segunda extensión.

<customer_account>
        <reference name="customer_account_navigation">
            <action method="removeLink"><name>OAuth Customer Tokens</name></action>
            <action method="removeLink"><name>billing_agreements</name></action>
            <action method="removeLink"><name>recurring_profiles</name></action>
        </reference>
 </customer_account>
Alex
fuente
Después de haber jugado con varias técnicas, desde anulaciones de local.xml a PHP, estas soluciones de código abierto son mis favoritas.
Michael Thompson
5

La solución más sencilla (aplicación y uso) que he encontrado es para reemplazar Mage_Customer_Block_Account_Navigationen app/code/localy añadir un removeLinkByNamemétodo, que hace lo mismo que lo la respuesta de Oshan hace, pero es utilizable a partir de archivos de diseño. Una reescritura de clase más tradicional también funcionaría, pero podría causar conflictos con un complemento.

¡Advertencia! ¡No probado!

Una solución más complicada sería escribir su propio módulo con uno Blockque extienda Mage_Customer_Block_Account_Navigatione incluya un removeLinkByNamemétodo. Para que esto funcione, tendría que quitar / desarmar el customer_account_navigationbloque y reemplazarlo con el de su nuevo módulo. A partir de entonces, cada vez que customer_account_navigationse haga referencia en el diseño, obtendrá una instancia con removeLinkByName.

mpw
fuente
Hice la segunda opción, es una buena cantidad de trabajo, pero funciona. Me llevó unas dos horas y trabajo como consultor de Magento a tiempo completo y desarrollador de PHP / Linux. Si alguien necesita detalles, envíame un PM.
siliconrockstar
la solución más simple es anular una clase Core cuando hay muchas soluciones más ordenadas?
Ria Weyprecht
5

Una solución rápida para eliminar todos los elementos de la lista Mi cuenta debajo de Mis pedidos, incluidos los Acuerdos de facturación, Perfiles recurrentes, Mis aplicaciones y Mis productos descargables. También eliminará los enlaces Mi lista de deseos y Mi boletín informativo, a través del sitio, probados en Magento 1.9:

Comente las líneas 31 - 66 de app / design / frontend / default / YOURTHEME / layout / wishlist.xml (si no existe, cópielo de app / design / frontend / rwd / default / layout / wishlist.xml)

<!--default>
    <reference name="top.links">
        <block type="wishlist/links" name="wishlist_link" />
        <action method="addLinkBlock"><blockName>wishlist_link</blockName></action>
    </reference>

    <!-- Mage_Wishlist -->
    <!--reference name="right">
        <block type="wishlist/customer_sidebar" name="wishlist_sidebar" as="wishlist" after="cart_sidebar" template="wishlist/sidebar.phtml" />
    </reference>
</default-->
<!--customer_account>
    <!-- Mage_Wishlist -->
    <!--reference name="customer_account_navigation">
        <action method="addLink" translate="label" module="wishlist" ifconfig="wishlist/general/active"><name>wishlist</name><path>wishlist/</path><label>My Wishlist</label></action>
    </reference-->
<!--/customer_account-->
<!--customer_account_index>
    <reference name="right">
        <action method="unsetChild"><name>wishlist</name></action>
    </reference>
</customer_account_index-->

Comente las líneas 47 - 65 de app / design / frontend / default / YOURTHEME / layout / newsletter.xml (si no existe, cópielo de app / design / frontend / rwd / default / layout / newsletter.xml)

newsletter </name> newsletter / manage / </path> Suscripciones a boletines </label> </action> </reference> </customer_account-->

<!--newsletter_manage_index translate="label">
    <label>Customer My Account Newsletter Subscriptions</label>
    <update handle="customer_account"/>
    <reference name="my.account.wrapper">
        <block type="customer/newsletter" name="customer_newsletter">
            <block type="page/html_wrapper" name="customer.newsletter.form.before" as="form_before" translate="label">
                <label>Newsletter Subscription Form Before</label>
            </block>
        </block>
    </reference>
</newsletter_manage_index!-->

CSS (ajuste según sus requisitos)

.block-account .block-content ul li:nth-last-child(1),  .block-account .block-content ul li:nth-last-child(2),  .block-account .block-content ul li:nth-last-child(3),  .block-account .block-content ul li:nth-last-child(4) {
display: none;
}

.cart-table .cart-links > li:last-child {
display:none;
}
Joshua34
fuente
5

Para evitar eliminar los enlaces, recomendaría asignar valores de ID basados ​​en la variable $ _index, para que pueda ocultar los enlaces a través de CSS.

Esto es lo que he hecho:

Desde yourPackage / YourTemplate / customer / account / navigation.phtml

        <?php foreach ($_links as $_link): ?>
            <?php $_last = ($_index++ >= $_count); ?>
            <?php if ($this->isActive($_link)): ?>
                <li class="current<?php echo ($_last ? ' last' : '') ?>" id="account-link-<?php echo $_index;?>"><strong><?php echo $_link->getLabel() ?></strong></li>
            <?php else: ?>
                <li<?php echo ($_last ? ' class="last"' : '') ?> id="account-link-<?php echo $_index;?>"><a href="<?php echo $_link->getUrl() ?>"><?php echo $_link->getLabel() ?></a></li>
            <?php endif; ?>
        <?php endforeach; ?>

Entonces obviamente puedes irte

        #account-link-1 {
            display:none;
        }

No hay una sola forma de desollar a un gato, pero esta es una opción rápida y fácil sin comprometer realmente ninguna funcionalidad.

Thomas Harding
fuente
1
Debe tener en cuenta explícitamente que esto no impedirá que los usuarios accedan a la funcionalidad detrás de las funciones en cuestión. El acceso completo es una edición de CSS o una edición rápida de la barra de direcciones ... así que no confíes en las personas que no usan las funciones.
Luke A. Leber
Eso es justo y entiendo totalmente de dónde vienes. No quería eliminar estrictamente esta funcionalidad, pero quería ocultarla porque el cliente sintió específicamente que esto podría confundir a sus clientes. ¡Cada uno a lo suyo, supongo!
Thomas Harding
5

Pensé que una mejor solución sería reescribir el bloque. Esto se mencionó anteriormente pero no hubo ningún ejemplo:

Agregue la reescritura a su config.xml en la sección global:

<blocks>
    <customer>
        <rewrite>
            <account_navigation>Your_Module_Block_Customer_Account_Navigation</account_navigation>
        </rewrite>
    </customer>
</blocks>

Anule addLink en Mage_Customer_Block_Account_Navigation:

class Your_Module_Block_Customer_Account_Navigation extends Mage_Customer_Block_Account_Navigation
{
    private $exclude_links = null;

    public function addLink($name, $path, $label, $urlParams=array())
    {
        if (!$this->exclude_links) {
            $this->exclude_links = array(
                'OAuth Customer Tokens', /* My Applications */
                'downloadable_products', /* My Downloadable Products */
                'recurring_profiles', /* Recurring Profiles */
                'billing_agreements' /* Billing Agreements */
            );
        }

        if (!in_array($name, $this->exclude_links)) {
            return parent::addLink($name, $path, $label, $urlParams);
        }
    }
}

La matriz exclude_links podría extraer una configuración si no desea codificar los enlaces excluidos.

N Lewis
fuente
3

esto es lo que busqué en Google sobre esto: http://magebase.com/magento-tutorials/5-useful-tricks-for-your-magento-local-xml/

Podemos cambiar casi todos los aspectos de diseño del diseño estándar de Magento, sin embargo, hay algunas situaciones en las que este enfoque falla. En particular, esto se manifiesta en el momento en que desea modificar el bloque top.links. Los elementos en este bloque se agregan utilizando el método de acción addLink, por lo que si se pregunta cómo eliminar algunos enlaces del conjunto predeterminado, la respuesta es que no puede. Desafortunadamente, la clase de bloque page / template_links no implementa un método de acción 'removeLink', por lo que el recurso es eliminar todo el bloque utilizando el enfoque unsetChild y agregar el bloque de enlaces nuevamente con nuestros propios enlaces agregados en local.xml.

melaxon
fuente
2

Primero quisiera que dijera que hay diferentes maneras de resolver sus problemas.

  1. Es la forma más fácil de encontrar el código en el layout.xmlarchivo dentro de la base que desea eliminar, por ejemplo: si quiero eliminar "Mis etiquetas", simplemente comente la parte.

    <customer_account>
        <!-- Mage_Tag -->
        <reference name="customer_account_navigation">
            <action method="addLink" translate="label" module="tag"><name>tags</name><path>tag/customer/</path><label>My Tags</label></action>
        </reference>
    </customer_account>

    Pero sabe que no debemos modificar el archivo base, por lo que otro método simple que se podría realizar es

  2. Desarmando el enlace en su archivo de plantilla. Para eso copie su navigation.phtmlarchivo a su tema (Nota: la estructura de la carpeta debe ser la misma) desde base\default\template\customer\account\navigation.phtml. que se muestra en la respuesta anterior.

  3. Otra tarea tediosa es reescribir su módulo principal y crear un método "RemoveLinkByName".

aton1004
fuente
2

Una solución completa para eliminar las funciones del panel de la cuenta incluye una modificación tanto del lado del cliente como del lado del servidor. Si solo se elimina y / u oculta el lado del cliente, entonces no hay nada que impida que los usuarios expertos en tecnología sigan accediendo a las funciones mediante la elaboración manual de las rutas en su navegador o mediante el uso de un "ataque" CURL más sofisticado (que puede incluir el correcto Token CSRF y deslizamiento directo).

El lado del cliente se logra fácilmente a través de actualizaciones XML como lo indica la gran cantidad de respuestas ya dadas.

El lado del servidor es un poco más complejo y requiere una comprensión de la funcionalidad que se está eliminando.

Personalmente, seguiría la ruta del uso de observadores para devolver condicionalmente los códigos de estado HTTP prohibidos en cada una de las rutas de la función que se elimina. Para averiguar qué rutas observar, abra el archivo del controlador asociado y encuentre cada una de las acciones de front-end que ya no deberían estar disponibles. Luego, cree un módulo que defina los campos de configuración del sistema para desactivar dicha función. Usando estos campos de configuración del sistema, actualice condicionalmente el XML de diseño de la interfaz y, de forma similar, devuelva los códigos de respuesta HTTP adecuados para cada ruta observada.

Los ejemplos de código para cada uno de los pasos anteriores se pueden encontrar a través de su motor de búsqueda favorito.

Luke A. Leber
fuente
1

Agregue a un archivo local.xml este código

<customer_account>
    <reference name="customer_account_navigation">
           <action method="addLink"><name>tags</name></action>
           <action method="addLink"><name>recurring_profiles</name></action>
           <action method="addLink"><name>newsletter</name></action>
           <action method="addLink"><name>billing_agreements</name></action>
           <action method="addLink"><name>OAuth Customer Tokens</name></action>
           <action method="addLink"><name>downloadable_products</name></action>
   </reference>   
</customer_account>

Probado en Magento 1.7.0.2

lavb
fuente
En Magento 1.8.1.0 esto da como resultado Advertencia: Falta argumento 2 para Mage_Customer_Block_Account_Navigation :: addLink ()
Anthony