การยืนยันเมลสั่งซื้อสร้างข้อผิดพลาด DOMXPath :: query ()


12

ในการสั่งซื้ออีเมลมีข้อผิดพลาดต่อไปนี้และแสดงผลไม่ถูกต้อง

CSS Inline Error: Warning: DOMXPath::query(): Invalid expression in .../vendor/pelago/emogrifier/Classes/Emogrifier.php on line 269 

ฉันจะแก้ไขสิ่งนี้ได้อย่างไร


การปรับปรุงใด ๆ เกี่ยวกับปัญหานี้
Jordy S Chemparathy

ฉันยังประสบปัญหาเดียวกัน :)
Pratik

คำตอบ:


5

นี้อาจจะเป็นข้อผิดพลาดของโมดูล 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

[UnexpectedValueException] ไม่สามารถแยกข้อ จำกัด เวอร์ชันเป็น 0.1.1: สตริงเวอร์ชันไม่ถูกต้อง "เป็น 0.1.1"
Pratik Mehta

2

ฉันเพิ่งมาจากปัญหาที่คล้ายกัน ฉันหวังว่าการเปลี่ยนแปลงเหล่านี้อาจช่วยคุณได้

พบวิธีแก้ปัญหาสำหรับ 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';" แสดงความคิดเห็น (หรือลบออก)


การทำเช่นนี้คุณกำลังแยก css ของธีมออกจากอีเมล css ใช่ไหม
Rohit Kaushik

การทำเช่นนี้คุณกำลังแยก css ของธีมออกจากอีเมล css ใช่ไหม ==> ใช่ฉันหวังว่าโซลูชันนี้จะเป็นประโยชน์สำหรับคุณ
Nikunj Panchal

1

ใช้ Magento 2.2.2 และพบข้อผิดพลาดเดียวกันและแก้ไขด้วยวิธีนี้:

"pelago/emogrifier": "2.0.0 as 1.2.0" ตามความต้องการใน composer.json
composer update pelago/emogifier && magento setup:upgrade


-1

ตอนนี้ฉันได้โซลูชัน
/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(
            '',
            '',
            '',
            '',
        );

มันไม่ทำงาน
Sheenu

การแก้ไขในไฟล์ไม่ใช่วิธีการแก้ปัญหาดังนั้นโปรดลบ ans ของคุณออกจากที่นี่
Rohit Kaushik
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.