2012-11-15 44 views
0

我创建了一个Magento扩展程序,并且希望以编程方式将链接添加到“我的帐户”导航中。我已阅读以下线索(Magento - How to add/remove links on my account navigation?)及其参考的网站,但他们只讨论静态添加链接。在magento中动态添加“我的帐户导航”链接

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

<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

你必须使用的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> 
+0

感谢您的建议,我试过了,它确实有效。然而,它看起来效率很低,因为它会调用我的方法(访问数据库)每次页面加载,而不管访问者是否登录。这是否真的是实现此目的的最佳/唯一方法? – Dom

+0

好吧,我明白了你的观点......如果你想避免执行整个功能,如果客户没有登录,你可以检查客户的会话是否设置inisde .. 公共职能customlink(Varien_Event_Observer $观察员){ } 我不能说这是最好的方法...如果你有任何分享它在这里 – Leo

0

我想你应该能够使用Magento的使用ifconfig属性作为解释here

2

我已经遇到此相同的需求,这是实现这一目标的最佳途径,我发现。

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

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> 

就是这样。这将为您提供动态添加/删除帐户导航链接的功能。

相关问题