La confirmation de l'e-mail de commande génère une erreur DOMXPath :: query ()

12

lors de la commande, l'e-mail contient l'erreur suivante et ne s'affiche pas correctement

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

Comment puis-je réparer ça?

deroccha
la source
Toute mise à jour sur ce problème
Jordy S Chemparathy
je suis également confronté au même problème :)
Pratik

Réponses:

5

Cela peut être un bug du module Emogrifier .

Mettez ceci dans la require-devpartie de composer.json:

"pelago/emogrifier": "1.0.0 as 0.1.1"

Ou préférez la version de développement:

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

Il y a un avis: semble que ce problème se produit également lors du traitement du déploiement de contenu statique.

MISE À JOUR:

Nous devrions jeter un oeil:

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

La messagerie Magento importera moins de fichiers . Donc, si nous avons ajouté des sélecteurs non pris en charge à ces fichiers, cela peut provoquer ce problème.

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

Par exemple, dans notre thème personnalisé, nous ajoutons des sélecteurs non pris en charge:

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

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

Ce problème se reproduira.

SOLUTION:

Nous devons créer un nouveau dossier contenant les fichiers sans support pour nos styles de messagerie . Et, ces fichiers sont uniquement destinés aux e-mails.

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
la source
[UnexpectedValueException] Impossible d'analyser la contrainte de version comme 0.1.1: Chaîne de version non valide "comme 0.1.1"
Pratik Mehta
2

Je viens récemment de rencontrer un problème similaire. J'espère que ces changements peuvent vous aider.

trouvé une solution pour Magento 2

créé les fichiers

/web/css/email.less

et

/web/css/email-inline.less

dans mon thème personnalisé et ajouté le contenu de

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

et

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

Veuillez noter ci-dessous

mais chacun avec la ligne "@import 'source / _theme.less';" commenté (ou supprimé)

Nikunj Panchal
la source
En faisant cela, vous séparez le thème css du css email non?
Rohit Kaushik
En faisant cela, vous séparez le thème css du css email non? ==> oui, j'espère que cette solution vous sera utile
Nikunj Panchal
1

Utiliser Magento 2.2.2 et rencontrer la même erreur et le corriger de cette façon:

"pelago/emogrifier": "2.0.0 as 1.2.0" comme exigence dans composer.json
composer update pelago/emogifier && magento setup:upgrade

Julime
la source
-1

Maintenant, j'ai la solution
/var/www/html/vendor/pelago/emogrifier/Classes/Emogrifier.php
Line 595, trouvez et remplacez la fonction ci-dessous

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

remplacer

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
la source
cela ne fonctionne pas
Sheenu
l'édition dans des fichiers n'est pas une solution, alors veuillez supprimer vos ans d'ici
Rohit Kaushik