我正在创建一个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>
如何才能使链接外观取决于对我的某个扩展模型的方法调用结果。
答案 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>