商品をループ処理していて、商品の画像でエラーが発生します。
私が使用しているコードは以下の通りです:
<?php
$collection = Mage::getModel('catalog/product')->getCollection();
$collection->addAttributeToFilter('status', 1); // 1=Enabled, 2=Disabled
$obj = Mage::getModel('catalog/product');
?>
<?php $productCounter=1; ?>
<?php foreach ($collection as $product): ?>
<?php $_productInCollection = $obj->load($product->entity_id); ?>
<li class="item text-center">
<a class="product-image" title="<?php echo $_productInCollection->getName(); ?>" href="<?php echo $_productInCollection->getProductUrl(); ?>">
<img src="<?php echo $this->helper('catalog/image')->init($_productInCollection, 'small_image')->resize(null, 152)->keepFrame(false); ?>" height="152" alt="<?php echo $this->stripTags($this->getImageLabel($_productInCollection, 'small_image'), null, true) ?>" />
</a>
</li>
<?php if ($productCounter >=26) : ?>
<?php break; ?>
<?php endif; ?>
<?php $productCounter ++; ?>
<?php endforeach; ?>
名前などの属性はうまく機能していますが、商品画像で奇妙なエラーが発生しています。使用している製品の約75%に画像がないため、デフォルトのプレースホルダー画像が表示されますが、奇妙なパターンが表示されます。
PRODUCT 1 -> has no image in admin panel -> SHOWS PLACEHOLDER (correct)
PRODUCT 2 -> has no image in ap -> SHOWS PLACEHOLDER (correct)
PRODUCT 3 -> has an image in ap -> SHOWS PRODUCT 3 IMAGE (correct)
PRODUCT 4 -> has no image in ap -> SHOWS PRODUCT 3 IMAGE (wrong, should show placeholder)
PRODUCT 5 -> has no image in ap -> SHOWS PRODUCT 3 IMAGE (wrong, should show placeholder)
PRODUCT 6 -> has no image in ap -> SHOWS PRODUCT 3 IMAGE (wrong, should show placeholder)
PRODUCT 7 -> has an image in ap -> SHOWS PRODUCT 7 IMAGE (correct)
PRODUCT 8 -> has no image in ap -> SHOWS PRODUCT 7 IMAGE (wrong, should show placeholder)
PRODUCT 9 -> has no image in ap -> SHOWS PRODUCT 7 IMAGE (wrong, should show placeholder)
PRODUCT 10 -> has an image in ap -> SHOWS PRODUCT 10 IMAGE (correct)
画像のある商品がループに表示されるとすぐに、その商品は正常に表示されますが、ループの次の商品に画像がない場合は、プレースホルダーではなく前の商品の画像が表示されます。私も試してみましたgetImageUrl()
が、同じパターンが発生します。
キャッシングの問題なのか、それとも画像が毎回正しくリセットされないのでしょうか。どんな助けでも大歓迎です、ありがとう!
Magento ver。を使用しています。1.7.0.2。
編集-解決済み:以下のマリウスのおかげで、これは私が使用しているコードです。
<?php
$collection = Mage::getModel('catalog/product')->getCollection();
$collection->addAttributeToSelect('*');
$collection->addAttributeToFilter('status', 1);
// 1=Enabled, 2=Disabled
$collection->getSelect()->limit(25);
$productBlock=$this->getLayout()->createBlock("catalog/product");
?>
<?php $productCounter = 1; ?>
<?php foreach ($collection as $product): ?>
<?php if (($productCounter + 4) % 5 == 0) : ?>
<ul class="products-grid">
<?php endif; ?>
<li class="item text-center">
<h3><?php echo $product->getName(); ?></h3>
<img src="<?php echo $this->helper('catalog/image')->init($product, 'small_image')->resize(null, 152)->keepFrame(false); ?>" height="152" alt="<?php echo $this->stripTags($this->getImageLabel($product, 'small_image'), null, true) ?>" />
<?php echo $productBlock->getPriceHtml($product,true); ?>
<a href="<?php echo $product->getProductUrl() ?>" title="<?php echo $product->getName(); ?>" class="more-info">
More info
</a>
</li>
<?php if ($productCounter % 5 == 0 || $productCounter == $collection.length) : ?>
</ul>
<?php endif; ?>
<?php endforeach; ?>
load()
ループにINGの!コレクションを取得して、必要な属性情報をロードします。