订单邮件确认生成DOMXPath :: query()错误


12

在订购地点,电子邮件包含以下错误,并且无法正确显示

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

我该如何解决?


关于此问题的任何更新
Jordy S Chemparathy

我也面临着同样的问题:)
Pratik

Answers:


5

这可能是Emogrifier模块的错误。

将其放在以下require-dev部分中composer.json

"pelago/emogrifier": "1.0.0 as 0.1.1"

或者更喜欢开发版本:

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

有一个通知:似乎在处理静态内容部署时也会发生此问题。

更新:

我们应该看看:

供应商/ magento /主题前端空白/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电子邮件将导入更少的文件。因此,如果我们向这些文件添加了一些不受支持的选择器,则可能会导致此问题。

供应商/ magento /主题-前端-空白/ web / css /源/_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

我最近刚遇到类似问题。希望这些更改对您有所帮助。

找到了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分开了,对吗?==>是的,我希望此解决方案对您有所帮助
Nikunj Panchal 19/12/19

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

在文件中编辑不是解决方案,所以请从这里删除您的问题
Rohit Kaushik
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.