Potwierdzenie zamówienia pocztą powoduje błąd DOMXPath :: query ()

12

przy zamówieniu wiadomość zawiera następujący błąd i nie wyświetla się poprawnie

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

Jak to naprawić?

deroccha
źródło
Wszelkie aktualizacje na ten temat
Jordy S Chemparathy
mam również ten sam problem :)
Pratik

Odpowiedzi:

5

Może to być błąd modułu Emogrifier .

Umieść to w require-devczęści composer.json:

"pelago/emogrifier": "1.0.0 as 0.1.1"

Lub wolisz wersję rozwojową:

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

Zauważono: wydaje się, że ten problem występuje również podczas przetwarzania wdrażania zawartości statycznej.

AKTUALIZACJA:

Powinniśmy spojrzeć:

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

E-mail Magento zaimportuje mniej plików . Jeśli więc dodamy do tych plików niektóre nieobsługiwane selektory , może to powodować ten problem.

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)

Na przykład w naszym niestandardowym motywie dodajemy kilka nieobsługiwanych selektorów:

app / design / frontend / VendorTheme / default / web / css / source / _theme.less

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

Ten problem wystąpi ponownie.

ROZWIĄZANIE:

Powinniśmy utworzyć nowy folder, który zawiera pliki bez podstaw dla naszych stylów e-mail . I te pliki są tylko do wiadomości e-mail.

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
źródło
[U nieoczekiwany wyjątek] Nie można przeanalizować ograniczenia wersji jako 0.1.1: Niepoprawny ciąg wersji „jako 0.1.1”
Pratik Mehta
2

Niedawno przyszedłem z podobnego problemu. Mam nadzieję, że te zmiany mogą ci pomóc.

znalazł rozwiązanie dla Magento 2

utworzył pliki

/web/css/email.less

i

/web/css/email-inline.less

w moim niestandardowym motywie i dodałem treść z

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

i

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

Uwaga poniżej

ale każdy z wierszem „@import 'source / _theme.less';” skomentował (lub usunął)

Nikunj Panchal
źródło
Robiąc to, oddzielasz css motywu od css e-maila, prawda?
Rohit Kaushik,
Robiąc to, oddzielasz css motywu od css e-maila, prawda? ==> tak, mam nadzieję, że to rozwiązanie będzie dla ciebie pomocne
Nikunj Panchal,
1

Korzystanie z Magento 2.2.2 i występowanie tego samego błędu i naprawione w ten sposób:

"pelago/emogrifier": "2.0.0 as 1.2.0" jako wymaganie w composer.json
composer update pelago/emogifier && magento setup:upgrade

Julime
źródło
-1

Teraz mam rozwiązanie
/var/www/html/vendor/pelago/emogrifier/Classes/Emogrifier.php
Linia 595, znajdź i zamień poniżej funkcji

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

zastąpić

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
źródło
to nie działa
Sheenu,
edycja w plikach nie jest rozwiązaniem, więc proszę usuń stąd swój ans
Rohit Kaushik