Xác nhận thư đặt hàng tạo ra lỗi DOMXPath :: query ()


11

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?


Bất kỳ cập nhật nào về vấn đề này
Jordy S chemparathy

tôi cũng phải đối mặt với vấn đề tương tự :)
Pratik

Câu trả lời:


5

Đây có thể là một lỗi của mô-đun Emogrifier .

Đặt điều này trong require-devmộ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

[UnazedValueException] Không thể phân tích ràng buộc phiên bản là 0.1.1: Chuỗi phiên bản không hợp lệ "là 0.1.1"
Pratik Mehta

1

Sử dụng Magento 2.2.2 và gặp lỗi tương tự và sửa nó theo cách này:

"pelago/emogrifier": "2.0.0 as 1.2.0" như yêu cầu trong composer.json
composer update pelago/emogifier && magento setup:upgrade


1

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

/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

/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ằng cách này bạn đang tách css theme khỏi email css phải không?
Rohit Kaushik

Bằng cách này bạn đang tách css theme khỏi email css phải không? ==> có, tôi hy vọng giải pháp này hữu ích cho bạn
Nikunj Panchal

-1

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(
            '',
            '',
            '',
            '',
        );

nó không hoạt động
Sheenu 17/07/18

chỉnh sửa trong các tệp không phải là một giải pháp, vì vậy vui lòng xóa ans của bạn khỏi đây
Rohit Kaushik
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.