Como remover links do painel da conta do cliente

39

Quero remover os seguintes links no painel esquerdo do painel da conta do cliente?

  • As minhas aplicações
  • Registro de presentes
  • Pontos de recompensa
  • Gift Card Link

Estou trabalhando no Magento 1.7 Community Edition. Qualquer ajuda será apreciada.

Oshan
fonte
Você também pode usar esta extensão gratuita e fácil 'plug and play': magentocommerce.com/magento-connect/…
Gerard de Visser
Magento, onde algo aparentemente fácil se transforma em algo desnecessariamente difícil.
precisa saber é o seguinte

Respostas:

52

Etapa 1: Vá para (yourPackage / YourTemplate / customer / account / navigation.phtml)

Etapa 2: Substitua a linha abaixo

<?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 */
?>

O trecho de código acima contém a maneira de remover todos os links de navegação. Espero que isso ajude a todos.

Link de referência: https://github.com/Aproducktion/Magento-Remove-Dashboard-Links

Oshan
fonte
5
Se você pode consertar algo usando os XML de layout, aconselho usar uma solução codificada como esta. @Marius, sua resposta é muito mais limpa.
Sander Mangel
11
@SanderMangel, você quer dizer If you can't??
Pratik
2
Não, ele quer dizer "Eu aconselho contra " #
Fabian Schmengler
Esta resposta não impede o acesso à funcionalidade subjacente dos sistemas que ele tenta remover - um aviso de isenção de responsabilidade deve ser adicionado à resposta. Visitar as rotas corretas ou utilizar curl permitirá acesso total sem restrições.
Luke A. Leber
Não, ele quer dizer 'eu desaconselharia '
Xenocide8998 11/11
28

Eu vejo duas opções aqui.

Primeiro e mais fácil: encontre os arquivos de layout que adicionam esses itens de menu e comente o código para eles.
Por exemplo, My applicationsé adicionado app/design/frontend/{interface}/{theme}/layout/oauth.xmlatravés deste pedaço 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>

O segundo método, que não tenho 100% de certeza de que funcionará, é adicionar este xml dentro do local.xmlarquivo de layout do seu tema:

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

Você precisa adicionar uma <action>tag para cada link que deseja remover.

Há também a terceira opção, se você não estiver usando os módulos, apenas desative-os. Isso também pode aumentar o desempenho.
Para isso, crie este arquivo: app/etc/modules/Zzzz.xmlcom este conteúdo:

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

Você pode ter alguns problemas, aqui estão alguns outros módulos que você deseja usar, dependendo dos que você deseja desativar.

Marius
fonte
Obrigado @Marius pela resposta. Bem, eu tentei a segunda opção (removeLinkByUrl) que você sugeriu antes de colocar a pergunta. Mas parece que não funcionou para mim.
Oshan
4
A segunda opção não pode funcionar porque Mage_Customer_Block_Account_Navigationnão herda Mage_Page_Block_Template_Links.
MPW
26

Há uma extensão FOSS que adiciona a opção de back-end aos links de contas remotas.

Há um segundo módulo (também FOSS) que adiciona o removeLinkmétodo para que você possa usar o seguinte em seulocal.xml

Isenção de responsabilidade: eu sou desenvolvedor da segunda extensão.

<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
fonte
Tendo mexido com várias técnicas de substituições local.xml para PHP, essas soluções de código aberto são as minhas favoritas.
Michael Thompson
5

A solução mais simples (implementação e uso) que eu encontrei é para substituir Mage_Customer_Block_Account_Navigationem app/code/locale adicionar um removeLinkByNamemétodo, que faz o mesmo que a resposta de Oshan faz, mas é utilizável a partir de arquivos de layout. Uma reescrita de classe mais tradicional também funcionaria, mas poderia causar conflitos com um plug-in.

Atenção! Não testado!

Uma solução mais complicada seria escrever seu próprio módulo com um Blockque estenda Mage_Customer_Block_Account_Navigatione inclua um removeLinkByNamemétodo. Para que isso funcione, você teria que remover / desarmar o customer_account_navigationbloco e substituí-lo pelo do seu novo módulo. A partir de então, a qualquer momento customer_account_navigationno layout, você receberá uma instância removeLinkByName.

mpw
fonte
Eu fiz a segunda opção, é uma quantidade razoável de trabalho, mas funciona. Demorei cerca de duas horas e trabalho como consultor de Magento em tempo integral e desenvolvedor de PHP / Linux. Se alguém precisar de detalhes, PM me.
Siliconrockstar
a solução mais simples é substituir uma classe Core quando houver muitas soluções mais limpas?
Ria Weyprecht
5

Uma solução rápida para remover todos os itens da lista Minha conta abaixo de Meus pedidos, incluindo Contratos de cobrança, Perfis recorrentes, Meus aplicativos e Meus produtos para download. Também removerá os links My Wishlist e My Newsletter, em todo o site, testados no Magento 1.9:

