ในการสั่งซื้ออีเมลมีข้อผิดพลาดต่อไปนี้และแสดงผลไม่ถูกต้อง
CSS Inline Error: Warning: DOMXPath::query(): Invalid expression in .../vendor/pelago/emogrifier/Classes/Emogrifier.php on line 269
ฉันจะแก้ไขสิ่งนี้ได้อย่างไร
ในการสั่งซื้ออีเมลมีข้อผิดพลาดต่อไปนี้และแสดงผลไม่ถูกต้อง
CSS Inline Error: Warning: DOMXPath::query(): Invalid expression in .../vendor/pelago/emogrifier/Classes/Emogrifier.php on line 269
ฉันจะแก้ไขสิ่งนี้ได้อย่างไร
คำตอบ:
นี้อาจจะเป็นข้อผิดพลาดของโมดูล Emogrifier
ใส่สิ่งนี้ในrequire-dev
ส่วนของcomposer.json
:
"pelago/emogrifier": "1.0.0 as 0.1.1"
หรือชอบเวอร์ชันการพัฒนา:
"pelago/emogrifier": "dev-master as 0.1.1"
มีการแจ้งเตือน:ดูเหมือนว่าปัญหานี้จะเกิดขึ้นเมื่อประมวลผลการปรับใช้เนื้อหาแบบคงที่
UPDATE:
เราควรดู:
ผู้ขาย / วีโอไอพี / ธีมหน้าว่าง / เว็บ 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
อีเมลวีโอไอพีจะนำเข้าไฟล์น้อยบางส่วน ดังนั้นหากเราเพิ่มตัวเลือกที่ไม่รองรับลงในไฟล์เหล่านี้อาจทำให้เกิดปัญหานี้
ผู้ขาย / วีโอไอพี / ธีมหน้าว่าง / เว็บ css / / แหล่งที่มา / _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)
ตัวอย่างเช่นในธีมที่กำหนดเองของเราเราเพิ่มตัวเลือกที่ไม่รองรับ:
app / ออกแบบ / ส่วนหน้า / VendorTheme / default / เว็บ css / / แหล่งที่มา / _theme.less
...
#customer-service-menu li.item:nth-child(2) {position: absolute;}
...
ปัญหานี้จะเกิดขึ้นอีกครั้ง
สารละลาย:
เราควรสร้างโฟลเดอร์ใหม่ซึ่งมีขาตั้งน้อยไฟล์สำหรับรูปแบบอีเมลของเรา และไฟล์เหล่านี้มีไว้สำหรับอีเมลเท่านั้น
app / ออกแบบ / ส่วนหน้า / VendorTheme / default / เว็บ css / / email.less
@import 'source/lib/email/stand/_lib.less'; // Global lib
@import 'source/lib/email/stand/variables/_email.less'; // Global email variables
ฉันเพิ่งมาจากปัญหาที่คล้ายกัน ฉันหวังว่าการเปลี่ยนแปลงเหล่านี้อาจช่วยคุณได้
พบวิธีแก้ปัญหาสำหรับ Magento 2
สร้างไฟล์
/web/css/email.less
และ
/web/css/email-inline.less
ในธีมที่กำหนดเองของฉันและเพิ่มเนื้อหาจาก
/vendor/magento/theme-frontend-blank/web/css/email.less
และ
/vendor/magento/theme-frontend-blank/web/css/email-inline.css ตามลำดับ
โปรดทราบด้านล่าง
แต่แต่ละบรรทัดจะมี "@import 'source / _theme.less';" แสดงความคิดเห็น (หรือลบออก)
ใช้ Magento 2.2.2 และพบข้อผิดพลาดเดียวกันและแก้ไขด้วยวิธีนี้:
"pelago/emogrifier": "2.0.0 as 1.2.0"
ตามความต้องการใน composer.json
composer update pelago/emogifier && magento setup:upgrade
ตอนนี้ฉันได้โซลูชัน
/var/www/html/vendor/pelago/emogrifier/Classes/Emogrifier.php
บรรทัดที่ 595 ค้นหาและแทนที่ฟังก์ชันด้านล่าง
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(
'',
'',
'',
);
แทนที่
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(
'',
'',
'',
'',
);