デフォルトでは、製品コレクションをロードすると、製品に関する最小限の情報が取得されます。元:
Array
(
[entity_id] => 9
[entity_type_id] => 4
[attribute_set_id] => 4
[type_id] => simple
[sku] => DLKJFER343
[has_options] => 0
[required_options] => 0
[created_at] => 2012-12-07 16:04:58
[updated_at] => 2012-12-11 16:21:37
[cat_index_position] => 0
[stock_item (Varien_Object)] => Array
(
)
)
追加情報をロードするか、次のような値でフィルタリングするように Magento に明示的に指示する必要があります。
$_productCollection = Mage::getResourceModel( 'catalog/product_collection' );
// Filter by enabled products
$_productCollection->addAttributeToFilter( 'status', 1 );
// Load all product information
$_productCollection->addAttributeToSelect( '*' );
$_productCollection->addCategoryFilter( $category );
次のようなものが表示されます ($_product->debug()
いくつかの情報をダンプするために使用します)。
Array
(
[entity_id] => 3
[entity_type_id] => 4
[attribute_set_id] => 4
[type_id] => simple
[sku] => DLKJFER343
[has_options] => 0
[required_options] => 0
[created_at] => 2012-12-05 18:47:39
[updated_at] => 2012-12-11 16:20:25
[cat_index_position] => 0
[status] => 1
[visibility] => 4
[enable_googlecheckout] => 1
[tax_class_id] => 2
[is_recurring] => 0
[weight] => 3.0000
[price] => 534.2500
[name] => Sample Product
[url_key] => some-product
[is_returnable] => 2
[msrp_enabled] => 2
[msrp_display_actual_price_type] => 4
[image] => /w/r/something.png
[small_image] => /w/r/something_sm.png
[thumbnail] => /w/r/something_th.png
[options_container] => container2
[url_path] => some-product.html
[image_label] => One image label
[small_image_label] => Another image label
[thumbnail_label] => An image label
[description] => Long winded blah, blah, blah.
[short_description] => Blah, blah, blah.
[stock_item (Varien_Object)] => Array
(
)
)
メディア ギャラリー情報 (ラベルなど) は別物であり、オブジェクトのgetMediaGalleryImages()
メソッドを通じて具体的に要求する必要があります。Mage_Catalog_Model_Product
ただしNULL
、製品コレクションのループ中に呼び出された場合、このメソッドは戻ります。奇妙なことに、製品モデルを明示的にロードしないと、このデータにアクセスできません (理由については、この回答では説明しません)。したがって、次のようなことを試す必要があります。
$product = Mage::getModel( 'catalog/product' )->load( $_product->getId() );
$images = $product->getMediaGalleryImages();
ただし、コレクション ループでこれを行うとパフォーマンスが低下するため、注意してください。
編集:
Mage_Catalog_Block_Product->getLoadedProductCollection()
長い、長い、長い話です(このメソッドは深く掘り下げます)...私が知る限り、に 設定されたgetLoadedProductCollection()
属性のみが表示されます。Used In Product Listing
Yes
その理由は Mage_Catalog_Model_Resource_Config にあります...
public function getAttributesUsedInListing()
{
// ... some code above omitted...
->where('main_table.entity_type_id = ?', (int)$this->getEntityTypeId())
// THIS RIGHT HERE IS WHY
->where('additional_table.used_in_product_listing = ?', 1);
return $adapter->fetchAll($select);
}