7

我正在尝试使用 Magento 类别缩略图,但它不起作用。我已经在线学习了许多教程(例如http://www.douglasradburn.co.uk/getting-category-thumbnail-images-with-magento/),并且都提到了该功能:

$_category->getThumbnail()

应该在类别模型中。我正在运行 Magento 1.6,但在任何地方都找不到此功能。我还下载了 1.5 和 1.7,在那里看了看,没有找到。但是,当我运行代码时,它没有给我任何错误,只是没有输出。

这是我的完整代码:

 <ul id="nav">
 <?php foreach ($this->getStoreCategories() as $_category): ?>
     <?php echo $_category->getThumbnail(); ?>  
     <?php echo $this->drawItem($_category) ?>
 <?php endforeach ?>
 </ul>

(我正在尝试将缩略图用作它所在的菜单项)


得到它的工作。秘诀是您需要使用以下代码重新查询 FULL 类别数据:

Mage::getModel('catalog/category')->load($_category->getId())->getThumbnail()

我在某种程度上遵循了本教程:

http://www.ho.nl/blog/using_category_images_in_your_magento_navigation/

在您的菜单中有类别缩略图。

谢谢

4

4 回答 4

11

对于它的价值,您的解决方案有效,但效率很低。

使用:

Mage::getModel('catalog/category')->load($_category->getId())->getThumbnail()

每个类别的加载时间会增加百分之几甚至十分之一秒。

这样做的原因是您在获取模型集合并获取其中的项目时遇到了麻烦,然后您将添加新的数据库调用来获取每个类别的完整数据。您只需确保首先收集完整的类别数据。

您之前所拥有的东西不起作用的原因是因为没有告诉类别集合它需要选择哪些属性。它实际上只是从 catalog_category_entity 表中返回平面数据,而不是与任何属性表连接。

您需要做的可能更多的是以下方面:

<ul id="nav">
<?php foreach ($this->getStoreCategories()->addAttributeToSelect("*") as $_category): ?>
    <?php echo $_category->getThumbnail(); ?>  
    <?php echo $this->drawItem($_category) ?>
<?php endforeach ?>
</ul>

事实上,理想情况下,您希望重写该->getStoreCategories()函数以添加通配符过滤器。

我建议打开app/code/core/Mage/Eav/Model/Entity/Collection/Abstract.php并学习编写了哪些非常酷的集合函数。掌握 EAV 集合对于 Magento 开发人员来说就像是一种成人仪式。一旦你这样做了,你将势不可挡!

希望这可以帮助。

于 2012-05-21T00:29:05.250 回答
4

无需更改 app/code/local/Mage/Catalog/Model/Category.php

它可以通过这些代码行轻松完成......试试这个......它的作品

$child= Mage::getSingleton('catalog/layer')->getCurrentCategory()->getId();

$imageSrc = Mage::getModel('catalog/category')->load($child)->getThumbnail();

$ThumbnailUrl = Mage::getBaseUrl('media').'catalog/category/'.$imageSrc;

echo "<img src='{$ThumbnailUrl}' />";
于 2013-09-04T12:41:19.633 回答
2

这对我有用:

<img src="http://etienneaigner.com/shop/media/catalog/category/
     <?php echo Mage::getModel('catalog/category')->load($_category->getId())->getThumbnail(); ?>"

     height="338px" width="338px"
     alt="<?php echo $this->htmlEscape($_category->getName()) ?>" />
于 2012-10-17T15:15:11.217 回答
1

刚看到这个答案。但是,在以后的 magento 版本 1.7+ 中,无需向代码添加开销,您可以通过 config.xml 向 Category 集合添加更多标准(和自定义)eav 属性。如果你检查 Mage/Catalog/etc/config.xml 你会注意到节点下有节点:

   <category>
        <collection>
            <attributes>
                <name/>
                <url_key/>
                <is_active/>
            </attributes>
        </collection>
    </category>

因此,您可以创建自己的模块并添加更多 eav 属性:

    <category>
        <collection>
            <attributes>
                <thumbnail/>
                <image/>
            </attributes>
        </collection>
    </category>

它们将被添加到您的类别集合中。

于 2014-09-08T23:49:14.227 回答