动态添加magento中“我的帐户导航”的链接

时间:2012-11-15 23:40:16

标签: templates magento layout block

我正在创建一个Magento扩展程序,并希望以编程方式添加指向“我的帐户”导航的链接。我已经阅读了以下主题(Magento - How to add/remove links on my account navigation?)及其引用的网站,但他们只讨论静态添加链接。

通过将以下内容添加到我的模块中的布局文件中,我可以获得一个新链接以显示在客户帐户导航中。

<customer_account>
    <reference name="customer_account_navigation">
        <action method="addLink" translate="label" module="mymodule">
            <name>modulename</name>
            <path>mymodule/</path>
            <label>New link</label>
        </action>
    </reference>
</customer_account>

如何才能使链接外观取决于对我的某个扩展模型的方法调用结果。

3 个答案:

答案 0 :(得分:2)

我遇到了同样的需求,这是我找到的最佳方式。

1)使用以下代码创建一个扩展Magento帐户导航块的新块文件。

class Mynamespace_Mymodule_Block_Addlink extends Mage_Customer_Block_Account_Navigation {
    public function addLinkToUserNav() {
        if (your logic here) {
            $this->addLink(
                    "your label",
                    "your url",
                    "your title"
            );
        }
    }
}

2)在您的扩展配置文件 config.xml 中,添加以下代码(尊重您现有的XML数据结构):

<config>
    ...
    <global>
        ....
        <blocks>
            ...
            <customer>
                <rewrite>
                    <account_navigation>Mynamespace_Mymodule_Block_Addlink</account_navigation>
                </rewrite>
            </customer>
        </blocks>
    </global>
</config>

3)在扩展XML布局文件中,添加以下代码(尊重您现有的XML数据结构):

<layout>
    ...
    <customer_account>
        <reference name="customer_account_navigation">
            <action method="addLinkToUserNav"></action>
        </reference>
    </customer_account>
</layout>

就是这样。这将使您能够动态添加/删除帐户导航链接。

答案 1 :(得分:0)

我认为您应该能够使用Magento的ifconfig属性,如here所述

答案 2 :(得分:0)

您必须使用magento的事件观察器功能 您必须使用它的事件“controller_action_layout_load_before” 在您的模块的config.xml

<controller_action_layout_load_before>
    <observers>
        <uniquename>
            <type>singleton</type>
            <class>Package_Modulename_Model_Observer</class>
            <method>customlink</method>
        </uniquename>
    </observers>
</controller_action_layout_load_before>

并在相应的observer.php中使用以下代码

public function customlink(Varien_Event_Observer $observer)
{
    $update = $observer->getEvent()->getLayout()->getUpdate();
    $update->addHandle('customer_new_handle');
}

并在local.xml中写

<customer_new_handle>
    <reference name="customer_account_navigation">
        <action method="addLink" translate="label" module="mymodule">
            <name>modulename</name>
            <path>mymodule/</path>
            <label>New link</label>
        </action>
    </reference>
</customer_new_handle>