Magento原始图片调整大小只显示占位图像

3
我正在尝试在Magento 1.7.0中使这段代码工作...它只显示Magento占位符图像...如果我将"image"更改为"small_image",它就能正常工作了。一切都在后端设置好了,产品图像的单选按钮已被选择...我也清除了缓存...这是在list.phtml文件中发生的...有没有人可以友情提示我做错了什么或者为什么不起作用...我已经四处寻找了一个解决方案,搜了三天,并且找到了一个解决方法,但仍未奏效...$_item没有定义,所以我得到了一个非对象错误...以下是答案链接:获取Magento基本产品图像
<?php echo $this->helper('catalog/image')->init($_product, 'image')->resize(171, 259);
5个回答

8
我会尝试以下两种方法:
a) 在您的列表块中(假设它是本地的),将addAttributeToSelect('image')添加到产品集合中。
b) 在您的list.phtml文件中,根据您已经拥有的产品ID加载完整的产品。(警告:这种方法不规范且不推荐使用)
$productId = $_product->getId();
$_product = Mage::getModel('catalog/product')->load($productId);
echo $this->helper('catalog/image')->init($_product, 'image')->resize(171, 259);

好消息!给它一个+1 ;) 你用的是(a)还是(b)? - redjam13
你所拥有的$_product可能是产品集合中的一部分,而该集合没有包含所有属性。通过实际加载产品模型,我们可以访问其所有属性。如果您想添加在集合中选择的属性,您需要找到创建此集合的位置,并添加 (a) 中描述的行。例如:$collection = Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect("image");这可能会在List.php块类中。 (但是,不要编辑核心文件,但这超出了本主题的范围)。 - redjam13
1
永远不要在list.phtml中加载产品! - Fabian Blechschmidt
抱歉没有写下来投诉。Magento使用EAV在一个表中保存所有属性(或多或少-细节...),如果您想加载产品,则必须多次加入此表。为避免太多的连接,Magento集合仅加载所需的属性。您可以“轻松”更改并添加属性。在foreach中使用load()意味着:使用1个查询加载30个产品,然后对每个产品向数据库发出1个查询->性能非常差。 - Fabian Blechschmidt
我还有一个额外的问题,就是我需要在其中一个shell脚本中设置商店ID才能使其正常工作。以防万一,这可能会为某些人节省时间。Mage::app()->setCurrentStore([storeid]); - Michael Thessel
显示剩余3条评论

1

在论坛中我没有找到答案,所以我分享一下我的解决方案:你需要将:
Mage::setIsDeveloperMode(true); 更改为 Mage::setIsDeveloperMode(false);


1
由于此线程在Google中排名第一,因此我在此分享我的经验。上述解决方案不适用于view.phtml/media.phtml模板。那里的属性已经被加载。在我的情况下,它没有起作用,因为服务器的内存限制不足以进行图像调整处理。对于默认媒体模板(resize(56)),它可以工作,因为它使用已经生成的默认大小。我在我的index.php中添加了`ini_set('memory_limit', '1024M')'来解决这个问题。
我没有立刻想到这点,因为我的php.ini已经设置为1024M。Magento在.htaccess中覆盖它(php value memory_limit -1),但某种原因它在我的配置中不起作用。

0
我在阅读@Meyer的建议后解决了问题。请确保将开发者模式设置为false,可以通过在根目录下的.htaccess文件中添加以下内容来完成:

SetEnv MAGE_IS_DEVELOPER_MODE "true"

这将会在index.php文件中将 Mage::setIsDeveloperMode(true); 设置为 Mage::setIsDeveloperMode(false);

0

检查集合是否已加载图像属性:

$productId = 1234;
$product = Mage::getModel('catalog/product')
    ->load($productId);
echo (string)Mage::helper('catalog/image')->init($product, 'image')->resize(75, 75);
echo (string)Mage::helper('catalog/image')->init($product, 'small_image')->resize(75, 75);
echo (string)Mage::helper('catalog/image')->init($product, 'thumbnail')->resize(75, 75);

如果这只给你一些占位符,那么集合没有加载图像。
您可以扩展您的集合,例如:
$collection = Mage::getModel('catalog/product')->getCollection()
        ->addAttributeToSelect('small_image') //or
        ->addAttributeToSelect('thumbnail')  //or
        ->addAttributeToSelect('image');

或者使用媒体配置来处理:

$prodImage = Mage::getModel('catalog/product_media_config')->getMediaUrl($product->getThumbnail());

或使用

$prodImage = Mage::getResourceSingleton('catalog/product')->getAttributeRawValue($productId, 'image', Mage::app()->getStore());

平面表格

这可能是由于平面表格引起的。请检查您是否启用了平面表格:

系统 > 配置 > 目录 > 目录 > 前端 > 使用平面目录产品

如果是,请检查平面表格中是否包含图像属性:

describe catalog_product_flat_1; // number varies depending on store

如果图像属性不是平面表的一部分,请通过将以下代码添加到app / etc / config.xml来将其添加到表中。
<config>
    <frontend>
        <product>
            <collection>
                <attributes>
                    <image />
               </attributes>
            </collection>
        </product>
    </frontend>
</config>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接