Редактор Magento 1.8.1.0 WYSIWYG не отображает миниатюры в диспетчере изображений


Я публикую это для комментариев об ошибке и для того, чтобы помочь всем, у кого есть такая же проблема. (ответ, опубликованный мной)

При использовании редактора WYSIWYG и вставке изображений диспетчер изображений не отображает миниатюры изображений.

Глядя на URL-адрес изображения, созданный magento, я вижу, что в URL-адресе отсутствует часть /wysiwyg/

Http://site.domain/media//.thumbs/ex_logo_sm.jpg?rand=1392103618

Это выглядит чисто отсутствует, как было отмечено двойником // в URL

Author: Marius, 2014-02-11

3 answers

Отслеживая код, мне кажется, что в вспомогательной подпрограмме, расположенной в Mage_Cms_Helper_Wysiwyg_Images::getBaseUrl()

Процедура такова:

public function getBaseUrl()
    {
        return Mage::getBaseUrl('media') . '/';
    }

И внесение изменений в

public function getBaseUrl()
    {
        return Mage::getBaseUrl('media') . Mage_Cms_Model_Wysiwyg_Config::IMAGE_DIRECTORY . '/';
    }

Устраняет проблему.

Это называется из Mage_Cms_Model_Wysiwyg_Images_Storage::getThumbnailUrl()

return str_replace('\\', '/', $this->getHelper()->getBaseUrl() . $thumbSuffix) . $randomIndex;

, который явно выводит неправильный URL-адрес без константы на месте.

 2
Author: ProxiBlue, 2014-02-11 07:45:36

У нас была такая же проблема на клиентском сайте, на самом деле в игре было довольно много элементов, и я могу предложить вероятное объяснение того, как была вызвана несуществующая проблема с изображением, хотя, казалось бы, это не должно быть возможно:

  1. Проблема, описанная выше, присутствовала, когда Magento проверял наличие media/wysiwyg/.thumbs/image.jpg, в отличие от правильного расположения media/wysiwyg/.thumbs/wysiwyg/image.jpg, и, если присутствует, отображал ссылку на неправильный URL-адрес http://example.com/media//wysiwyg/.thumbs/image.jpg fd

  2. У нас было Установлен APPSEC-212, который ввел использование realpath() для устранения проблемы безопасности, однако сочетание этого и использования символической ссылки в нашем каталоге media приводило к тому, что Mage_Cms_Model_Wysiwyg_Images_Storage::getThumbsPath() возвращал каталог media/wysiwyg/.thumbs, в отличие от media/wysiwyg/.thumbs/wysiwyg - причина в том, что этот метод выполняет условную проверку, которая не оценивалась как истинная, поскольку наш каталог мультимедиа был расширен с помощью realpath() и поэтому не возвращал 0 для проверки strpos(), см. Проверку ниже, строка 6:{[ 19]}

    public function getThumbsPath($filePath = false)
    {
        $mediaRootDir = Mage::getConfig()->getOptions()->getMediaDir();
        $thumbnailDir = $this->getThumbnailRoot();
    
        if ($filePath && strpos($filePath, $mediaRootDir) === 0) {
            $thumbnailDir .= DS . dirname(substr($filePath, strlen($mediaRootDir)));
        }
    
        return $thumbnailDir;
    }
    
  3. Это это уникально для нас, но мы также отказывали в доступе к каталогам dotfile и ранее не замечали в этом проблемы, потому что мы никогда не обслуживали их, пока не установили APPSEC-212, поэтому даже когда мы исправили проблему, мы получали 404-е на что-либо в .thumbs

Проблема, с которой мы столкнулись, все еще существует в версии 1.9.1.0 (последняя версия на момент написания) - я предполагаю, что никто не заметит, потому что изображения по-прежнему отображаются "на лету" без использования .thumbs каталог, только с введением APPSEC-212 в сочетании с символическим каталогом media, который привел к созданию файлов большого пальца в неправильном расположении, что затем привело к тому, что неправильно проверенный путь вернул значение true, и мы впоследствии увидели 404 на наших изображениях.

Как ни странно, APPSEC-212 устранил бы проблему, если бы не наш каталог с символическими ссылками media.

Кстати, вот наши модификации:

