Magento CSS директивы изображений и конфликт CDN - PullRequest
2 голосов
/ 15 ноября 2011

Я видел несколько постов здесь о проблемах с относительными путями изображений в CSS, которые не работают, когда CSS размещен в CDN, но у меня есть ситуация, для которой я не могу найти ответ. В нашем магазине Magneto включена функция Merge CSS . К сожалению, в Magento, когда вы делаете это, он объединяет их в один файл в папке media вместо папки skin . Так что теперь относительные пути для изображений не работают. Magento пытается использовать защищенный URL, когда не может найти ресурс в незащищенном URL. В нашем случае мы не используем CDN для защищенных страниц, поэтому он может найти изображения, используя безопасный URL. Технически это работает, но наш сайт медленнее возвращает изображения, чем CDN, и я бы очень хотел это исправить. За исключением прохождения всех спрайтов CSS и либо жесткого кодирования URL-адреса CDN в качестве пути к изображению ( нежелательно ), либо полного удаления директив CSS и размещения вызовов getSkinUrl() в файлах шаблонов, которые содержат оскорбляющие элементы ( чуть менее нежелательные ), я не знаю, как это исправить. Конечно, кто-то сталкивался с этой проблемой раньше. Любые предложения или мысли о том, как обойти эту проблему?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 17 ноября 2011

Фактическая проблема не имеет ничего общего с CDN или расположением объединенных CSS-файлов по отношению к изображениям. Magento действительно делает что-то классное ... он анализирует CSS-файлы и заполняет все относительные URL полными URL. Это делается внутри класса Mage_Core_Model_Design_Package в методе _prepareUrl. Он определяет, использовать ли безопасный URL-адрес или незащищенный URL-адрес в следующей строке:

$secure = $store->isAdmin() ? $store->isAdminUrlSecure() : $store->isFrontUrlSecure();

Проблема здесь в том, что он будет использовать безопасный URL, даже если рассматриваемая страница на самом деле не безопасна. Если у вас используется безопасный URL-адрес во включенном веб-интерфейсе , он не будет использовать безопасные URL-адреса все время. Он использует их только на страницах учетной записи клиента и в корзине / оформить заказ. Любая другая страница не является безопасной и не нуждается в защищенных ресурсах.

При объединении URL-адресов Magento умен, поскольку создает папку css и css_secure в папке media. Вы заметите, если вы просматриваете источник страницы учетной записи клиента, что он вытягивает CSS из папки css_secure, но на домашней странице он использует папку css. Таким образом, он уже настроен на то, чтобы знать разницу между безопасными и незащищенными страницами, но при объединении CSS это не учитывается.

Чтобы исправить это, я сделал базовое расширение, чтобы переписать модель core/design_package новым методом _prepareUrl. Разница лишь в том, что сразу после указанной выше строки я добавил следующее:

$secure = $secure && Mage::app()->getRequest()->isSecure();

Это гарантирует, что только объединенные CSS-файлы в папке css_secure получают защищенные URL-адреса для ресурсов.

Надеюсь, это поможет любому с подобной проблемой.

0 голосов
/ 15 ноября 2011

Соберите все свои CSS-файлы в один и измените XML-заголовок, чтобы получить только этот CSS-файл.CSS должен быть в состоянии жить на CDN с вашими изображениями.Я знаю, что это не очень причудливое решение, но, вероятно, в любом случае стоит перейти к одному CSS-файлу (на тему).

...