Magento 1.8.1.0 Wysiwyg编辑器未在图像管理器中显示缩略图
-
16-10-2019 - |
题
我正在发布有关该错误的评论,并帮助任何有同样问题的人。 (我自己发布的答案)
使用Wysiwyg编辑器并插入图像时,图像管理器未显示缩略图图像。
查看Magento产生的图像URL,我可以看到URL缺少 / wysiwyg / pottion
http://site.domain/media//.thumbs/ex_logo_sm.jpg?rand = 1392103618
它看起来纯粹是缺少的,double //在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,而无需定位。
其他提示
我们在客户网站上遇到了同样的问题,实际上有很多元素正在播放,我可以就如何触发不存在的图像问题提供一个可能的解释,即使似乎不可能:
如上所述的问题是,Magento正在检查
media/wysiwyg/.thumbs/image.jpg
, ,而不是正确的位置media/wysiwyg/.thumbs/wysiwyg/image.jpg
, ,如果现在显示指向不正确URL的链接http://example.com/media//wysiwyg/.thumbs/image.jpg
fd我们安装了AppSec-212,引入了
realpath()
要删除安全问题,但是,此功能的组合和在我们的符号链接中的使用情况media
目录引起了Mage_Cms_Model_Wysiwyg_Images_Storage::getThumbsPath()
返回一个目录media/wysiwyg/.thumbs
, ,而不是media/wysiwyg/.thumbs/wysiwyg
- 原因是因为此方法进行有条件的检查,该检查未对真实进行评估,因为我们的媒体目录已通过realpath()
因此,没有返回0strpos()
检查,请参阅下面的检查,第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; }
这对我们来说是独一无二的,但是我们也否认访问DotFile目录,并且以前没有注意到这是一个问题,因为我们在安装AppSec-212之前从未使用过它们,因此,即使我们解决了问题,我们也会在404上启动404。任何东西
.thumbs
我们遇到的问题仍然存在于1.9.1.0(写作时的最新版本) - 我将没有人注意,因为图像仍然不使用该图像“飞行” .thumbs
目录,只有引入AppSec-212,并结合了一个符合链接 media
目录,导致拇指文件在不正确的位置生成,然后导致错误检查路径返回true,并让我们随后在图像上看到404。
有趣的是,如果不是我们的链接,AppSec-212将解决该问题 media
目录。
顺便说一句,这是我们的修改:
在应用程序/代码/核心/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中: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/
. 。我无法在错误的目录中保存拇指的哪些条件。但至少它解释了为什么只有一些服务器显示此问题。
因此,除了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;
}
最好通过设置模块而不是覆盖核心文件。