【问题标题】:Restoring linebreaks in product descriptions migrated into Magento 2恢复产品描述中的换行符已迁移到 Magento 2
【发布时间】:2019-09-05 15:07:01
【问题描述】:

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

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

这个线程似乎描述了我想做的事情,将描述模板包装在 nl2br() 方法中:Linebreak in magento product description when NOT using wysiwyg

这看起来是解决这个问题的好方法,而且不会影响我们未来产品描述(使用所见即所得)的显示方式,至少我认为是这样?这个解决方案适用于 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 添加“空白:前行;”属性到 .description 类,但是虽然它会修复迁移的数据,但当我在浏览器的开发人员模式下对其进行测试时,我注意到它会使使用所见即所得编辑器输入的新产品中的空白加倍,这不是最佳的前进。我对LESS也不是很熟悉,所以我不确定在哪里最好放置这条规则。它会在_theme.less 中吗? _extend.less?

我的最后一个想法是尝试找出一个 MySQL 命令来进行一次性替换,因此 \n 成为描述和简短描述属性中的
标记,但我不知道足够的 MySQL 来做某事像这样。

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

感谢您的帮助。

【问题讨论】:

    标签: php css mysql magento2 nl2br


    【解决方案1】:

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

    我做了一些测试,发现使用所见即所得编辑器编辑的产品在其条目中有 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多