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?

deroccha
sumber
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
Khoa TruongDinh
sumber
[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)

Nikunj Panchal
sumber
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

Julime
sumber
-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(
            '',
            '',
            '',
            '',
        );
Nikhil Vaghela
sumber
itu tidak berfungsi
Sheenu
mengedit file bukan solusi jadi tolong hapus ans Anda dari sini
Rohit Kaushik