在Magento的顶层菜单中创建链接

时间:2014-03-21 05:03:07

标签: magento menu

嗨,我希望你能帮助我。我是Magento的新手,我正在尝试实现此线程中讨论的相同功能

Magento hide navigation menu item from guest

我唯一没想到的是如何首先创建导航块或在顶部菜单中创建自定义链接。

我一直在尝试按照下面链接中描述的方法,但我不确定我应该修改哪个config.xml和观察者文件才能使这项工作

http://inchoo.net/ecommerce/adding-links-to-the-top-menu-in-magento/comment-page-1/#comment-71252

有人可以请我提供一些指导吗?

2 个答案:

答案 0 :(得分:0)

这就是我在这里的问题Magento hide navigation menu item from guest.

所理解的

所以你需要按照步骤

第1步:需要使用事件page_block_html_topmenu_gethtml_before

创建观察者

在添加

时,您会发现很多文章来创建观察者

http://inchoo.net/ecommerce/adding-links-to-the-top-menu-in-magento/comment-page-1/

并使用以下

更新代码
    $subNode = new Varien_Data_Tree_Node($data, 'id', $tree, $node);
    // here added the condition to check the customer is logged in or not then only show the menu
    if(Mage::getSingleton('customer/session')->isLoggedIn())
    {
       $node->addChild($subNode);
    }

答案 1 :(得分:0)

你的问题不明确。我假设您要在标题中添加新菜单,并且只想在用户登录时显示它。基于该假设,让我们开始创建custom module。 (您指出的教程是引用您自己的模块而不是任何其他现有模块)。让我们创建一个名为Mysite_Addmenu

的模块

首先,您需要配置模块。为此在

中创建一个文件

地点:app/code/core/local/Mysite/Addmenu/etc/config.xml

<config>
<modules>
    <Mysite_Addmenu>
        <version>0.1.0</version>
    </Mysite_Addmenu>
</modules>
<frontend>
    <events>
      <page_block_html_topmenu_gethtml_before>
          <observers>
              <add_top_menu>
                  <type>singleton</type>
                  <class>addmenu/observer</class>
                  <method>addToTopmenu</method>
              </add_top_menu>
          </observers>
      </page_block_html_topmenu_gethtml_before>
    </events>   
</frontend>
<global>
    <models>
        <addmenu>
            <class>Mysite_Addmenu_Model</class>
        </addmenu>
    </models>
</global>
</config>

你可以看到它有两个部分。一个部分定义观察者部分,另一个部分定义其模型部分。在模型中,您将定义您的观察者。

现在让我们让magento知道我们的模块。为此你需要在给定的位置添加这个文件

位置:app/etc/modules/Mysite_Addmenu.xml

<config>
<modules>
    <Mysite_Addmenu>
        <active>true</active>
        <codePool>local</codePool>
    </Mysite_Addmenu>
</modules>
</config>

现在是时候定义我们的观察者。让我们这样做

位置:app / code / local / Mysite / Addmenu / Model / Observer.php

<?php

class Mysite_Addmenu_Model_Observer
{

    public function addToTopmenu(Varien_Event_Observer $observer)
    {
        if(Mage::getSingleton('customer/session')->isLoggedIn())
        {
            $menu = $observer->getMenu();
            $tree = $menu->getTree();
            $node = new Varien_Data_Tree_Node(array(
                    'name'   => 'Newmenu',
                    'id'     => 'newmenu',
                    'url'    => Mage::getUrl().'newmenu', // point somewhere
            ), 'id', $tree, $menu);
            $menu->addChild($node);
            // Children menu items
            $collection = Mage::getResourceModel('catalog/category_collection')
                    ->setStore(Mage::app()->getStore())
                    ->addIsActiveFilter()
                    ->addNameToResult()
                    ->setPageSize(3);
            foreach ($collection as $category) {
                $tree = $node->getTree();
                $data = array(
                    'name'   => $category->getName(),
                    'id'     => 'category-node-'.$category->getId(),
                    'url'    => $category->getUrl(),
                );
                $subNode = new Varien_Data_Tree_Node($data, 'id', $tree, $node);
                $node->addChild($subNode);
            }
        }
    }


}

观察者做什么:观察者检查用户是否存在。如果没有,它将不会创建菜单。如果用户已登录,则会出现菜单。

我在参考教程中使用了相同的代码。您可以对子菜单部分进行自己的更改。根据需要显示。希望它会对你有所帮助。