Sự cố với URI dữ liệu và Hợp nhất tệp CSS


9

Hợp nhất tệp CSS Magento đang giả vờ tên máy chủ lưu trữ dữ liệu của tôi vì RegEx in Mage_Core_Model_Design_Package( beforeMergeCss) không hoạt động như mong đợi. Nó nên thêm tên máy chủ vào đường dẫn hình ảnh tương đối, nhưng không phải cho URI dữ liệu.

$cssUrl = '/url\\(\\s*(?!data:)([^\\)\\s]+)\\s*\\)?/';
$contents = preg_replace_callback($cssUrl, array($this, '_cssMergerUrlCallback'), $contents);

Mã CSS:

background: #fafafa url("data:image/svg+xml;base64, PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSI2cHgiIGhlaWdodD0iM3B4IiB2aWV3Qm94PSIwIDAgNiAzIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA2IDMiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxwb2x5Z29uIHBvaW50cz0iNS45OTIsMCAyLjk5MiwzIC0wLjAwOCwwICIvPjwvc3ZnPg==") no-repeat;

Kết quả sau khi hợp nhất:

background: #fafafa url("http://shop12.dev/skin/frontend/shop/default/styles/data:image/svg+xml;base64")PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSI2cHgiIGhlaWdodD0iM3B4IiB2aWV3Qm94PSIwIDAgNiAzIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA2IDMiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxwb2x5Z29uIHBvaW50cz0iNS45OTIsMCAyLjk5MiwzIC0wLjAwOCwwICIvPjwvc3ZnPg==") no-repeat;

Làm thế nào để tránh điều này? Tôi không thể tìm ra cách sửa synthax của RegEx đã sử dụng. (Sử dụng GIF không phải là giải pháp thực sự với tôi)

Câu trả lời:


13

Trong iphone.css magento cũng sử dụng URI dữ liệu nhưng không có dấu ngoặc kép, hãy thử làm tương tự

background: #fafafa url(data:image/svg+xml;base64, PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSI2cHgiIGhlaWdodD0iM3B4IiB2aWV3Qm94PSIwIDAgNiAzIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA2IDMiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxwb2x5Z29uIHBvaW50cz0iNS45OTIsMCAyLjk5MiwzIC0wLjAwOCwwICIvPjwvc3ZnPg==) no-repeat;

Trong trường hợp của bạn thay vì

/url\\(\\s*(?!data:)([^\\)\\s]+)\\s*\\)?/

bạn nên sử dụng

/url\\(\\s*(?![\"\']?data:)([^)]+)\\)/

Xin lỗi, tôi biết điều đó. Vấn đề là mã CSS là một phần của khung nền tảng, được liên kết với dự án của tôi thông qua Bower. Tôi chắc chắn có thể chỉnh sửa mã, nhưng tất cả các đồng nghiệp của tôi làm việc trong dự án cũng sẽ làm như vậy. Trên mỗi bản cập nhật. Điều gì sẽ là RegEx chính xác cho tất cả các loại (với dấu ngoặc đơn, dấu ngoặc kép và không có dấu ngoặc kép)?
michael

Trả lời cập nhật.
oleksii.svarychevskyi

Nếu câu trả lời của tôi đã giúp bạn xin vui lòng đánh dấu nó là chấp nhận.
oleksii.svarychevskyi

Câu trả lời này đã phá vỡ các tài sản css khác từ được biên dịch. Câu trả lời khác từ @jblandry là những gì chúng tôi đã kết thúc bằng cách sử dụng mọi thứ đã sửa.
FactoryAidan

4

Trên thực tế regrec này bao gồm nhiều trường hợp hơn

/url\\(\\s*(?![\"\']?data:)(?!\%)([^\\)\\s]+)\\s*\\)?/

Đặc biệt dữ liệu svg được tối ưu hóa này với độ dốc: http://codepen.io/tigt/post/optimizing-svgs-in-data-uris


Câu trả lời này CỐ ĐỊNH TẤT CẢ các vấn đề mà không phá vỡ bất cứ điều gì. Câu trả lời 'khác' (hiện được chấp nhận) đã sửa một điều nhưng đã phá vỡ nhiều thứ khác. Điều này nên được thay đổi để câu trả lời được chấp nhận.
FactoryAidan

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.