Die Bestätigung der Bestellmail generiert den Fehler DOMXPath :: query ()

11

Bei der Bestellung enthält die E-Mail den folgenden Fehler und wird nicht richtig angezeigt

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

Wie behebe ich das?

Deroccha
quelle
Jedes Update zu diesem Thema
Jordy S Chemparathy
Ich
stehe

Antworten:

5

Dies kann ein Fehler des Emogrifier-Moduls sein .

Setzen Sie dies in den require-devTeil von composer.json:

"pelago/emogrifier": "1.0.0 as 0.1.1"

Oder bevorzugen Sie die Entwicklungsversion:

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

Es gibt einen Hinweis: Anscheinend tritt dieses Problem auch bei der Verarbeitung der Bereitstellung statischer Inhalte auf.

AKTUALISIEREN:

Wir sollten einen Blick darauf werfen:

Anbieter / Magento / Theme-Frontend-Blank / Web / CSS / E-Mail.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-E-Mails importieren weniger Dateien . Wenn wir diesen Dateien einige nicht unterstützte Selektoren hinzugefügt haben, kann dies zu diesem Problem führen.

Anbieter / Magento / Theme-Frontend-Blank / Web / CSS / Quelle / _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)

In unserem benutzerdefinierten Design fügen wir beispielsweise einige nicht unterstützte Selektoren hinzu:

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

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

Dieses Problem tritt erneut auf.

LÖSUNG:

Wir sollten einen neuen Ordner erstellen, der die standlosen Dateien für unsere E-Mail-Stile enthält . Diese Dateien sind nur für E-Mails bestimmt.

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
quelle
[UnexpectedValueException] Versionsbeschränkung konnte nicht als 0.1.1 analysiert werden: Ungültige Versionszeichenfolge "als 0.1.1"
Pratik Mehta
1

Verwenden Sie Magento 2.2.2 und stellen Sie denselben Fehler fest und beheben Sie ihn folgendermaßen:

"pelago/emogrifier": "2.0.0 as 1.2.0" als Voraussetzung in composer.json
composer update pelago/emogifier && magento setup:upgrade

Julime
quelle
1

Ich bin erst kürzlich von einem ähnlichen Problem gekommen. Ich hoffe, diese Änderungen können Ihnen helfen.

fand eine Lösung für Magento 2

hat die Dateien erstellt

/web/css/email.less

und

/web/css/email-inline.less

in meinem benutzerdefinierten Thema und fügte den Inhalt von

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

und

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

Bitte beachten Sie unten

aber jeweils mit der Zeile "@import 'source / _theme.less';" auskommentiert (oder entfernt)

Nikunj Panchal
quelle
Auf diese Weise trennen Sie Theme-CSS von E-Mail-CSS, oder?
Rohit Kaushik
Auf diese Weise trennen Sie Theme-CSS von E-Mail-CSS, oder? ==> Ja, ich hoffe, diese Lösung ist hilfreich für Sie
Nikunj Panchal
-1

Jetzt habe ich die Lösung
/var/www/html/vendor/pelago/emogrifier/Classes/Emogrifier.php
Zeile 595, finde und ersetze die folgende Funktion

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

ersetzen

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
quelle
es funktioniert nicht
Sheenu
Das Bearbeiten in Dateien ist keine Lösung. Bitte entfernen Sie Ihre Ans von hier
Rohit Kaushik