В app/code/core/Mage/Cms/Helper/Wysiwyg/Images.php :

@@ -89,7 +89,7 @@ public function getStorageRoot()
      */
     public function getBaseUrl()
     {
-        return Mage::getBaseUrl('media') . '/';
+        return Mage::getBaseUrl('media') . '/' . Mage_Cms_Model_Wysiwyg_Config::IMAGE_DIRECTORY . '/';
     }

     /**

В app/code/core/Mage/Cms/Model/Wysiwyg/Images/Storage.php :

@@ -336,7 +336,7 @@ public function getThumbnailUrl($filePath, $checkFile = false)
         $mediaRootDir = $this->getHelper()->getStorageRoot();

         if (strpos($filePath, $mediaRootDir) === 0) {
-            $thumbSuffix = self::THUMBS_DIRECTORY_NAME . DS . substr($filePath, strlen($mediaRootDir));
+            $thumbSuffix = self::THUMBS_DIRECTORY_NAME . DS . substr($filePath, strlen(realpath(Mage::getConfig()->getOptions()->getMediaDir())));

             if (! $checkFile || is_readable($mediaRootDir . $thumbSuffix)) {
                 $randomIndex = '?rand=' . time();
@@ -405,8 +405,8 @@ public function resizeOnTheFly($filename)
      */
     public function getThumbsPath($filePath = false)
     {
-        $mediaRootDir = Mage::getConfig()->getOptions()->getMediaDir();
-        $thumbnailDir = $this->getThumbnailRoot();
+        $mediaRootDir = realpath(Mage::getConfig()->getOptions()->getMediaDir());
+        $thumbnailDir = realpath($this->getThumbnailRoot());

         if ($filePath && strpos($filePath, $mediaRootDir) === 0) {
             $thumbnailDir .= DS . dirname(substr($filePath, strlen($mediaRootDir)));
 2
Author: Mike Whitby, 2015-03-04 11:24:54

На самом деле существует несколько ошибок, сходящихся вместе.

По умолчанию Magento, похоже, сохраняет большие пальцы в каталоге media/wysiwyg/.thumbs/wysiwyg/. Но Mage_Cms_Model_Wysiwyg_Images_Storage::getThumbnailUrl() ищет большой палец в media/wysiwyg/.thumbs/.

Ошибка срабатывает только в том случае, если большой палец находится в media/wysiwyg/.thumbs/. Я не смог выяснить, при каких условиях большой палец сохраняется в неправильном каталоге. Но, по крайней мере, это объясняет, почему только некоторые серверы показывают эту проблему.

Итак, в дополнение к тому, что сказал ProxiBlue, вам придется изменить Mage_Cms_Model_Wysiwyg_Images_Storage::getThumbnailUrl() из

public function getThumbnailUrl($filePath, $checkFile = false)
{
    $mediaRootDir = $this->getHelper()->getStorageRoot();

    if (strpos($filePath, $mediaRootDir) === 0) {
        $thumbSuffix = self::THUMBS_DIRECTORY_NAME . DS . substr($filePath, strlen($mediaRootDir));

        if (! $checkFile || is_readable($mediaRootDir . $thumbSuffix)) {
            $randomIndex = '?rand=' . time();
            return str_replace('\\', '/', $this->getHelper()->getBaseUrl() . $thumbSuffix) . $randomIndex;
        }
    }

    return false;
}

До

public function getThumbnailUrl($filePath, $checkFile = false)
{
    $mediaRootDir = Mage::getConfig()->getOptions()->getMediaDir() . DS;

    if (strpos($filePath, $mediaRootDir) === 0) {
        $thumbSuffix = self::THUMBS_DIRECTORY_NAME . DS . substr($filePath, strlen($mediaRootDir));

        if (! $checkFile || is_readable($this->getHelper()->getStorageRoot() . $thumbSuffix)) {
            $randomIndex = '?rand=' . time();
            return str_replace('\\', '/', $this->getHelper()->getBaseUrl() . $thumbSuffix) . $randomIndex;
        }
    }

    return false;
}

Предпочтительно путем настройки модуля, а не путем перезаписи основного файла.

 0
Author: Björn Tantau, 2014-09-12 09:39:25