如何删除客户帐户仪表板链接


Answers:


52

步骤1:转到(yourPackage / YourTemplate / customer / account / navigation.phtml)

第2步:替换下面的行

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

上面的代码段包含了删除所有导航链接的方法。希望这对所有人有帮助。

参考链接:https : //github.com/Aproducktion/Magento-Remove-Dashboard-Links


5
如果您可以使用布局XML修复某些问题,我建议使用这样的硬编码解决方案。@Marius,他的回答很干净。
桑德甜菜

1
@SanderMangel,你是什么意思If you can't
Pratik 2014年

2
不,他的意思是“我建议您反对
Fabian Schmengler 2015年

该答案不会阻止访问它试图删除的系统的基础功能-应在该答案中添加免责声明。参观正确的路线或利用弯度将使您完全不受束缚。
路加·莱伯

不,他的意思是“我建议您反对
Xenocide8998 '11

28

我在这里看到2个选项。

最简单的方法:只需找到添加了这些菜单项的布局文件,并为其注释代码。
例如通过XML的这个My applications部分添加app/design/frontend/{interface}/{theme}/layout/oauth.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>

我不是100%不确定它会起作用的第二种方法是在local.xml您的主题的布局文件中添加此xml :

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

您需要<action>为每个要删除的链接添加一个标签。

还有第三个选项,如果您根本不使用模块,则将其禁用。这也可以提高性能。
为此,请创建此文件:app/etc/modules/Zzzz.xml并包含以下内容:

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

您可能会遇到一些麻烦,这是您要使用的其他模块,具体取决于您要禁用的模块。


感谢@Marius的回答。好吧,我在提出问题之前尝试了您建议的第二个选项(removeLinkByUrl)。但似乎对我没有用。
Oshan

4
第二个选项无效,因为Mage_Customer_Block_Account_Navigation它不继承自Mage_Page_Block_Template_Links
mpw

26

有一个FOSS扩展,它将后端选项添加到远程帐户链接。

还有另一个模块(也是FOSS),它添加了removeLink方法,以便您可以在您的计算机中使用以下内容local.xml

免责声明:我是第二个扩展的开发人员。

<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>

我喜欢使用从local.xml覆盖到PHP的多种技术,这些开源解决方案。
Michael Thompson 2015年

5

我发现最简单的解决方案(实现和使用)是取代Mage_Customer_Block_Account_Navigationapp/code/local添加一个removeLinkByName方法,它不一样的东西Oshan的答案呢,不过是从布局文件可用。更传统的类重写也可以,但是可能会导致与插件发生冲突。

警告!未经测试!

一个更复杂的解决方案是使用Block扩展Mage_Customer_Block_Account_Navigation并包含removeLinkByName方法的编写自己的模块。为此,您必须删除/取消设置该customer_account_navigation块并将其替换为新模块的块。从那时起,customer_account_navigation在布局中引用任何时间,您都将获得带有的实例removeLinkByName


我做了第二个选择,这是很多工作,但是可以。我花了大约两个小时的时间,并担任Magento的专职顾问和PHP / Linux开发人员。如果有人需要详细信息,请告诉我。
Siliconrockstar 2015年

有很多更整洁的解决方案时,最简单的解决方案是否可以覆盖Core类?
Ria Weyprecht

5

一种快速的解决方案,删除“我的订单”下的所有“我的帐户”列表项,包括账单协议,重复配置文件,“我的应用程序”和“我的可下载产品”。还将删除在Magento 1.9上测试的整个网站上的“我的愿望清单”和“我的新闻通讯”链接:

注释掉app / design / frontend / default / YOURTHEME / layout / wishlist.xml中的第31-66行(如果不存在,请从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-->

注释掉app / design / frontend / default / YOURTHEME / layout / newsletter.xml中的第47-65行(如果不存在,请从app / design / frontend / rwd / default / layout / newsletter.xml复制)

新闻通讯</ name>新闻通讯/管理/ </ path>新闻通讯订阅</ 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(根据您的要求进行调整)

.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;
}

5

为了避免删除链接,我建议根据$ _index变量分配ID值,以便您可以通过CSS隐藏链接。

这是我所做的:

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

所以很明显,你可以去

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

没有一种方法可以给猫皮剥皮,但这是一种快速简便的选择,而不会真正损害任何功能。


1
应该明确指出,这不会阻止用户访问所关注功能的功能。完全访问权限可以是CSS编辑,也可以是快速地址栏编辑...因此,不要依赖于不使用这些功能的人。
路加·莱伯

这很公平,我完全理解您来自哪里。我严格不希望删除此功能,但我想隐藏它,因为客户特别认为这可能会使他们的客户感到困惑。我猜每个人都自己!
托马斯·哈丁

5

我认为更好的解决方案是重写该块。上面提到了这一点,但没有示例:

在全局部分中将重写添加到您的config.xml中:

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

覆盖Mage_Customer_Block_Account_Navigation中的addLink:

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);
        }
    }
}

如果您不想对排除的链接进行硬编码,则exclude_links数组可以从配置设置中提取。


3

这就是我用谷歌搜索的内容:http : //magebase.com/magento-tutorials/5-useful-tricks-for-your-magento-local-xml/

我们可以更改标准Magento布局的几乎所有布局方面,但是在某些情况下这种方法会失败。值得注意的是,这恰好体现在您要修改top.links块的那一刻。使用addLink操作方法添加了此块中的项目,因此,如果您想知道如何从默认集中删除某些链接,答案是,您不能!不幸的是,page / template_links块类未实现'removeLink'动作方法,因此,解决方法是使用unsetChild方法删除整个块,然后将链接块添加回本地,并在local.xml中添加我们自己的链接。


2

首先,我想告诉您,有多种方法可以解决您的问题。

  1. 这是最简单的方法,layout.xml例如在您要删除的基本文件中找到代码,例如:如果我要删除“我的标签”,则只需注释该部分。

    <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>

    但是您知道我们不应该修改基本文件,因此可以执行的下一个简单方法是

  2. 取消模板navigation.phtml文件中的链接。为此,请从中将文件复制到主题(注意:文件夹结构应相同)base\default\template\customer\account\navigation.phtml。如上答案所示。

  3. 另一个繁琐的任务是重写您的核心模块并创建方法“ RemoveLinkByName”。


2

删除帐户仪表板功能的完整解决方案包括客户端和服务器端修改。如果仅客户端被删除和/或隐藏,则没有什么能阻止精通技术的用户通过在浏览器中手工制作路线或使用更复杂的CURL“攻击”(可能包括适当的攻击)来访问功能CSRF令牌并直接通过)。

如已经给出的大量答案所示,可以通过XML更新轻松实现客户端。

服务器端稍微复杂一点,需要了解要删除的功能。

就个人而言,我会走一条路线,使用观察者在要删除的功能的每条路线上有条件地返回禁止的HTTP状态代码。为了找出要观察的路由,请打开关联的控制器文件并找到应该不再可用的每个前端操作。接下来,创建一个模块,该模块定义用于软禁用所述功能的系统配置字段。使用这些系统配置字段,有条件地更新前端布局XML,同样有条件地为每个观察到的路由返回正确的HTTP响应代码。

可以通过您喜欢的搜索引擎找到上述每个步骤的代码示例。


1

将此代码添加到local.xml文件中

<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>

在Magento 1.7.0.2中测试


在Magento 1.8.1.0中,这将导致警告:Mage_Customer_Block_Account_Navigation :: addLink()的参数2缺失
Anthony
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.