Magento - 如何在我的帐户导航中添加/删除链接?

时间:2009-12-30 00:38:05

标签: magento

我正在尝试删除帐户导航中的链接。我查看了customer / account / navigation.phtml模板。该模板通过$ this-> getLinks()获取链接。如何编辑getLinks()方法以便删除一些链接?

11 个答案:

答案 0 :(得分:43)

如果您想有选择地删除链接而无需复制/编辑整个xml文件,可以在this post in the magento forums

中找到一个很好的解决方案

在此解决方案中,您使用本地版本覆盖Mage_Customer_Block_Account_Navigation块,然后添加removeLinkByName方法,然后在layout.xml文件中使用该方法,如下所示:

<?xml version="1.0"?>
    <layout version="0.1.0">

    <customer_account>
        <reference name="customer_account_navigation" >
                <!-- remove the link using your custom method -->
                <action method="removeLinkByName">
                   <name>recurring_profiles</name>
                </action>
                <action method="removeLinkByName">
                   <name>billing_agreements</name>
                </action>
        </reference>
    </customer_account>
</layout>

答案 1 :(得分:34)

你的问题的答案最终取决于它。该导航中的链接通过不同的布局XML文件添加。这是首先在layout/customer.xml中定义块的代码。请注意,它还定义了一些要添加到菜单的链接:

<block type="customer/account_navigation" name="customer_account_navigation" before="-" template="customer/account/navigation.phtml">
    <action method="addLink" translate="label" module="customer"><name>account</name><path>customer/account/</path><label>Account Dashboard</label></action>
    <action method="addLink" translate="label" module="customer"><name>account_edit</name><path>customer/account/edit/</path><label>Account Information</label></action>
    <action method="addLink" translate="label" module="customer"><name>address_book</name><path>customer/address/</path><label>Address Book</label></action>
</block>

其他菜单项在其他布局文件中定义。例如,评论模块使用layout/review.xml来定义其布局,并包含以下内容:

<customer_account>
    <!-- Mage_Review -->
    <reference name="customer_account_navigation">
        <action method="addLink" translate="label" module="review"><name>reviews</name><path>review/customer</path><label>My Product Reviews</label></action>
    </reference>
</customer_account>

要删除此链接,只需注释掉或删除<action method=...>标记,菜单项就会消失。如果要一次查找所有菜单项,请使用您喜欢的文件搜索并查找name="customer_account_navigation"的任何实例,这是Magento用于该导航块的句柄。

答案 2 :(得分:22)

从Magento的“我的帐户”面板中删除任何链接的最简单方法是首先复制:

应用程序/设计/前端/碱/默认/模板/客户/帐户/ navigation.phtml

应用程序/设计/前端/企业/ YOURSITE /模板/客户/帐户/ navigation.phtml

打开文件并对此行进行细化,它应该在第34行附近:

<?php $_index = 1; ?>

在它正下方添加:

 <?php $_count = count($_links); /* Add or Remove Account Left Navigation Links Here -*/
        unset($_links['tags']); /* My Tags */
        unset($_links['invitations']); /* My Invitations */
        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 */
        ?> 

只需删除您想要显示的任何链接。

答案 3 :(得分:16)

您还可以通过后端禁用菜单项,而无需触摸任何代码。进入:

System > Configuration > Advanced

您将看到一长串选项。以下是一些设置为“已禁用”的关键模块:

Mage_Downloadable -> My Downloadable Products
Mage_Newsletter -> My Newsletter
Mage_Review -> My Reviews
Mage_Tag -> My Tags
Mage_Wishlist -> My Wishlist

我也禁用了Mage_Poll,因为它倾向于显示在其他页面模板中,如果你不使用它会很烦人。

答案 4 :(得分:7)

它的工作100%我当然。

第1步:转至(YourTemplate / customer / account / navigation.phtml)

第2步:替换此行:<?php $_count = count($_links); ?> 用:

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

&GT?;

答案 5 :(得分:5)

从技术上讲,zlovelady的答案是可取的,但由于我只需从导航中删除项目,因此在模板中取消设置不需要的导航项目的方法对我来说是最快/最简单的方法:

