Mam pewne pytanie związane z bezpłatnym rozszerzeniem Magento OnePica ImageCdn.Błąd Magento: ImageCdn? (długa historia)
Zepsuty obraz pojawia się w interfejsie po przesłaniu "uszkodzonego obrazu".
Ok, zacznijmy długą historię:
Zauważyłem, że jest się z powodu przedłużenia ImageCdn i „skorumpowanego obraz”.
w jakiejś części kodu ImageCdn za:
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();
}
Moje pytanie jest, każdy wie, co jest celem tego kodu? Nie rozumiem, jaki jest sens ich komentarza powyżej. Myślę, że jest to błąd, ponieważ zawsze return $this->_getModel()->getUrl();
Czy to naprawdę błąd, czy to tylko moja zła interpretacja?
To, co zrobiłem do tej pory:
- Mam obrazu
dummy.jpeg
- Po pewnym dochodzenia, zdałem sobie sprawę, że jest „uszkodzony obraz”.
- I badane przy użyciu:
<?php print_r(getimagesize('dummy.jpeg')); ?>
Wynik:
Array ( [0] => 200 [1] => 200 [2] => 6 [3] => width="200" height="200" [bits] => 24 [mime] => image/x-ms-bmp )
Oczywiście byłem zaskoczony wynikiem, bo to wygląda dobrze, kiedy go otworzyć za pomocą Preview
(w systemie Mac OS X)
- Potem otwórz go za pomocą edytora szesnastkowego, pierwsze dwa bajty to:
BM
który jest bmp identyfikator - Próbowałem przesłać .bmp zdjęcie produktu -> nie powiodło się, nie można wybrać obraz
- Poprosiłem mojego kolegę przesłać również (w systemie Ubuntu) był w stanie zmienić opcje dla typu pliku na "dowolne pliki". Po kliknięciu przycisku "Prześlij pliki" wyświetlany komunikat o błędzie informuje, że ten typ pliku jest niedozwolony.
- To, co przyszło mi do głowy to: administrator próbował przesłać obraz
.bmp
i poniósł niepowodzenie. Następnie zmienił nazwę na.jpeg
i zakończył się sukcesem. Chociaż nie rozumiem, jak można zmienić nazwy obrazów bez wyświetlania uszkodzonego obrazu (poza tematem). - Te scenariusze wywołują wyjątek, zepsuję to, co wyśledziłem.
Ślad kodów:
- app/design/frontend/base/default/Katalog/product/view/media.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');
?>
- Od tego kodu, wiem, że obraz jest generowany przy użyciu url:
$this->helper('catalog/image')->init($_product, 'image')
- zrobiłem
Mage::log((string)$this->helper('catalog/image')->init($_product, 'image'));
Wynik:
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;
}
- Błąd wyzwalany w . W jakiejś części kodu, to w końcu dotrzeć:
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];
}
- Wyjątek został przechwycony w poprzednim kodzie:
Mage_Catalog_Helper_Image
public function __toString()
{
...
} catch(Exception $e) {
$url = Mage::getDesign()->getSkinUrl($this->getPlaceholder());
}
...
}
$ url stała:
http://local.m.com/skin/frontend/default/default/images/catalog/product/placeholder/image.jpg
- Tak, powinien on generowany prawo zastępczy obrazu? (bez rozszerzenia ImageCdn)
- Nie, ponieważ
Mage_Catalog_Helper_Image
został przepisany przezOnePica_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
}
W przypadku, gdy wszyscy już zapomnieli pytanie: ktoś wie co jest celem tego kodu? Nie rozumiem, jaki jest sens ich komentarza powyżej. Czy to naprawdę błąd, czy to tylko moja zła interpretacja?
Problem polega na tym, że 'OnePica_ImageCdn_Helper_Image' zawsze" zwróci $ this -> _ getModel() -> getUrl() 'nawet, gdy wystąpi wyjątek w' parent :: __ toString(); '. Gdy wystąpi wyjątek w funkcji '__toString', powinien wygenerować' $ url = Mage :: getDesign() -> getSkinUrl ($ this-> getPlaceholder()); 'co nie stało się w moim przypadku z powodu' OnePica_ImageCdn_Helper_Image' – ivantedja