1

カスタムのPOS管理者Magento拡張機能があります。POSページの管理製品グリッドにサムネイルを追加しようとしています。すべての製品にサムネイル画像がある場合は、100%正常に機能します。しかし、画像のない製品があると、コードは完全に壊れます。

このコードを変更してサムネイルがあるかどうかを確認し、ない場合はプレースホルダーを表示するにはどうすればよいですか(代替のHTMLで問題ありません)。

<?php

  class MDN_PointOfSales_Block_Widget_Grid_Column_Renderer_Thumbnail
    extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
  {
    public function render(Varien_Object $row)
    {      

    $cProduct = Mage::getModel("catalog/product");
    $cProductId = $row->getId();
    $cProduct->load($cProductId);  // works for product IDs w/ a thumbnail. Breaks if no thumbnail set.
    // For example, the following line works, loading the thumbnail for the 5533 product for all rows in the grid:  
    // $cProduct->load(5533);

    $cMyUrl = $cProduct->getThumbnailUrl();

    $html = '<img ';
    $html .= 'src="' . $cMyUrl . '"';
    $html .= 'class="grid-image ' . $cProductId . '"/>';

    return $html;      

    }
  }
?>

サムネイルがない場合、ページ全体でエラーが発生します: http ://www.screencast.com/t/zk6jVChiAC

4

2 に答える 2

7

例外をトリガーする呼び出しをtrycatchブロックでラップし、プレースホルダーを実行するコードを挿入できます。

try {
    $cMyUrl = $cProduct->getThumbnailUrl();
} catch (Exception $e) {
    //Do something here
}

しかし、しないでください。これは、根本的な問題を単に覆い隠しているだけです。

プレースホルダー画像が/skin/ frontend / your_package / your_theme / images / catalog / product/placeholderとそれが継承するテーマの両方から欠落しています

app/code/core/Mage/Catalog/Model/Product/Image.phpメソッドの:で、スローされた例外(および理由:画像とプレースホルダーがない)を確認できますsetBaseFile()

例外を不必要にスローしてその周りにコーディングするのではなく、Magentoにプレースホルダーを適切に処理させたいと思います。

したがって、プレースホルダー画像を上記のスキン画像ディレクトリに追加します。次のものが必要です。

/skin/frontend/your_package/your_theme/images/catalog/product/placeholder/image.jpg
/skin/frontend/your_package/your_theme/images/catalog/product/placeholder/small_image.jpg
/skin/frontend/your_package/your_theme/images/catalog/product/placeholder/thumbnail.jpg

または基本テーマの少なくとも一部

/skin/frontend/base/default/images/catalog/product/placeholder/image.jpg
/skin/frontend/base/default/images/catalog/product/placeholder/small_image.jpg
/skin/frontend/base/default/images/catalog/product/placeholder/thumbnail.jpg
于 2012-06-06T21:42:13.017 に答える
-1

カタログ/画像ヘルパーがギャラリーを初期化してサムネイルを読み込もうとしている間、Mage_Catalog_Model_Product_Image :: setBaseFile($ file)で例外がスローされます。これは、製品をロードするときではなく、サムネイルのURLを取得しようとしたときに発生します。

これを回避する最も簡単な方法は、を使用して例外をキャッチすることです。

try {
    $cMyUrl = $cProduct->getThumbnailUrl();
} catch (Exception $e) {
    $cMyUrl = 'default_thumbnail.jpg'; // or something else ;-)
}
于 2012-06-06T21:00:19.580 に答える