Comente as linhas 31 a 66 de app / design / frontend / default / YOURTHEME / layout / wishlist.xml (se não houver, copie-o 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 as linhas 47 - 65 de app / design / frontend / default / YOURTHEME / layout / newsletter.xml (se não houver, copie-o de app / design / frontend / rwd / default / layout / newsletter.xml)

newsletter </name> newsletter / manage / </path> Assinaturas de boletins </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 de acordo com seus 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
fonte
5

Para evitar a remoção dos links, eu recomendaria atribuir valores de ID com base na variável $ _index, para que você possa ocultar os links via CSS.

Aqui está o que eu fiz:

Em 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; ?>

Então, obviamente, você pode ir

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

Não existe uma maneira de esfolar um gato, mas esta é uma opção rápida e fácil sem comprometer realmente nenhuma funcionalidade.

Thomas Harding
fonte
11
Observe explicitamente que isso não impedirá que os usuários acessem a funcionalidade por trás dos recursos em questão. O acesso total é uma edição CSS ou uma barra de endereço rápida editada ... portanto, não confie nas pessoas que não usam os recursos.
Luke A. Leber
Isso é justo o suficiente e eu entendo perfeitamente de onde você vem. Eu não queria remover estritamente essa funcionalidade, mas queria ocultá-la porque o cliente sentiu especificamente que isso poderia confundir seus clientes. Cada um para o seu próprio eu acho!
Thomas Harding
5

Eu pensei que uma solução melhor seria reescrever o bloco. Isso foi mencionado acima, mas não havia exemplo:

Adicione a reescrita ao seu config.xml na seção global:

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

Substitua addLink no 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);
        }
    }
}

A matriz exclude_links poderia obter de uma configuração se você não quisesse codificar os links excluídos.

N Lewis
fonte
3

isto é o que eu pesquisei sobre isso: http://magebase.com/magento-tutorials/5-useful-tricks-for-your-magento-local-xml/

Podemos alterar quase todos os aspectos de layout do layout padrão do Magento, mas há algumas situações em que essa abordagem falha. Notavelmente, isso se manifesta no minuto em que você deseja modificar o bloco top.links. Os itens deste bloco são adicionados usando o método de ação addLink. Se você está pensando em como remover alguns links do conjunto padrão, a resposta é: você não pode! Infelizmente, a classe de bloco page / template_links não implementa um método de ação 'removeLink'; portanto, o resort deve remover todo o bloco usando a abordagem unsetChild e adicionar o bloco de links novamente com nossos próprios links adicionados no local.xml.

melaxon
fonte
2

Em primeiro lugar, gostaria que você dissesse que existem diferentes maneiras de resolver seus problemas.

  1. É a maneira mais fácil de encontrar o código no layout.xmlarquivo dentro da base que você deseja remover, por exemplo: se eu quiser remover as "Minhas tags", basta comentar a 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>
    

    Mas você sabe que não devemos modificar o arquivo base, portanto, outro próximo método simples que pode ser executado é

  2. Desativando o link no seu arquivo de modelo. Para isso, copie o navigation.phtmlarquivo para o seu tema (Nota: a estrutura da pasta deve ser a mesma) a partir do base\default\template\customer\account\navigation.phtml. que é mostrado na resposta acima.

  3. Outra tarefa tediosa é reescrever seu módulo principal e criar um método "RemoveLinkByName".

aton1004
fonte
2

Uma solução completa para remover os recursos do painel da conta inclui uma modificação do lado do cliente e do servidor. Se apenas o lado do cliente for removido e / ou oculto, não há nada que impeça que os usuários mais experientes em tecnologia ainda acessem os recursos criando manualmente as rotas em seu navegador ou usando um "ataque" CURL mais sofisticado (que pode incluir o apropriado Token CSRF e deslize para a direita).

O lado do cliente é facilmente alcançado por meio de atualizações XML, conforme indicado pela infinidade de respostas já fornecidas.

O lado do servidor é um pouco mais complexo e requer um entendimento da funcionalidade que está sendo removida.

Pessoalmente, eu usaria os observadores para retornar condicionalmente códigos de status HTTP proibidos em cada uma das rotas do recurso que está sendo removido. Para descobrir quais rotas observar, abra o arquivo do controlador associado e encontre cada uma das ações de front-end que não devem mais estar disponíveis. Em seguida, crie um módulo que defina os campos de configuração do sistema para desativar o referido recurso. Usando esses campos de configuração do sistema, atualize condicionalmente o XML do layout de front-end e, da mesma forma, retorne condicionalmente os códigos de resposta HTTP adequados para cada rota observada.

Exemplos de código para cada uma das etapas acima podem ser encontrados no seu mecanismo de pesquisa favorito.

Luke A. Leber
fonte
1

Adicione a um arquivo local.xml esse 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>

Testado no Magento 1.7.0.2

lavb
fonte
No Magento 1.8.1.0, isso resulta em Aviso: Faltando o argumento 2 para Mage_Customer_Block_Account_Navigation :: addLink ()
Anthony