Magento 1.8.1.0 wysiwyg редактор не отображает миниатюры в менеджере изображений

magento.stackexchange https://magento.stackexchange.com/questions/14820

Вопрос

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

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

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

http: //site.domain/media//.thumbs/ex_logo_sm.jpg? Rand = 1392103618

Он выглядит чисто отсутствующим, как приведено к сведению двойной // в URL

Это было полезно?

Решение

Отслеживая код, мне кажется, что в рутине вспомогательной, расположенной в рутине, постоянно отсутствует 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 без постоянной.

Другие советы

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

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

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

    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 каталог.

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

В приложении/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 . '/';
     }

     /**

В приложении/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)));

На самом деле есть несколько ошибок.

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

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

Итак, в дополнение к тому, что, как сказал прокси -бел, вам придется измениться 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;
}

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top