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)」 - 这一步很关键,不然系统会自动重新生成默认重写,直接覆盖你的设置
- 选择「自定义」类型,请求路径填原来的分类URL(比如
方案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
相关产品推荐
相关产品推荐

