2012-06-06 32 views
1

我有一個自定義的銷售點管理員Magento擴展。我試圖在POS頁面上的管理產品網格中添加一個縮略圖。當每個產品都有縮略圖時,它可以100%正常工作。但是當產品沒有圖像時,代碼完全被打破。如何趕上這個PHP/Magento錯誤:當沒有縮略圖,代碼中斷

如何修改此代碼以檢查是否存在縮略圖,如果沒有,則顯示佔位符(任何替代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

回答

7

你可以換觸發異常在try catch塊調用,而把代碼做佔位符來捕獲異常:

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

但是不要。這簡直是​​掩蓋潛在的問題:

佔位符圖像從雙雙失蹤/護膚/前端/ your_package/your_theme /圖像/目錄/產品/佔位和

它繼承了這個主題可以看到異常被拋出(和原因:沒有圖像和沒有佔位符):app/code/core/Mage/Catalog/Model/Product/Image.phpsetBaseFile()方法。

我寧願讓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 
+0

是至少一些!這工作。拋棄我的是,我把所有這些佔位符圖像放在上面列出的適當目錄中,所以我認爲這個錯誤在別處。但問題是,我的佔位符縮略圖在管理員中以某種方式未設置(顯示丟失的圖像)。在從1.4升級到1.6時可能會丟失。因此,在管理>配置>目錄>產品圖片佔位符中,我重新上傳了佔位符圖片,特別是縮略圖,並且它工作正常。佔位符圖片在前端顯示得很好,但在管理員配置中沒有。 –

+0

所以,你的佔位符圖像解決方案工作...但由於Magento可以取消設置這些圖像(無論出於什麼原因和任何情況),我也會使用錯誤捕獲代碼,因爲這樣做也可以,以防這些縮略圖在未來。 –

-1

異常在Mage_Catalog_Model_Product_Image :: setBaseFile($文件)拋出,而目錄/圖像助手試圖初始化畫廊和負載縮略圖。 當您嘗試獲取縮略圖網址時會發生這種情況,而不是在加載產品時發生。

避免這個問題的最簡單的方法是使用

try { 
    $cMyUrl = $cProduct->getThumbnailUrl(); 
} catch (Exception $e) { 
    $cMyUrl = 'default_thumbnail.jpg'; // or something else ;-) 
}