Проблема с Magento 2.2.4 - кавычки в названии продукта разрывают страницы продукта
Я только что установил Magento 2.2.4, чтобы попробовать, и до сих пор заметил несколько проблем в первые полчаса. Мне было интересно, является ли это просто моей пользовательской установкой или происходит для кого-то еще.
Атрибут изображения продукта alt , похоже, загружается асинхронно и добавляется под изображением продукта. Страница продукта, похоже, прекращает обработку javascript как раз перед этим, однако, ломает страницу. Похоже, это не сработает, если цитата метка существует в названии продукта (например, линейка 12 дюймов (30 см)), вызывающая следующую ошибку:
Uncaught SyntaxError: Unexpected token ( in JSON at position 129
at JSON.parse (<anonymous>)
at getData (main.js:58)
at Array.map (<anonymous>)
at HTMLDocument.apply (main.js:74)
at fire (jquery.js:3232)
at Object.add [as done] (jquery.js:3291)
at jQuery.fn.init.jQuery.fn.ready (jquery.js:3542)
at jQuery.fn.init (jquery.js:2967)
at new jQuery.fn.init (jquery-migrate.js:225)
at jQuery (jquery.js:75)
Переключение названия продукта устранило непосредственную проблему, однако есть много элементов с кавычками, которые нужно изменить, и вы хотите решить эту проблему без изменения названий продуктов.
Похоже, что цитаты в названиях продуктов не экранируются для панировочных сухарей, так как регистрация объекта непосредственно перед ошибкой показана ниже:
{
"breadcrumbs": {
"categoryUrlSuffix": ".html",
"useCategoryPathInUrl": 0,
"product": "12" Ruler (30cm)"
}
}
1 answers
На данный момент у меня есть переопределенный файл для хлебных крошек в моей собственной теме.
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
/** @var \Magento\Theme\Block\Html\Breadcrumbs $block */
/** @var \Magento\Catalog\ViewModel\Product\Breadcrumbs $viewModel */
$viewModel = $block->getData('viewModel');
?>
<div class="breadcrumbs" data-mage-init='{
"breadcrumbs": {
"categoryUrlSuffix": "<?= $block->escapeHtml($viewModel->getCategoryUrlSuffix()); ?>",
"useCategoryPathInUrl": <?= (int)$viewModel->isCategoryUsedInProductUrl(); ?>,
"product": "<?= htmlspecialchars($block->escapeHtml($viewModel->getProductName())); ?>"
}
}'>
</div>
Замените строку 14, добавив функцию htmlspecialchars для форматирования предложений в названии продукта в json-файле breadcrumbs как ":
Оригинал:
"product": "<?= $block->escapeHtml($viewModel->getProductName()); ?>"
Поставщик/magento/модуль-каталог/просмотр/интерфейс/шаблоны/продукт/панировочные сухари.phtml
Заменен на:
"product": "<?= htmlspecialchars($block->escapeHtml($viewModel->getProductName())); ?>"
App/design/frontend/ThemeVendor/ThemeName/Magento_Catalog/templates/product/breadcrumbs.phtml
Вероятно, есть более элегантный способ исправить это, однако на данный момент это будет сделано.