如何捕获此PHP/Magento错误:当没有缩略图时,代码会中断

如何捕获此PHP/Magento错误:当没有缩略图时,代码会中断,php,magento,Php,Magento,我有一个定制的销售点管理员Magento扩展。我正在尝试向POS页面上的管理产品网格添加缩略图。当每个产品都有缩略图时,它可以100%正常工作。但是当一个产品没有图像时,代码就完全崩溃了 如何修改此代码以检查是否有缩略图,如果没有,如何显示占位符(任何替代html都可以) 如果没有缩略图,整个页面将导致错误: 当目录/图像帮助器尝试初始化库并加载缩略图时,Mage_Catalog_Model_Product_Image::setBaseFile($file)中会引发异常。 这发生在您尝试获取

我有一个定制的销售点管理员Magento扩展。我正在尝试向POS页面上的管理产品网格添加缩略图。当每个产品都有缩略图时,它可以100%正常工作。但是当一个产品没有图像时,代码就完全崩溃了

如何修改此代码以检查是否有缩略图,如果没有,如何显示占位符(任何替代html都可以)


如果没有缩略图,整个页面将导致错误:

当目录/图像帮助器尝试初始化库并加载缩略图时,Mage_Catalog_Model_Product_Image::setBaseFile($file)中会引发异常。 这发生在您尝试获取缩略图url时,而不是在加载产品时

避免这种情况的最简单方法是使用

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

当目录/图像帮助器尝试初始化库并加载缩略图时,Mage_Catalog_Model_Product_Image::setBaseFile($file)中会引发异常。 这发生在您尝试获取缩略图url时,而不是在加载产品时

避免这种情况的最简单方法是使用

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

您可以将触发异常的调用包装在try-catch块中,并将代码放入占位符中:

try {
    $cMyUrl = $cProduct->getThumbnailUrl();
} catch (Exception $e) {
    //Do something here
}
但是不要。这只是掩盖了根本问题:

占位符图像在/skin/frontend/your_-package/your_-theme/images/catalog/product/placeholder及其继承的主题中均丢失

您可以在
setBaseFile()
方法中的
app/code/core/Mage/Catalog/Model/Product/image.php
中看到抛出的异常(以及原因:没有图像和占位符)

我宁愿让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

您可以将触发异常的调用包装在try-catch块中,并将代码放入占位符中:

try {
    $cMyUrl = $cProduct->getThumbnailUrl();
} catch (Exception $e) {
    //Do something here
}
但是不要。这只是掩盖了根本问题:

占位符图像在/skin/frontend/your_-package/your_-theme/images/catalog/product/placeholder及其继承的主题中均丢失

您可以在
setBaseFile()
方法中的
app/code/core/Mage/Catalog/Model/Product/image.php
中看到抛出的异常(以及原因:没有图像和占位符)

我宁愿让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

对成功了。让我恼火的是,我把所有这些占位符图像都放在上面列出的正确目录中,所以我认为错误在别处。但问题是,我的占位符缩略图不知何故在管理员中未设置(显示丢失的图像)。可能在我从1.4升级到1.6的过程中丢失了。因此,在“管理>配置>目录>产品图像占位符”中,我重新上传了占位符图像,特别是缩略图,它成功了。占位符图像在前端显示良好,但在管理配置中没有显示。因此,占位符图像解决方案工作正常。。。但是由于Magento可以设置这些图像(无论出于什么原因和什么情况),我也将使用错误捕获代码,因为这同样有效,以防将来这些缩略图丢失。是的!成功了。让我恼火的是,我把所有这些占位符图像都放在上面列出的正确目录中,所以我认为错误在别处。但问题是,我的占位符缩略图不知何故在管理员中未设置(显示丢失的图像)。可能在我从1.4升级到1.6的过程中丢失了。因此,在“管理>配置>目录>产品图像占位符”中,我重新上传了占位符图像,特别是缩略图,它成功了。占位符图像在前端显示良好,但在管理配置中没有显示。因此,占位符图像解决方案工作正常。。。但是,如果Magento可以取消设置这些图像(无论出于何种原因和情况),我也将使用错误捕获代码,因为这同样有效,以防将来丢失这些缩略图。