You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Magento 1.9:顶部菜单项自定义跳转链接设置问题求助

解决Magento 1.9顶部菜单项跳转指定页面的问题

嘿,我之前在Magento 1.9里踩过完全一样的坑——想改顶部菜单的跳转链接,结果系统总是偷偷改回默认,URL重写根本不管用,别提有多闹心了!给你几个亲测有效的方案,比你现在挨个加布局更新省心多了:

方案1:修改分类设置+修复URL重写冲突

Magento 1.9的分类URL生成逻辑有点“强势”,会优先用分类自身的配置,所以先从分类后台下手:

  • 进入目录 > 管理分类,找到要修改的顶部菜单对应的分类
  • 切换到“常规信息”标签,找到「自定义URL」字段,填入你要跳转的目标页面路径(比如my-custom-category.html),然后勾选「使用自定义URL」
  • 接下来去系统 > URL重写管理,删掉所有和这个分类相关的自动生成重写规则,然后手动添加一条自定义重写:
    • 选择「自定义」类型,请求路径填原来的分类URL(比如old-category.html),目标路径填你设置的自定义URL,重写类型选「永久(301)」
    • 这一步很关键,不然系统会自动重新生成默认重写,直接覆盖你的设置

方案2:直接修改顶部菜单模板(最稳妥的终极方案)

要是上面的方法还是被系统“打脸”,那就直接改模板,绕过它的自动URL生成逻辑:

  • 找到你的主题下的顶部菜单模板,路径一般是app/design/frontend/[你的主题包]/[主题]/template/page/html/topmenu.phtml
  • 找到循环输出菜单项的代码块(大概是foreach ($this->getMenuItems() as $_item))
  • 在输出<a>标签的地方,判断当前菜单项的ID或者名称,替换成你想要的链接:
    <?php // 替换123为你的目标分类ID,your-custom-page.html为跳转路径 ?>
    <?php if($_item->getId() == 123): ?>
        <a href="<?php echo $this->getUrl('your-custom-page.html') ?>" title="<?php echo $this->escapeHtml($_item->getName()) ?>">
            <?php echo $this->escapeHtml($_item->getName()) ?>
        </a>
    <?php else: ?>
        <a href="<?php echo $_item->getUrl() ?>" title="<?php echo $this->escapeHtml($_item->getName()) ?>">
            <?php echo $this->escapeHtml($_item->getName()) ?>
        </a>
    <?php endif; ?>
    
  • 改完清一下缓存,这个菜单项就会乖乖跳转到你指定的页面,再也不会被系统篡改了

方案3:优化你当前用的“客户布局更新”方法

如果你还是想用布局更新的方式,可以把代码写得更规范,减少重复工作:

<reference name="top.menu">
    <action method="removeItem"><path>catalog/navigation/top</path></action>
    <block type="page/html_topmenu" name="catalog.topnav" template="page/html/topmenu.phtml">
        <action method="addItem">
            <name>Custom Category Link</name>
            <path>your-custom-page.html</path>
            <label><?php echo $this->getCurrentCategory()->getName() ?></label>
        </action>
    </block>
</reference>
  • 不过这个方法还是要每个分类单独设置,确实麻烦,所以优先推荐前两个方案

为啥URL重写会被绕过?

Magento 1.9里分类的跳转链接是由Mage_Catalog_Model_Category的getUrl()方法生成的,这个方法会直接调用分类自身的URL配置,而不会去读取URL重写管理里的规则——这就是为啥你设置了重写却没用的核心原因。

内容的提问来源于stack exchange,提问作者Andy Ellis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:13:11