на месте заказа электронная почта содержит следующую ошибку и не отображается должным образом
CSS Inline Error: Warning: DOMXPath::query(): Invalid expression in .../vendor/pelago/emogrifier/Classes/Emogrifier.php on line 269
Как это исправить?
на месте заказа электронная почта содержит следующую ошибку и не отображается должным образом
CSS Inline Error: Warning: DOMXPath::query(): Invalid expression in .../vendor/pelago/emogrifier/Classes/Emogrifier.php on line 269
Как это исправить?
Ответы:
Это может быть ошибкой модуля Emogrifier .
Поместите это в require-dev
часть composer.json
:
"pelago/emogrifier": "1.0.0 as 0.1.1"
Или предпочитаете версию для разработчиков:
"pelago/emogrifier": "dev-master as 0.1.1"
Есть уведомление: кажется, что эта проблема также возникает при обработке развертывания статического контента.
ОБНОВИТЬ:
Мы должны взглянуть:
продавец / Magento / тема-интерфейс наводка / веб / 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 будет импортировать несколько файлов меньше . Таким образом, если мы добавим некоторые неподдерживаемые селекторы в эти файлы, это может вызвать эту проблему.
продавец / Magento / тема-интерфейс наводка / веб / CSS / источник / _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)
Например, в нашей пользовательской теме мы добавили некоторые неподдерживаемые селекторы:
приложение / дизайн / интерфейс / VendorTheme / по умолчанию / веб / CSS / источник / _theme.less
...
#customer-service-menu li.item:nth-child(2) {position: absolute;}
...
Эта проблема возникнет снова.
РЕШЕНИЕ:
Мы должны создать новую папку, в которой будут храниться файлы для наших стилей электронной почты . И эти файлы только для электронной почты.
приложение / дизайн / интерфейс / VendorTheme / по умолчанию / веб / CSS / email.less
@import 'source/lib/email/stand/_lib.less'; // Global lib
@import 'source/lib/email/stand/variables/_email.less'; // Global email variables
Я только недавно пришел с похожей проблемой. Я надеюсь, что эти изменения могут помочь вам.
нашел решение для 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';" закомментировано (или удалено)
Теперь у меня есть решение
/var/www/html/vendor/pelago/emogrifier/Classes/Emogrifier.php
Строка 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(
'',
'',
'',
'',
);