A confirmação do correio do pedido gera o erro DOMXPath :: query ()

12

no pedido, o e-mail contém o seguinte erro e não é exibido corretamente

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

Como faço para corrigir isso?

deroccha
fonte
Qualquer atualização sobre esta questão
Jordy S Chemparathy
i também enfrenta mesmo problema :)
Pratik

Respostas:

5

Isso pode ser um bug do módulo Emogrifier .

Coloque isso na require-devparte de composer.json:

"pelago/emogrifier": "1.0.0 as 0.1.1"

Ou prefira a versão de desenvolvimento:

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

Há um aviso: parece que esse problema também ocorre ao processar a implantação de conteúdo estático.

ATUALIZAR:

Devemos dar uma olhada:

fornecedor / 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

O email Magento importará menos arquivos . Portanto, se adicionarmos alguns seletores não suportados a esses arquivos, isso pode causar esse problema.

fornecedor / 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)

Por exemplo, em nosso tema personalizado, adicionamos alguns seletores não suportados:

app / design / frontend / TemaVendor / padrão / web / css / source / _theme.less

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

Este problema ocorre novamente.

SOLUÇÃO:

Devemos criar uma nova pasta que contenha os arquivos menos comuns para nossos estilos de email . E esses arquivos são apenas para 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
fonte
[UnexpectedValueException] Não foi possível analisar a restrição de versão como 0.1.1: String de versão inválida "como 0.1.1"
Pratik Mehta
2

Recentemente, eu vim de um problema semelhante. Espero que essas mudanças possam ajudá-lo.

encontrou uma solução para Magento 2

criou os arquivos

/web/css/email.less

e

/web/css/email-inline.less

no meu tema personalizado e adicionei o conteúdo de

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

e

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

Observe abaixo

mas cada um com a linha "@import 'source / _theme.less';" comentado (ou removido)

Nikunj Panchal
fonte
Ao fazer isso, você está separando o tema css do e-mail css, certo?
Rohit Kaushik
Ao fazer isso, você está separando o tema css do e-mail css, certo? ==> sim, espero que esta solução seja útil para você #
Nikunj Panchal
1

Usando o Magento 2.2.2 e com o mesmo erro, foi corrigido da seguinte maneira:

"pelago/emogrifier": "2.0.0 as 1.2.0" como requisito no compositer.json
composer update pelago/emogifier && magento setup:upgrade

Julime
fonte
-1

Agora eu tenho a solução
/var/www/html/vendor/pelago/emogrifier/Classes/Emogrifier.php
Linha 595, localize e substitua a função abaixo

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

substituir

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
fonte
não está funcionando #
Sheenu 17/07/19
edição em arquivos não é uma solução Então, por favor removido seus ans daqui
Rohit Kaushik