この回答に従って、カテゴリ一覧ページで画像のない商品を非表示にしました。しばらくはうまく機能しました。
さて、なぜか画像のない商品が出品ページに表示されたままになっているようです。なぜこれが起こっているのかについてのアイデアはありますか?
注: 同じ list.phtml ページが使用されています。
ありがとうございました。
次を list.phtm に追加します。
//$_productCollection=$this->getLoadedProductCollection();
$_productCollection = clone $this->getLoadedProductCollection();
$_productCollection->clear()
->addAttributeToFilter('small_image', array('neq' => 'no_selection'))
->load();
この回答では、次のことが推奨されました。
->addAttributeToFilter('image', array('neq' => 'no_selection'))
私はそれを次のように設定しました:
->addAttributeToFilter('small_image', array('neq' => 'no_selection'))
前の回答が機能しなかった理由は、製品コレクションが通常の画像を読み込まないため、通常の画像をフィルターする属性として追加できないため、代わりにフィルターする属性として small_image を追加しました。
また、ページに画像を追加してコレクションを追加するRS の回答を試すこともできます。以下を使用してすべての属性を追加する必要がある場合もあります。
->addAttributeToSelect('*')
Magento を一列に並べるには、いくつかの秘訣があります。私が学んだことの 1 つは、Magento モデルがさまざまな理由で変更されることであり、その理由を理解するのはちょっと難しいということです。これを行うためのより良い方法 (コレクションの変更など) がありますが、うまくいかないことがあり、その理由を理解するための日数がありません。
イメージが存在することを確認する確実な方法が必要な場合は、次のコードを使用してください...「magento の方法」ではないかもしれませんが、機能し、自分のサイト (Magento EE 1.12) でテストしました。関数に入れるか、必要に応じて phtml で直接使用してください。
基本的には、URL が存在することを確認するだけです。
$exists = false;
$entity_id = 8800;
$product = Mage::getModel('catalog/product')->load($entity_id);
$mediaUrl= Mage::getBaseUrl('media');
$imageUrl = $mediaUrl . "catalog/product" . $product->getImage();
$file_headers = @get_headers($imageUrl);
if($file_headers[0] == 'HTTP/1.1 404 Not Found') {
$exists = false;
}
else {
$exists = true;
}
var_dump($exists);
var_dump($imageUrl);
echo '<img src="' . $imageUrl . '" />';
$exists は true (画像が存在する) または false (画像が存在しない) のいずれかになります。
list.phtml で 'image' (ベース イメージ) プロパティを取得しようとしていることが問題だと思います (デフォルトでは、サムネイルの small_image にしかアクセスできません)。
list.phtml (view.pthml のように完全な製品リソースをロードしない)
echo $_product->getImage() //null
echo $_product->getThumbnail() // path/name.jpg
echo $_product->getSmallImage() // path/name.jpg
このようなものを app/design/frontend/default/yourtheme/layout/catalog.xml に追加する必要があるかもしれないと思います
<action method="addAttribute"><name>image</name></action>