Pregunta

Estoy publicando esto para comentarios sobre el error y para ayudar a cualquiera que tenga el mismo problema. (Respuesta publicada por mí mismo)

Al usar el editor WYSIWYG e insertar imágenes, el Administrador de imágenes no muestra las imágenes en miniatura.

Mirando la URL de la imagen producida por Magento, puedo ver que a la URL le falta la / Wysiwyg / porción

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

Parece puramente faltante, como se toma la nota del doble // en la URL

¿Fue útil?

Solución

Rastreando el código, me parece que falta constante en la rutina de ayuda ubicada en Mage_Cms_Helper_Wysiwyg_Images::getBaseUrl()

La rutina es como tal:

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

y haciendo el cambio a

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

soluciona el problema.

Esto se llama desde Mage_Cms_Model_Wysiwyg_Images_Storage::getThumbnailUrl()

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

que claramente genera la URL incorrecta sin la constante en su lugar.

Otros consejos

Tuvimos este mismo problema en el sitio de un cliente, en realidad había bastantes elementos en juego, y puedo ofrecer una explicación probablemente sobre cómo se trigó el problema de la imagen inexistente, aunque aparentemente no debería ser posible:

  1. El problema como se describió anteriormente estaba presente, por el cual Magento estaba buscando media/wysiwyg/.thumbs/image.jpg, a diferencia de la ubicación correcta de media/wysiwyg/.thumbs/wysiwyg/image.jpg, y si está presente que muestra un enlace a la URL incorrecta de http://example.com/media//wysiwyg/.thumbs/image.jpg fd

  2. Tuvimos instalados APPSEC-212, que introdujo el uso de realpath() Para eliminar un problema de seguridad, sin embargo, la combinación de esto y el uso de un enlace simbólico en nuestro media Directorio estaba causando Mage_Cms_Model_Wysiwyg_Images_Storage::getThumbsPath() para devolver un directorio de media/wysiwyg/.thumbs, Opuesto a media/wysiwyg/.thumbs/wysiwyg - La razón es porque este método realiza una verificación condicional que no se evaluó en verdad, ya que nuestro directorio de medios se había ampliado a través de realpath() y como tal no regresó 0 para el strpos() Verifique, consulte el cheque a continuación, Línea 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. Esto es exclusivo para nosotros, pero también estábamos negando el acceso a los directorios de DotFile, y no habíamos notado previamente esto como un problema porque nunca les habíamos servido hasta que instalamos APPSEC-212, por lo que incluso cuando solucionamos el problema, estábamos obteniendo 404 cualquier cosa en .thumbs

El problema que hemos experimentado todavía existe en 1.9.1.0 (la última versión al momento de escribir). Voy a asumir avisos de nadie porque las imágenes aún sirven 'sobre la marcha' sin usar el .thumbs Directorio, fue solo con la introducción de APPSEC-212, combinado con un simulacro media Directorio, que provocó que los archivos del pulgar se generaran en la ubicación incorrecta, lo que hizo que la ruta verificada incorrectamente devuelva verdadero, y para que vemos posteriormente 404 en nuestras imágenes.

Curiosamente, APPSEC-212 habría solucionado el problema si no fuera por nuestro Simlinked media directorio.

Por cierto, aquí están nuestras modificaciones:

En 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 . '/';
     }

     /**

En 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)));

En realidad, hay varios errores que se unen.

Por defecto, Magento parece guardar los pulgares en el directorio media/wysiwyg/.thumbs/wysiwyg/. Pero Mage_Cms_Model_Wysiwyg_Images_Storage::getThumbnailUrl() Busca el pulgar en media/wysiwyg/.thumbs/.

El error solo se activa si un pulgar está en media/wysiwyg/.thumbs/. No pude averiguar en qué condiciones se guarda un pulgar en el directorio incorrecto. Pero al menos explica por qué solo algunos servidores muestran este problema.

Entonces, además de lo que Proxiblue dijo que tendrás que cambiar Mage_Cms_Model_Wysiwyg_Images_Storage::getThumbnailUrl() de

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;
}

a

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;
}

Preferiblemente configurando un módulo y no sobrescribiendo el archivo principal.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top