주문 메일 확인으로 DOMXPath :: query () 오류 발생


12

주문시 이메일에 다음 오류가 포함되어 있고 올바르게 표시되지 않습니다

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

이 문제를 어떻게 해결합니까?


이 문제에 대한 모든 업데이트
Jordy S Chemparathy

답변:


5

이것은 Emogrifier 모듈 의 버그 일 수 있습니다 .

이것을 다음 require-dev부분에 넣으십시오 composer.json.

"pelago/emogrifier": "1.0.0 as 0.1.1"

또는 개발 버전을 선호하십시오.

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

알림이 있습니다. 이 문제는 정적 콘텐츠 배포를 처리 할 때도 발생합니다.

최신 정보:

우리는 살펴 봐야합니다 :

공급 업체 / 마 젠토 / 테마 프론트 엔드-빈 / 웹 /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

Magento 이메일은 더 적은 파일을 가져옵니다 . 따라서 지원되지 않는 선택기를 이 파일에 추가 하면이 문제가 발생할 수 있습니다.

공급 업체 / 마 젠토 / 테마 프론트 엔드-빈 / 웹 /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)

예를 들어, 사용자 정의 테마에서 지원되지 않는 선택기를 추가합니다.

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

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

이 문제는 다시 발생합니다.

해결책:

우리는 우리의 이메일 스타일을위한 더 적은 파일을 포함하는 새로운 폴더를 만들어야합니다 . 그리고이 파일들은 이메일 전용입니다.

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] 버전 제약 조건을 0.1.1로 구문 분석 할 수 없음 : 잘못된 버전 문자열 "as 0.1.1"
Pratik Mehta

2

나는 최근에 비슷한 문제에서왔다. 이러한 변경이 도움이 되었기를 바랍니다.

마 젠토 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에서 분리하고 있습니까? ==> 예,이 솔루션이 도움이
되었기

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
Line 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.