我使用的是Magento Community 1.7.0.2。
最近我决定在我的商店中启用“使用平面目录类别”和“使用平面目录类别”选项。我前端使用'image'属性的所有图像都消失了(它们被默认的图像占位符替换)。所有使用'small_image'或'thumbnail'属性显示的图像都会正确显示。
我查看了catalog_product_flat_1表,那里没有'image'列(但是'image_label'列...)。我查看了平面索引器代码,并能够打印用于获取插入到平面表中的所有属性的SQL语句:
SELECT `main_table`.*, `additional_table`.*
FROM `eav_attribute` AS `main_table`
INNER JOIN `catalog_eav_attribute` AS `additional_table`
ON additional_table.attribute_id = main_table.attribute_id
WHERE (main_table.entity_type_id = :entity_id) AND (main_table.backend_type = 'static'
OR additional_table.is_used_for_promo_rules = 1 OR additional_table.used_in_product_listing = 1 OR additional_table.used_for_sort_by = 1
OR main_table.attribute_code IN('sku', 'type_id', 'name', 'status', 'visibility', 'price', 'weight', 'url_path', 'url_key', 'thumbnail', 'small_image',
'tax_class_id', 'special_from_date', 'special_to_date', 'special_price', 'cost', 'is_recurring', 'recurring_profile', 'msrp_enabled', 'msrp',
'msrp_display_actual_price_type', 'enable_googlecheckout', 'gift_message_available', 'price_view', 'price_type', 'shipment_type', 'weight_type',
'sku_type', 'links_purchased_separately', 'links_title', 'short_description', 'image_label', 'thumbnail_label', 'small_image_label', 'news_from_date',
'news_to_date', 'created_at', 'updated_at', 'required_options'))
正如您在列表中看不到'image'属性。
'image'属性用于默认Magento发行版的前端,所以我想知道这是一个错误吗?
答案 0 :(得分:5)
虽然@Jordi Buj的答案会起作用,但它不是很可持续。 例如,如果您在另一个Magento实例上重用该代码,那么在有人按照描述的步骤将图像包含在平面表中之前,它可能无法工作。
更正确,基于代码的方法是将以下内容添加到Mage_Catalog_Model_Resource_Product_Collection:
->joinAttribute('image', 'catalog_product/image', 'entity_id', null, 'left')
而不是典型的:
->addAttributeToSelect('image')
而后者只是将“图像”添加到SELECT列中(这不会有帮助,因为它不是该平面产品表中的列),前者将显式地与EAV表中的image属性连接。
希望有所帮助。
答案 1 :(得分:5)
我也花了一些时间来解决这个问题,这里是我发现最干净的解决方案,并使用Magento的XML风格抽象将image
列添加到{{1表:
在config.xml中:
catalog_product_flat_1
然后重新索引您的平面目录表(管理员>索引管理>选择全部+重新索引)并清除所有Magento缓存。
答案 2 :(得分:2)
前几天我刚刚谈到这个问题。相同的Magento版本(1.7.0.2)虽然有不同的症状。我实际上是在我的网站上正确看到图像。我的问题是我的产品数量的自定义报告(总计,活动,没有描述/简短描述,没有图像/小/缩略图)开始给出不正确的结果,发现它是因为我激活了平面产品表。
事实证明,Magento API(Mage :: getModel('catalog / product') - > getCollection())自动使用平面表,并且那里的信息量不同,但只有一个严格必要的。
例如,并非所有属性都被复制,只有那些被归类为“在产品列表中使用”的属性。 在我的情况下,描述和图像都没有复制,所以我去了管理员并设置为是“用于产品列表”两者。
如果是图像则不是很容易,因为它的“商店所有者的目录输入类型”(媒体图像)有效地隐藏了“用于产品列表”字段。因此,我需要一个浏览器开发人员工具(如Firebug或Chrome开发工具),首先从“商店所有者的目录输入类型”字段中删除disabled =“disabled”HTML属性,然后将其更改为其他值。现在可以看到“在产品列表中使用”字段,将其设置为是。最后将“商店所有者的目录输入类型”值恢复为“媒体图像”。
如果您检查平面表(catalog_product_flat_),那么您将看到图像和描述属性。
这个过程对我有用。然后我重新检查我的目录列表和类似页面,以避免任何令人讨厌的副作用... 希望它适合你
答案 3 :(得分:0)
运行以下代码可以解决问题:
$attributeId = Mage::getResourceModel('eav/entity_attribute')->getIdByCode('catalog_product','image');
if ($attributeId) {
$attribute = Mage::getModel('catalog/resource_eav_attribute')->load($attributeId);
$attribute->setUsedInProductListing(1)->save();
}
我选择在我的一个本地模块中创建一个数据升级脚本。有关如何创建数据升级脚本的详细信息,请参阅本文的数据脚本部分:http://inchoo.net/magento/magento-install-install-upgrade-data-and-data-upgrade-scripts/