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

Était-ce utile?

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 :

  1. 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 de media/wysiwyg/.thumbs/wysiwyg/image.jpg, et si elle est présente l'affichage d'un lien vers l'URL incorrecte de http://example.com/media//wysiwyg/.thumbs/image.jpg fd

  2. 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épertoire media était à l'origine Mage_Cms_Model_Wysiwyg_Images_Storage::getThumbsPath() retourner un répertoire de media/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 par realpath() et en tant que tel n'a pas retourné 0 pour le contrôle de strpos(), 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;
    }
    
  3. 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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top