Magento 1.9.x新品组件重复显示问题求助
这种重复展示的情况,大概率是你的主题首页布局已经默认加载了新品区块,而你手动添加的widget又额外输出了一次,导致两个不同模板先后被调用。我帮你拆解具体原因和解决方法:
核心原因分析
你提到系统调用了两个模板,这正好对应了两种不同的新品渲染方式:
app/design/frontend/mytheme/main/template/catalog/product/new.phtml:这是Magento默认的新品列表模板,一般是通过主题的布局XML直接渲染的区块app/design/frontend/mytheme/main/template/catalog/product/widget/new/content/new_grid.phtml:这是你手动添加的widget指定的模板
出现重复的常见场景有两个:
主题布局默认包含新品区块
你的主题布局文件(比如app/design/frontend/mytheme/main/layout/local.xml、home.xml或者catalog.xml)里,很可能已经添加了类似这样的代码:<cms_index_index> <reference name="content"> <block type="catalog/product_new" name="home.new.products" as="home_new_products" template="catalog/product/new.phtml"/> </reference> </cms_index_index>这段代码会自动在首页渲染新品列表,而你又手动添加了widget,自然就会出现两次展示。
CMS首页内容重复引用
你用来添加widget的首页内容区域(CMS首页的Content标签),可能之前已经通过其他方式(比如直接调用{{block type="catalog/product_new" template="catalog/product/new.phtml"}})加载了新品模块,现在又加了widget,造成重复输出。
解决步骤
步骤1:排查布局XML文件
- 打开你的主题布局目录:
app/design/frontend/mytheme/main/layout/ - 重点查看
local.xml、home.xml(如果存在)、catalog.xml这几个文件,搜索<cms_index_index>节点(这是首页专属的布局句柄),看看有没有包含catalog/product_new的block定义。 - 如果找到对应的区块代码,你可以二选一:
- 直接删除这段布局代码,只保留你手动添加的widget
- 把布局里的模板路径改成你想用的
new_grid.phtml,这样就不用添加widget,直接用布局控制新品展示
步骤2:检查CMS首页内容
- 登录Magento后台,进入
CMS > Pages,打开首页的编辑页面 - 切换到
Content标签,仔细检查内容里是不是除了你添加的widget代码,还有其他调用新品模块的代码(比如{{block ...}}标签或者其他widget) - 如果发现重复的调用,删除其中一个即可。
步骤3:快速验证(可选)
你可以暂时把添加的widget代码注释掉(比如用<!-- ... -->包裹),刷新首页看看新品是否还会显示。如果还显示,说明是布局里的默认区块在起作用;如果不显示,那就是CMS内容里有重复引用。
额外小技巧
如果你想统一使用widget的网格样式,直接修改布局里的模板参数就行,比如把布局代码里的template="catalog/product/new.phtml"改成template="catalog/product/widget/new/content/new_grid.phtml",这样既不用额外加widget,还能保证样式统一。
内容的提问来源于stack exchange,提问作者Mr Benn

