theo thứ tự, email chứa lỗi sau và không hiển thị đúng
CSS Inline Error: Warning: DOMXPath::query(): Invalid expression in .../vendor/pelago/emogrifier/Classes/Emogrifier.php on line 269
Làm thế nào để tôi sửa lỗi này?
theo thứ tự, email chứa lỗi sau và không hiển thị đúng
CSS Inline Error: Warning: DOMXPath::query(): Invalid expression in .../vendor/pelago/emogrifier/Classes/Emogrifier.php on line 269
Làm thế nào để tôi sửa lỗi này?
Câu trả lời:
Đây có thể là một lỗi của mô-đun Emogrifier .
Đặt điều này trong require-dev
một phần của composer.json
:
"pelago/emogrifier": "1.0.0 as 0.1.1"
Hoặc thích phiên bản phát triển:
"pelago/emogrifier": "dev-master as 0.1.1"
Có một thông báo: dường như vấn đề này cũng xảy ra khi xử lý triển khai nội dung tĩnh.
CẬP NHẬT:
Chúng ta nên xem:
nhà cung cấp / magento / theme-frontend-blank / web / css / email.less
@import 'source/lib/_lib.less'; // Global lib
@import 'source/lib/variables/_email.less'; // Global email variables
@import 'source/_theme.less'; // Global variables override
@import 'source/_variables.less'; // Local theme variables
@import 'source/_email-variables.less'; // Theme variables for emails
Email Magento sẽ nhập một số tệp ít hơn . Vì vậy, nếu chúng tôi thêm một số bộ chọn không được hỗ trợ vào các tệp này, điều đó có thể gây ra sự cố này.
nhà cung cấp / magento / theme-frontend-blank / web / css / source / _email-base.less
Unsupported selectors (examples in parenthesis):
* first-child (div:first-child)
* last-child (div:last-child)
* nth-child (div:nth-child(3n+1))
* universal (*)
* pseudo (a:hover, a:active, a:focus, span:before, span:after, etc)
Ví dụ: trong chủ đề tùy chỉnh của chúng tôi, chúng tôi thêm một số bộ chọn không được hỗ trợ:
ứng dụng / thiết kế / frontend / VendorTheme / default / web / css / source / _theme.less
...
#customer-service-menu li.item:nth-child(2) {position: absolute;}
...
Vấn đề này sẽ xảy ra một lần nữa.
GIẢI PHÁP:
Chúng ta nên tạo một thư mục mới chứa các tệp ít hơn cho các kiểu email của chúng ta . Và, những tập tin này chỉ dành cho email.
ứng dụng / thiết kế / frontend / VendorTheme / default / web / css / email.less
@import 'source/lib/email/stand/_lib.less'; // Global lib
@import 'source/lib/email/stand/variables/_email.less'; // Global email variables
Tôi vừa mới đến từ vấn đề tương tự. Tôi hy vọng những thay đổi này có thể giúp bạn.
tìm thấy một giải pháp cho Magento 2
tạo các tập tin
/web/css/email.less
và
/web/css/email-inline.less
trong chủ đề tùy chỉnh của tôi và thêm nội dung từ
/vendor/magento/theme-frontend-blank/web/css/email.less
và
/vendor/magento/theme-frontend-blank/web/css/email-inline.css tương ứng
Xin lưu ý bên dưới
nhưng mỗi dòng có dòng "@import 'source / _theme.less';" nhận xét (hoặc loại bỏ)
Bây giờ tôi đã có giải pháp
/var/www/html/vendor/pelago/emogrifier/Class/Emogrifier.php
Dòng 595, tìm và thay thế chức năng dưới đây
private function splitCssAndMediaQuery($css)
{
$media = '';
$css = preg_replace_callback(
'#@media\\s+(?:only\\s)?(?:[\\s{\\(]|screen|all)\\s?[^{]+{.*}\\s*}\\s*#misU',
function ($matches) use (&$media) {
$media .= $matches[0];
},
$css
);
// filter the CSS
$search = array(
// get rid of css comment code
'/\\/\\*.*\\*\\//sU',
// strip out any import directives
'/^\\s*@import\\s[^;]+;/misU',
// strip remains media enclosures
'/^\\s*@media\\s[^{]+{(.*)}\\s*}\\s/misU',
);
$replace = array(
'',
'',
'',
);
thay thế
private function splitCssAndMediaQuery($css)
{
$media = '';
$css = preg_replace_callback(
'#@media\\s+(?:only\\s)?(?:[\\s{\\(]|screen|all)\\s?[^{]+{.*}\\s*}\\s*#misU',
function ($matches) use (&$media) {
$media .= $matches[0];
},
$css
);
// filter the CSS
$search = array(
// get rid of css comment code
'/\\/\\*.*\\*\\//sU',
// strip out any import directives
'/^\\s*@import\\s[^;]+;/misU',
// strip remains media enclosures
'/^\\s*@media\\s[^{]+{(.*)}\\s*}\\s/misU',
'/^\\s*@-?[A-Za-z-]+\\s[^{]+{(.*)}\\s*}\\s/misU',
);
$replace = array(
'',
'',
'',
'',
);