Konfirmasi email pesanan menghasilkan kesalahan DOMXPath :: query ()


12

saat memesan email berisi kesalahan berikut dan tidak ditampilkan dengan benar

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

Bagaimana cara saya memperbaikinya?


Setiap pembaruan tentang masalah ini
Jordy S Chemparathy

saya juga menghadapi masalah yang sama :)
Pratik

Jawaban:


5

Ini mungkin bug dari modul Emogrifier .

Letakkan ini di require-devbagian composer.json:

"pelago/emogrifier": "1.0.0 as 0.1.1"

Atau lebih suka versi pengembangan:

"pelago/emogrifier": "dev-master as 0.1.1"

Ada pemberitahuan: sepertinya masalah ini juga terjadi saat memproses penyebaran konten statis.

MEMPERBARUI:

Kita harus melihatnya:

vendor / 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 akan mengimpor beberapa file lebih sedikit . Jadi, jika kami menambahkan beberapa penyeleksi yang tidak didukung ke file-file ini, yang dapat menyebabkan masalah ini.

vendor / 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)

Misalnya, dalam tema khusus kami, kami menambahkan beberapa penyeleksi yang tidak didukung:

aplikasi / desain / antarmuka / VendorTheme / default / web / css / source / _theme.less

...
#customer-service-menu li.item:nth-child(2) {position: absolute;}
...

Masalah ini akan terjadi lagi.

LARUTAN:

Kita harus membuat folder baru yang berisi lebih sedikit file stand untuk gaya email kita . Dan, file-file ini hanya untuk email.

app / design / 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

[UnexpectedValueException] Tidak dapat menguraikan batasan versi sebagai 0.1.1: String versi tidak valid "as 0.1.1"
Pratik Mehta

2

Saya baru saja datang dari masalah yang sama. Saya harap perubahan ini dapat membantu Anda.

menemukan solusi untuk Magento 2

membuat file

/web/css/email.less

dan

/web/css/email-inline.less

di tema khusus saya dan menambahkan konten dari

/vendor/magento/theme-frontend-blank/web/css/email.less

dan

/vendor/magento/theme-frontend-blank/web/css/email-inline.css

Harap Dicatat di bawah ini

tetapi masing-masing dengan baris "@import 'source / _theme.less';" dikomentari (atau dihapus)


Dengan melakukan ini, Anda memisahkan tema css dari email css kan?
Rohit Kaushik

Dengan melakukan ini, Anda memisahkan tema css dari email css kan? ==> ya, saya harap solusi ini bermanfaat bagi Anda
Nikunj Panchal

1

Menggunakan Magento 2.2.2 dan mengalami kesalahan yang sama dan memperbaikinya dengan cara ini:

"pelago/emogrifier": "2.0.0 as 1.2.0" sebagai persyaratan dalam composer.json
composer update pelago/emogifier && magento setup:upgrade


-1

Sekarang saya mendapat solusi
/var/www/html/vendor/pelago/emogrifier/Classes/Emogrifier.php
Baris 595, cari dan ganti fungsi di bawah ini

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

menggantikan

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

itu tidak berfungsi
Sheenu

mengedit file bukan solusi jadi tolong hapus ans Anda dari sini
Rohit Kaushik
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.