Magento 1.8.1.0 El editor de Wysiwyg no muestra miniaturas en Image Manager
-
16-10-2019 - |
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
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:
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 demedia/wysiwyg/.thumbs/wysiwyg/image.jpg
, y si está presente que muestra un enlace a la URL incorrecta dehttp://example.com/media//wysiwyg/.thumbs/image.jpg
fdTuvimos 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 nuestromedia
Directorio estaba causandoMage_Cms_Model_Wysiwyg_Images_Storage::getThumbsPath()
para devolver un directorio demedia/wysiwyg/.thumbs
, Opuesto amedia/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 derealpath()
y como tal no regresó 0 para elstrpos()
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; }
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.