Ich habe einige Fragen im Zusammenhang mit Magentos kostenlose Erweiterung OnePica ImageCdn.Magento: ImageCdn Fehler? (lange Geschichte)
Ein beschädigtes Bild erscheint im Frontend, wenn ich "beschädigtes Bild" hochgeladen habe.
Ok, lassen Sie uns die lange Geschichte beginnen:
Ich bemerke es wegen ImageCdn Verlängerung passiert ist und „korrupt Bild“.
In einem Teil ImageCdn Code:
OnePica_ImageCdn_Helper_Image
/**
* In older versions of Magento (<1.1.3) this method was used to get an image URL.
* However, 1.1.3 now uses the getUrl() method in the product > image model. This code
* was added for backwards compatibility.
*
* @return string
*/
public function __toString()
{
parent::__toString();
return $this->_getModel()->getUrl();
}
Meine Frage ist, weiß jemand, was ist der Zweck dieser Code? Ich verstehe nicht, was die Bedeutung ihres Kommentars oben ist. Ich denke, es ist ein Fehler wie immer return $this->_getModel()->getUrl();
Ist es wirklich ein Fehler oder es ist nur meine falsche Interpretation?
Das ist, was ich bisher getan habe:
- ich ein Bild haben
dummy.jpeg
- Nach einigen Untersuchungen, wurde mir klar, dass eine „korrupte Bild“ ist.
- ich mit getestet:
<?php print_r(getimagesize('dummy.jpeg')); ?>
Ergebnis:
Array ( [0] => 200 [1] => 200 [2] => 6 [3] => width="200" height="200" [bits] => 24 [mime] => image/x-ms-bmp )
Natürlich habe ich vom Ergebnis überrascht, weil es gut aussieht, wenn ich es Preview
mit öffnen (auf Mac OSX)
- Dann öffne ich es Hex-Editor verwenden, werden die ersten beiden Bytes ist:
BM
die Kennung BMPs ist - Ich habe versucht, für ein Produkt laden .bmp Bild -> fehlgeschlagen ist, kann das Bild nicht wählen
- ich mein Kollege fragte hochladen Es war auch (auf Ubuntu), er konnte die Auswahl für den Dateityp in "beliebige Dateien" ändern. Wenn er auf "Dateien hochladen" klickt, wird eine Fehlermeldung angezeigt, dass dieser Dateityp nicht zulässig ist.
- Was mir in den Sinn kam ist: ein Admin versucht,
.bmp
Bild hochladen und fehlgeschlagen. Dann benennt er es in.jpeg
um und erfolgreich. Obwohl ich es nicht verstehe, welche Art von Bildern umbenannt werden kann, ohne ein gebrochenes Bild-Logo zu zeigen (außerhalb des Themas). - Diese Szenarien lösen eine Exception aus, ich zerlege das, was ich zurückverfolgt habe.
Trace des Codes:
- app/design/frontend/base/default/catalog/product/view/Medien.phtml
<?php
$_img = '<img id="image" src="'.$this->helper('catalog/image')->init($_product, 'image').'" alt="'.$this->htmlEscape($this->getImageLabel()).'" title="'.$this->htmlEscape($this->getImageLabel()).'" />';
echo $_helper->productAttribute($_product, $_img, 'image');
?>
- Von diesem Code, ich weiß, dass Bild-URL mit erzeugt:
$this->helper('catalog/image')->init($_product, 'image')
- Ich habe
Mage::log((string)$this->helper('catalog/image')->init($_product, 'image'));
Ergebnis:
http://local.m.com/media/catalog/product/cache/1/image/9df78eab33525d08d6e5fb8d27136e95/d/u/dummy.jpeg
.
- Mage_Catalog_Helper_Image
public function __toString()
{
try {
if($this->getImageFile()) {
$this->_getModel()->setBaseFile($this->getImageFile());
} else {
$this->_getModel()->setBaseFile($this->getProduct()->getData($this->_getModel()->getDestinationSubdir()));
}
if($this->_getModel()->isCached()) {
return $this->_getModel()->getUrl();
} else {
if($this->_scheduleRotate) {
$this->_getModel()->rotate($this->getAngle());
}
if ($this->_scheduleResize) {
$this->_getModel()->resize();
}
if($this->getWatermark()) {
$this->_getModel()->setWatermark($this->getWatermark());
}
Mage::log('pass');
$url = $this->_getModel()->saveFile()->getUrl();
Mage::log('not pass');
}
} catch(Exception $e) {
$url = Mage::getDesign()->getSkinUrl($this->getPlaceholder());
}
return $url;
}
- Der Fehler ausgelöst in . In einem Teil des Codes, wird es schließlich erreichen:
Varien_Image_Adapter_Gd2
private function _getCallback($callbackType, $fileType = null, $unsupportedText = 'Unsupported image format.')
{
if (null === $fileType) {
$fileType = $this->_fileType;
}
if (empty(self::$_callbacks[$fileType])) {
//reach this line -> exception thrown
throw new Exception($unsupportedText);
}
if (empty(self::$_callbacks[$fileType][$callbackType])) {
throw new Exception('Callback not found.');
}
return self::$_callbacks[$fileType][$callbackType];
}
- Die Ausnahme in dem vorherigen Code abgefangen wurde:
Mage_Catalog_Helper_Image
public function __toString()
{
...
} catch(Exception $e) {
$url = Mage::getDesign()->getSkinUrl($this->getPlaceholder());
}
...
}
die $ url wurde:
http://local.m.com/skin/frontend/default/default/images/catalog/product/placeholder/image.jpg
- So sollte es Platzhalter Bild rechts erzeugt haben? (ohne ImageCdn Erweiterung)
- Nein, denn
Mage_Catalog_Helper_Image
vonOnePica_ImageCdn_Helper_Image
public function __toString()
{
parent::__toString(); //the result is http://local.m.com/skin/frontend/default/default/images/catalog/product/placeholder/image.jpg but no variable store/process its value
return $this->_getModel()->getUrl(); //in the end it will return http://local.m.com/media/catalog/product/cache/1/image/9df78eab33525d08d6e5fb8d27136e95/d/u/dummy.jpeg
}
Im Fall neu geschrieben wurde Sie alle vergessen haben, schon die Frage: Jeder weiß, was ist der Zweck dieses Codes? Ich verstehe nicht, was ihre Kommentare oben bedeuten. Ist es wirklich ein Fehler oder ist es nur meine falsche Interpretation?
Das Problem ist, 'OnePica_ImageCdn_Helper_Image' wird immer $ this -> _ getModel() -> getUrl()' selbst dann zurückgeben, wenn eine Ausnahme in 'parent :: __ toString(); 'aufgetreten ist. Wenn eine Ausnahme in der '__toString'-Funktion auftrat, sollte es' $ url = Mage :: getDesign() -> getSkinUrl ($ this-> getPlaceholder()) erzeugen; 'was in meinem Fall wegen' OnePica_ImageCdn_Helper_Image' nicht passiert ist – ivantedja