Підтвердження пошти замовлення породжує помилку DOMXPath :: query ()


12

в місці замовлення електронна пошта містить таку помилку і не відображається належним чином

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

Як це виправити?


Будь-яке оновлення з цього питання
Jordy S Chemparathy

Я також зіткнувся з тим же питанням :)
Пратік

Відповіді:


5

Це може бути помилка модуля Emogrifier .

Поставте це в require-devчастині composer.json:

"pelago/emogrifier": "1.0.0 as 0.1.1"

Або віддайте перевагу версії розробки:

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

Є зауваження: здається, що ця проблема також виникає під час обробки статичного вмісту розгортання.

ОНОВЛЕННЯ:

Ми повинні поглянути:

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

Електронна пошта Magento імпортуватиме менше файлів . Отже, якщо ми додамо до цих файлів кілька непідтримуваних селекторів , це може спричинити цю проблему.

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

Наприклад, у нашу власну тему ми додаємо кілька непідтримуваних селекторів:

додаток / дизайн / frontend / VendorTheme / за замовчуванням / 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: Неправильний рядок версії "як 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 так?
Рохіт Каушик

Цим ви відокремлюєте тему css від електронної пошти css так? ==> так, я сподіваюся, що це рішення допоможе вам
Нікунд Панчал

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
Line 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

редагування у файлах, а не рішення, тому, будь ласка,
Рохіт Каушик
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.