在Magento顶部菜单中创建链接



你好,我希望你能帮助我。我是新的Magento,我正试图实现在这个线程中讨论的相同功能

Magento从来宾隐藏导航菜单项。

我唯一还没有弄清楚的是如何在第一个地方创建导航块或在顶部菜单中创建自定义链接。

我一直试图遵循下面链接中描述的方法,但我不确定我应该修改哪个config.xml和观察员文件,以获得这项工作

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

有人能给我一些指导吗?

你的问题不清楚。我假设,您希望在header中添加新菜单,并且希望仅在用户登录时显示它。基于这个假设,让我们开始创建一个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>

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

现在让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);
            }
        }
    }

}

observer的作用: observer检查用户是否存在。如果不是,它将不会创建菜单。如果用户已经登录,那么菜单将出现。

我在参考教程中使用了相同的代码。您可以对子菜单部分进行自己的更改。按照你的意愿展示它。

这就是我从你的问题中理解的Magento隐藏导航菜单项。

所以你需要遵循

的步骤

步骤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);
    }

最新更新