Magento 1.8.1.0 éditeur WYSIWYG n'affiche les vignettes dans le gestionnaire d'image
-
16-10-2019 - |
Question
Je signale cela pour commentaires au sujet du bug, et d'aider tous ceux qui ont le même problème. (Réponse affichée par moi-même)
Lorsque vous utilisez l'éditeur WYSIWYG et insertion d'images du gestionnaire d'image n'est pas afficher les images miniatures.
En regardant l'URL de l'image produite par magento je peux voir que l'URL manque le / wysiwyg / partie
http: //site.domain/media//.thumbs/ ex_logo_sm.jpg? rand = 1392103618
Il semble purement manquant, comme pris note par le double // dans l'url
La solution
Tracing le code, il me semble qu'il ya un manque constant dans la routine d'aide situé dans Mage_Cms_Helper_Wysiwyg_Images::getBaseUrl()
La routine est en tant que tel:
public function getBaseUrl()
{
return Mage::getBaseUrl('media') . '/';
}
et faire le changement à
public function getBaseUrl()
{
return Mage::getBaseUrl('media') . Mage_Cms_Model_Wysiwyg_Config::IMAGE_DIRECTORY . '/';
}
résout le problème.
On parle de Mage_Cms_Model_Wysiwyg_Images_Storage::getThumbnailUrl()
return str_replace('\\', '/', $this->getHelper()->getBaseUrl() . $thumbSuffix) . $randomIndex;
qui sort clairement la mauvaise URL sans la constante en place.
Autres conseils
Nous avons eu ce même problème sur un site client, il y avait en fait assez quelques éléments en jeu, et je peux fournir une explication probablement à la façon dont la question de l'image inexistante a été déclenchée, même si elle semble ne devrait pas être possible :
-
La question tel que décrit ci-dessus était présent, dans lequel Magento vérifiait pour
media/wysiwyg/.thumbs/image.jpg
, par opposition à l'emplacement correct demedia/wysiwyg/.thumbs/wysiwyg/image.jpg
, et si elle est présente l'affichage d'un lien vers l'URL incorrecte dehttp://example.com/media//wysiwyg/.thumbs/image.jpg
fd -
Nous avions APPSEC-212 installé, qui a introduit l'utilisation de
realpath()
pour éliminer un problème de sécurité, mais la combinaison de cela et l'utilisation d'un lien symbolique sur notre répertoiremedia
était à l'origineMage_Cms_Model_Wysiwyg_Images_Storage::getThumbsPath()
retourner un répertoire demedia/wysiwyg/.thumbs
, par opposition àmedia/wysiwyg/.thumbs/wysiwyg
- la raison est parce que cette méthode permet un contrôle conditionnel qui n'a pas évalué à vrai, comme notre annuaire des médias a été élargi parrealpath()
et en tant que tel n'a pas retourné 0 pour le contrôle destrpos()
, consultez le chèque ci-dessous, la ligne 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; }
-
Ceci est unique pour nous, mais nous niait également l'accès aux répertoires dotfile, et n'a pas remarqué auparavant comme un problème parce que nous les avions jamais servi jusqu'à ce que nous installons APPSEC-212, même lorsque nous avons fixé la problème que nous obtenions 404 sur quoi que ce soit dans ce
.thumbs
Le problème que nous avons connu existe encore dans 1.9.1.0 (la dernière version au moment de la rédaction) - Je vais supposer que personne ne remarque parce que les images servent encore « à la volée » sans utiliser le répertoire .thumbs
, ce ne fut qu'avec l'introduction de APPSEC-212, associé à un répertoire media
un lien symbolique, qui a provoqué les fichiers de pouce à générer dans l'emplacement incorrect, qui a ensuite causé le chemin vérifié de manière incorrecte pour revenir vrai, et pour nous voir par la suite 404 de sur nos images.
Bizarrement, APPSEC-212 aurait résolu le problème s'il n'y avait pas notre annuaire des liens symboliques de media
.
Par ailleurs, voici nos modifications:
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 / Modèle / 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)));
Il y a en fait plusieurs erreurs qui se réunissent.
Par défaut Magento semble enregistrer les pouces dans le media/wysiwyg/.thumbs/wysiwyg/
de répertoire. Mais ressemble Mage_Cms_Model_Wysiwyg_Images_Storage::getThumbnailUrl()
pour le pouce dans media/wysiwyg/.thumbs/
.
L'erreur ne se déclenche si le pouce est en media/wysiwyg/.thumbs/
. Je ne pouvais pas savoir dans quelles conditions un pouce est enregistré dans le mauvais répertoire. Mais au moins il explique pourquoi seuls certains serveurs présentent ce problème.
Donc, en plus de ce que ProxiBlue dit que vous aurez à changer de 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;
}
De préférence, en mettant en place un module et non en écrasant le fichier de base.