我已经看到了一些针对 Magento < 1.7 版本的功能请求的解决方案,但对于我正在使用的版本却没有。由于在 v1.7 中导航模板已从我top.phtml
看到\app\design\frontend\THEME\TEMPLATENAME\template\page\html\topmenu.phtml
的解决方案移至不再适用。
我只想能够在本机类别菜单下拉列表中输出类别图像(通过管理界面上传)。下拉结构和布局已完成并按我想要的方式工作,减去图像。
您将需要覆盖/替换 Mage_Catalog_Model_Observer。
最简单的方法是将 Mage_Catalog_Model_Observer (app/code/core/Mage/Catalog/Model/Observer.php) 复制到:
app/code/local/Mage/Catalog/Model/Observer.php
然后您可以修改:_addCategoriesToMenu()
将图像添加到数据中:
$categoryData = array(
'image_url' => $category->getImageUrl(), // or thumbnail if you wanted.
'name' => $category->getName(),
'id' => $nodeId,
'url' => Mage::helper('catalog/category')->getCategoryUrl($category),
'is_active' => $this->_isActiveMenuCategory($category)
);
然后,此数据将在 Navigation 块中可用。您还需要覆盖此块:将 app/code/core/Mage/Catalog/Block/Navigation.php 复制到
app/code/local/Mage/Catalog/Block/Navigation.php
修改_getHtml()方法以根据需要将图像添加到标记中。
图片 url 将通过节点提供,如下所示:
$child->getImageUrl(); // or
$child->getData('image_url');
此解决方案适用于 Magento -1.8.*
在模型文件中。(/app/code/core/Mage/Catalog/Model/Observer.php)
更新函数名称中的以下代码:_addCategoriesToMenu
$categoryData = array(
'name' => $category->getName(),
'id' => $nodeId,
'url' => Mage::helper('catalog/category')->getCategoryUrl($category),
'is_active' => $this->_isActiveMenuCategory($category),
'thumbnail' => Mage::getModel('catalog/category')->load($category->getId())->getThumbnail()
);
然后进入 Html 文件夹。(app/code/core/Mage/Page/Block/Html/Topmenu.php)
在第 128 行更新以下代码行
函数名:_getHtml
$urls = Mage::getBaseUrl('media').'catalog/category/'.$child->getData('thumbnail');
$img = '<img src="'.$urls.'" />';
$html .= '<li ' . $this->_getRenderedMenuItemAttributes($child) . '>';
$html .= '<a href="' . $child->getUrl() . '" ' . $outermostClassCode . '><span>'
. $this->escapeHtml($child->getName()) . ' </span> '.$img.' </a>';