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?


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

[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é)


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


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

cela ne fonctionne pas
— Sheenu

l'édition dans des fichiers n'est pas une solution, alors veuillez supprimer vos ans d'ici
— Rohit Kaushik
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.