Кто-нибудь знает, что такое 32-символьная строка перед именем файла изображения продукта в Magento? - PullRequest
2 голосов
/ 26 мая 2010

Я задаю этот вопрос, поскольку я пытаюсь получить только что скопированные изображения из домена A для работы в домене B (который использует ту же базу данных).

http://DOMAIN_A/magento/media/catalog/product/cache/1/image/9df78eab33525d08d6e5fb8d27136e95/b/0/b0041-1.jpg

Я думаю, зная, что такое 32-символьная строка, что помогает мне найти хорошее объяснение, почему изображения не обнаруживаются в передней или задней части Magento после переустановки на DOMAIN B.

RE: Magento версия 1.4.0.1

Ответы [ 2 ]

1 голос
/ 26 мая 2010

Вот код, который создает этот путь к имени файла, найденный в Mage_Catalog_Model_Product_Image:

    // build new filename (most important params)
    $path = array(
        Mage::getSingleton('catalog/product_media_config')->getBaseMediaPath(),
        'cache',
        Mage::app()->getStore()->getId(),
        $path[] = $this->getDestinationSubdir()
    );
    if((!empty($this->_width)) || (!empty($this->_height)))
        $path[] = "{$this->_width}x{$this->_height}";

    // add misk params as a hash
    $miscParams = array(
            ($this->_keepAspectRatio  ? '' : 'non') . 'proportional',
            ($this->_keepFrame        ? '' : 'no')  . 'frame',
            ($this->_keepTransparency ? '' : 'no')  . 'transparency',
            ($this->_constrainOnly ? 'do' : 'not')  . 'constrainonly',
            $this->_rgbToString($this->_backgroundColor),
            'angle' . $this->_angle,
            'quality' . $this->_quality
    );

    // if has watermark add watermark params to hash
    if ($this->getWatermarkFile()) {
        $miscParams[] = $this->getWatermarkFile();
        $miscParams[] = $this->getWatermarkImageOpacity();
        $miscParams[] = $this->getWatermarkPosition();
        $miscParams[] = $this->getWatermarkWidth();
        $miscParams[] = $this->getWatermarkHeigth();
    }

    $path[] = md5(implode('_', $miscParams));

    // append prepared filename
    $this->_newFile = implode('/', $path) . $file; // the $file contains heading slash

Итак, хеш генерируется из информации о конфигурации (соотношение сторон и т. Д.), А также информации о водяных знаках. Эта информация обычно не меняется. Тем не менее, я вижу, что путь частично генерируется из store_id текущего хранилища, так что ваша проблема может быть там.

Есть ли причина, по которой вы не можете позволить Magento использовать обычные процедуры кэширования для обоих магазинов? Поскольку Magento проверяет файловую систему на наличие кэшированного изображения, конфликта не должно быть.

Надеюсь, это поможет!

Спасибо, Джо


После размышления, вы просто пытаетесь заставить изображения каталогов работать в обоих доменах? Некэшированная версия каталожных изображений находится по адресу %magento%/media/catalog/product. Скопируйте каталоги из этого места, и ваши каталоги изображений должны работать.

0 голосов
/ 27 мая 2010

Перемещение по кэшированным изображениям не поможет, так как они будут удалены в следующий раз, когда вы очистите кэш Magento. Итак, переместив изображения, которые находятся в / media / catalog / product, очистите кэш изображений Magento. Убедитесь, что права доступа к файлу правильные для чтения. Затем перейдите в Mage_Catalog_Model_Product_Image и посмотрите на следующий код (приблизительная строка 270):

    if ($file) {
        // add these for debugging
        Mage::log($baseDir.$file);
        Mage::log(file_exists($baseDir.$file));
        Mage::log($this->checkMemory($baseDir.$file));

        if ((!file_exists($baseDir . $file)) || !$this->_checkMemory($baseDir . $file)) {
            $file = null;
        }
    }

Добавьте туда оператор var_dump или Mage::log (в зависимости от того, включено ли ведение журнала) и убедитесь, что путь к изображениям правильный, и что у вас достаточно памяти для операции. Это код, который выберет изображение по умолчанию для вас, если путь к изображению не существует. Если вы все еще не можете его получить, опубликуйте результаты этих трех операторов регистрации, и мы продолжим попытки. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...