注文メールの確認でDOMXPath :: query()エラーが発生する


12

注文時に電子メールに次のエラーが含まれ、正しく表示されない

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

どうすれば修正できますか?


この問題の更新
Jordy S Chemparathy 2016年

私も同じ問題に直面しています:)
Pratik

回答:


5

これはEmogrifierモジュールのバグである可能性があります

これを次のrequire-dev部分に挿入しますcomposer.json

"pelago/emogrifier": "1.0.0 as 0.1.1"

または開発版を好む:

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

通知があります:この問題は、静的コンテンツのデプロイを処理するときにも発生するようです。

更新:

見てみましょう:

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

Magentoのメールでは、インポートされるファイルが少なくなります。したがって、サポートされていないセレクターをこれらのファイルに追加した場合、この問題が発生する可能性があります。

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)

たとえば、カスタムテーマでは、サポートされていないセレクターをいくつか追加します。

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として解析できませんでした: "0.1.1"として無効なバージョン文字列
Pratik Mehta

2

私は最近同様の問題から来ました。これらの変更がお役に立てば幸いです。

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