重复

app/design/frontend/base/default/template/customer/account/navigation

app/design/frontend/YOUR_THEME/default/template/customer/account/navigation

并在获取渲染之前取消设置不需要的导航项,例如:

<?php $_links = $this->getLinks(); ?>    
<?php 
    unset($_links['recurring_profiles']);
?>

答案 6 :(得分:4)

此外,如果您正在开发自定义模块

,则需要在config.xml中执行类似的操作
    <frontend>
        <layout>
            <updates>
                <hpcustomer>
                    <file>hpcustomer.xml</file>
                </hpcustomer>
            </updates>
        </layout>
    </frontend>

答案 7 :(得分:2)

打开navigation.phtml

app/design/frontend/yourtheme/default/template/customer/account/navigation.phtml

替换

<?php $_links = $this->getLinks(); ?>

使用您要删除的未设置链接

<?php 
$_count = count($_links);
unset($_links['account']); // Account Information     
unset($_links['account_edit']); // Account Information  
unset($_links['address_book']); // Address Book
unset($_links['orders']); // My Orders
unset($_links['billing_agreements']); // Billing Agreements
unset($_links['recurring_profiles']); // Recurring Profiles
unset($_links['reviews']);  // My Product Reviews
unset($_links['wishlist']); // My Wishlist
unset($_links['OAuth Customer Tokens']); // My Applications
unset($_links['newsletter']); // Newsletter Subscriptions
unset($_links['downloadable_products']); // My Downloadable Products
unset($_links['tags']); // My Tags
unset($_links['invitations']); // My Invitations
unset($_links['enterprise_customerbalance']); // Store Credit
unset($_links['enterprise_reward']); // Reward Points
unset($_links['giftregistry']); // Gift Registry
unset($_links['enterprise_giftcardaccount']); // Gift Card Link
?>

答案 8 :(得分:0)

以上大部分工作,但对我来说,这是最简单的。

安装插件,注销,登录,系统,高级,前端链接管理器,选中并取消选中要显示的选项。它也适用于您网站上的任何前端导航。

http://www.magentocommerce.com/magento-connect/frontend-links-manager.html

答案 9 :(得分:0)

您也可以使用这个免费的即插即用扩展程序:

http://www.magentocommerce.com/magento-connect/manage-customer-account-menu.html

此扩展程序不会触及任何Magento核心文件。

使用此扩展程序,您可以:

  1. 确定每个菜单项,只需在Magento后端单击即可显示或隐藏它。
  2. 轻松重命名菜单项。

答案 10 :(得分:0)

我的解决方案是在local.xml中完全删除块并使用我需要的块创建它,例如

        private static string Update(string json, object update)
        {
            var updateObj = JObject.Parse(JsonConvert.SerializeObject(update));

            var result = new StringWriter();
            var writer = new JsonTextWriter(result);
            writer.Formatting = Formatting.Indented;

            var reader = new JsonTextReader(new StringReader(json));
            while (reader.Read())
            {

                if (reader.Value == null)
                {
                    writer.WriteToken(reader.TokenType);
                    continue;
                }

                var token= 
                   reader.TokenType == JsonToken.Comment ||
                   reader.TokenType == JsonToken.PropertyName || 
                   string.IsNullOrEmpty(reader.Path)
                   ? null 
                   : updateObj.SelectToken(reader.Path);

                if (token == null)
                    writer.WriteToken(reader.TokenType, reader.Value);
                else
                    writer.WriteToken(reader.TokenType, token.ToObject(reader.ValueType));
            }

            return result.ToString();
        }

        static void Main(string[] args)
        {
            string json = @"{
   //broken
   'CPU': 'Intel',
   'PSU': '500W',
   'Drives': [
     'DVD read/writer'
     /*broken*/,
     '500 gigabyte hard drive',
     '200 gigabype hard drive'
   ]
}";

            var update=Update(json, new { CPU = "AMD", Drives = new[] { "120 gigabytes ssd" } });
        }