我可以在magento的平板产品目录表中添加其他属性吗?

ben*_*ben 19 php magento

我正在优化magento商店,我遇到过几个帖子,建议对具有大量SKU的商店使用Flat Product Catalog.

因为我有超过10K的产品,我想我会尝试一下.但是,在使用平板产品目录时,只会在产品对象中加载少数几个属性(例如,SKU,名称,简短描述).我的模板在搜索/浏览视图中显示了一些其他属性,例如制造商和颜色.

有没有办法将这些属性添加到平面产品目录表中,以便可以访问它们?

Fia*_*abs 45

1.4.xx,只需进入"平面产品目录"中要使用的属性,并确保"在产品列表中使用"属性设置为"".进行更改后,重新索引"平面产品数据"

以下属性导致该属性包含在"Flat Product Catalog"中:

"Use in Layered Navigation" = Yes
"Used in Product Listing" = Yes
"Used for Sorting in Product Listing" = Yes
Run Code Online (Sandbox Code Playgroud)

  • "用于产品清单"似乎是关键.我有几个已经"在分层导航中使用"的属性,但它们没有出现在catalog_product_flat_1表中,直到我设置了"在产品列表中使用". (4认同)

小智 11

我也一直在研究这个问题,我将其描述为"无法在平面模式下访问产品集合属性"或"addAttributeToSelect无法在平面模式下工作".

我发现了一个"干净"的解决方案:

  • 不需要该属性在admin中具有特定设置(可能由用户添加,或隐藏在前端)
  • 适用于平面和非平面模式

请注意 - 在下面的代码中我使用了相关的产品系列,但这适用于任何产品系列(特别是,任何继承自的产品Mage_Eav_Model_Entity_Collection_Abstract)

失败的代码:

$_product = Mage::getModel('catalog/product')->loadByAttribute( 'sku', 'ABC123' );
$coll = $_product->getTypeInstance()->getAssociatedProductCollection()
    ->addAttributeToSelect( 'my_custom_attribute' )
;
Run Code Online (Sandbox Code Playgroud)

在平面模式下,如果该属性不在平面表中,则上述代码将无法添加该属性.

工作代码:

$_product = Mage::getModel('catalog/product')->loadByAttribute( 'sku', 'ABC123' );
$coll = $_product->getTypeInstance()->getAssociatedProductCollection()
    ->joinAttribute( 'my_custom_attribute', 'catalog_product/my_custom_attribute', 'entity_id', null, 'left' )
    ->addAttributeToSelect( 'my_custom_attribute' )
;
Run Code Online (Sandbox Code Playgroud)

joinAttribute方法向查询添加联接.即使这复制了已经在平面表中的属性,它也能工作.

请注意,我在left那里使用了一个连接,以确保my_custom_attribute在未在这些产品上设置时获取产品.inner如果您只对my_custom_attribute设置的行感兴趣,可以更改它.

(在CE 1.6.2.0中测试)


小智 5

其他人已经提供了通常足够的答案(将产品列表中的使用设置为是),但是我发现了一个边缘案例,在我搜索同样的事情时会很有用.

如果要将自定义源模型用于要包含在平面产品表中的自定义属性,则必须getFlatColums()在源模型类中进行覆盖.是的,我知道它拼错了,但那是你原生的Magento.

样品:

public function getFlatColums() {
    return array($this->getAttribute()->getAttributeCode() => array(
        'type'      => 'tinyint',
        'unsigned'  => true,
        'is_null'   => true,
        'default'   => null,
        'extra'     => null
    ));
}
Run Code Online (Sandbox Code Playgroud)

资料来源:http://www.dconstructing.com/2012/03/14/custom-product-attributes-and-flat-database-tables-in-magento