Domanda

sto postando questo per i commenti circa il bug, e per aiutare tutti coloro che hanno lo stesso problema. (Risposta postato da me)

Quando si utilizza l'editor WYSIWYG e l'inserimento di immagini il gestore di immagini non è la visualizzazione delle immagini in miniatura.

Guardando l'URL dell'immagine prodotta da Magento posso vedere che l'URL manca l'/ wysiwyg / porzione

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

Sembra puramente mancanti, come preso atto dal doppio // nell'url

È stato utile?

Soluzione

Tracciare il codice, mi sembra che ci sia una costante mancante nella routine di supporto si trova nella Mage_Cms_Helper_Wysiwyg_Images::getBaseUrl()

La routine è come tale:

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

e rendendo il passaggio a

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

risolve il problema.

Questo è chiamato da Mage_Cms_Model_Wysiwyg_Images_Storage::getThumbnailUrl()

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

che emette chiaramente l'URL sbagliato senza la costante al suo posto.

Altri suggerimenti

Abbiamo avuto questo stesso problema su un sito del cliente, ci sono stati in realtà molto pochi elementi in gioco, e io in grado di offrire un probabile spiegazione di come la questione dell'immagine inesistente è stato trigged, anche se apparentemente non dovrebbe essere possibile :

  1. Il problema come descritto in precedenza era presente, per cui Magento stava controllando per media/wysiwyg/.thumbs/image.jpg, in contrasto con la posizione corretta di media/wysiwyg/.thumbs/wysiwyg/image.jpg, e, se presente la visualizzazione di un link alla URL non corretto di http://example.com/media//wysiwyg/.thumbs/image.jpg fd

  2. Abbiamo avuto APPSEC-212 installato, che ha introdotto l'uso di realpath() per eliminare un problema di sicurezza, ma la combinazione di questo e l'utilizzo di un collegamento simbolico indirizzo del nostro media stava causando Mage_Cms_Model_Wysiwyg_Images_Storage::getThumbsPath() per restituire un elenco di media/wysiwyg/.thumbs, al contrario di media/wysiwyg/.thumbs/wysiwyg - il motivo è perché questo metodo fa un controllo condizionale, che non ha valutato a vero, come la nostra directory dei media era stata ampliata tramite realpath() e come tale non ha restituito 0 per il controllo strpos(), vedere l'assegno sotto, la linea 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. Questa è unico per noi, ma siamo stati anche negare l'accesso alle directory Dotfile, e non aveva precedentemente notato questo come un problema perché non abbiamo mai li avevamo servita fino abbiamo installato APPSEC-212, quindi, anche quando abbiamo fissato il problema stavamo ottenendo 404 del su qualsiasi cosa in .thumbs

Il problema che abbiamo vissuto esiste ancora nel 1.9.1.0 (l'ultima versione al momento della scrittura) - ho intenzione di assumere nessun-one le comunicazioni perché le immagini ancora servire 'al volo' senza utilizzare la directory .thumbs , è stato solo con l'introduzione di APPSEC-212, in combinazione con una directory media link simbolico, che ha causato i file pollice da generare in posizione non corretta, che poi ha causato il percorso in modo non corretto controllato per tornare vero, e per noi di vedere in seguito 404 del sulle nostre immagini.

Stranamente, APPSEC-212 avrebbe risolto il problema, se non fosse per la nostra directory media collegamento simbolico.

A proposito, ecco le nostre modifiche:

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

     /**

In app / code / core / Mage / Cms / Modello / Wysiwyg / Immagini / 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)));

In realtà ci sono diversi errori che si uniscono.

Per impostazione predefinita Magento sembra per salvare i pollici nella media/wysiwyg/.thumbs/wysiwyg/ directory. Ma guarda Mage_Cms_Model_Wysiwyg_Images_Storage::getThumbnailUrl() per il pollice in media/wysiwyg/.thumbs/.

L'errore solo viene attivato se il pollice è in media/wysiwyg/.thumbs/. Non ho potuto scoprire in quali condizioni un pollice viene salvato nella directory sbagliata. Ma almeno spiega perché solo alcuni server mostrare più questo problema.

Quindi, oltre a quello che ha detto ProxiBlue dovrete cambiamento Mage_Cms_Model_Wysiwyg_Images_Storage::getThumbnailUrl() da

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

Preferibilmente impostando un modulo e non sovrascrivendo il file core.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top