質問
子製品をループし、現在の在庫数量と子製品名を返そうとする拡張機能で次のコード ブロックを見つけました。
<?php foreach ($this->getChildProducts() as $childProduct) : ?>
<?php $childProductStockQty = $this-> getProductStockQty($childProduct);?>
<?php if ($childProductStockQty > 0) : ?>
<tr>
<td><?php echo $childProduct->getName() ?></td>
<td class="a-center"><?php echo $childProductStockQty ?></td>
</tr>
<?php endif ?>
<?php endforeach ?>
で CE 1.9.0.1
これは完全に機能し、製品名と在庫数量の両方が期待どおりに返されました。で CE 1.9.1
, の場合、正しい在庫数量が返されますが、名前は null を返します。
私の質問は「この拡張機能の何が問題ですか?」ということではなく、開発者にも質問を送りました。何か変化があったのかご存知の方はいらっしゃるかと思いますが、 CE 1.9.1
子製品名を取得する方法について説明します。
コードを下に読んでいくと、 Mage/CatalogInventory/Block/Stockqty
ウサギの穴は私が感知できるような光を放っていません。
あらゆるアドバイスをお待ちしております。
解決
その名前がNULLを返している興味深い。コードを介して狩猟するgetUsedProducts
には、Retrieve array of "subproducts"
に終了し、製品のコレクションを返します。
地元のリポジーを1.9.0.1から1.9.1に比較するときに見ることができる変更はありません。あなたが返品されていて、名前がnullであることを見知らぬ人でさえ、どちらも必要なフィールドであるためモデルに存在する必要があります。おそらくモジュールはコアの動作をもたらすコレクションに対する追加の変更をします。
しかし質問に答えるために。私はこれら2つのバージョンの間で変わったものは何でも見ることができません。
他のヒント
この線でこれを解決します
<?php $childProduct = Mage::getModel('catalog/product')->load($childProduct->getId()); ?>
.
だから私はすべてのChildProduct情報を入手し、GetNameは私たちが期待するものを得る。
これが助けに役立ちます!最善の方法ではなく、機能します。
まず、ループ内に有効な製品オブジェクトがあるか?つまりは $childProduct->getId()
IDを返すか、 null
?その場合は、アップグレード時に何かが壊れました。その点に注意してください $this->getProductStockQty()
そして $childProduct->getName()
は ない 同じ方法です。したがって、必ずしも相互に協力したり、一緒に失敗したりする必要はありません。
次に、それぞれのブロックを調べる必要があります。 getChildProducts()
方法。そこから、コレクションがどのようにまとめられているかを追跡できます。コレクションに (アップグレード後の何らかの理由で) が含まれていないことが原因である可能性があります。 name
その中のフィールド addAttributeToFilter()
フィルター。