恢复迁移到 Magento 2 的产品描述中的换行符

Restoring linebreaks in product descriptions migrated into Magento 2

我正在帮助将一个旧的 Magento 1.6 站点迁移到 Magento 2.3,看起来以纯文本形式输入的产品描述和简短描述带有最少的标记和换行符以形成段落,现在看起来一切都被粉碎了单个段落,而页面源代码仍然正确呈现白色 space 并显示换行符。但是没有标签,白色space会被浏览器忽略。

在 Magento 2 中向前推进,我们希望使用所见即所得编辑器来更好地格式化产品描述,但我们希望迁移后的产品至少能够正确格式化。

这个线程似乎描述了我想做的事情,将描述模板包装在 nl2br() 方法中:

这看起来是解决这个问题的好方法,而且不会影响我们未来产品描述(使用所见即所得)的显示方式,至少我认为是这样?此解决方案适用于 Magento 1,因此我必须找到与 Magento 2 等效的解决方案。我在 /vendor/magento/module-catalog/view/frontend/templates/product/view/description.phtml

中找到了 description.phtml 模板

该行现在显示为:

<?= /* @escapeNotVerified */ $this->helper('Magento\Catalog\Helper\Output')->productAttribute($block->getProduct(), $block->getProduct()->getDescription(), 'description') ?>

如何在此处应用 nl2br()?我只是将它包裹在 "getDescription()" 周围还是应该放在其他地方?我应该将新模板放在我的自定义主题中的什么位置以覆盖默认模板?我在文件结构中尝试了多种变体和不同位置,但我所做的一切似乎都没有效果。

我不是开发人员,所以我可能在这里犯了一些基本错误。我什至尝试过故意搞砸代码,但它没有做任何事情,所以我很确定模板不在正确的位置,或者我没有清除正确的缓存?我正在使用 cache:clear 和 cache:flush,甚至删除 pub/static/frontend 和 var/view_preprocessed 以防万一,但似乎没有任何效果。

我考虑的另一种方法是使用 CSS 将 "whitespace:pre-line;" 属性添加到 .description class,但是当我在浏览器的开发者模式我注意到它在使用所见即所得编辑器输入的新产品中将白色 space 加倍,这并不是最佳的前进方式。我对 LESS 也不是很熟悉,所以我不确定将这条规则放在哪里最好。会在 _theme.less 吗? _extend.less?

我最后的想法是尝试找出一个 MySQL 命令来进行一次性替换,这样 \n 就变成了描述和简短描述属性中的
标签,但我不知道不够了解 MySQL 做那样的事情。

那么我应该追求哪种解决方案以及我应该使用什么语法?我觉得自己像个糟糕的台球手,知道我可以采取什么角度但不能击球!

感谢您的帮助。

嗯,我不知道如何让 nl2br() 工作,但我在 catalog_product_entity_text table 中找到了产品描述和简短描述,以及目录的其他属性产品。

我做了一些测试,发现使用所见即所得编辑器编辑的产品在其条目中有 html 代码,而迁移后的文本只有换行符。手动插入 html 标签产生了预期的效果,在与团队确认他们更喜欢 br 而不是 p 标签来生成换行符后,我能够通过以下查询修复所有问题:

描述(attribute_id 61)

UPDATE catalog_product_entity_text SET value = REPLACE( value, '\r\n', '<br />' ) WHERE attribute_id = "61"

简短说明(attribute_id 62)

UPDATE catalog_product_entity_text SET value = REPLACE( value, '\r\n', '<br />' ) WHERE attribute_id = "62"

如果这不起作用,我可能会尝试在替换值中只使用“\n”,但它会在第一次运行时继续运行,一切看起来都符合预期。真松了一口气!

如果有人知道我如何修改 php 模板来实现此目的(以及该文件应该放在哪里),我想知道以供将来参考和其他人使用。

干杯! Self-five