如何在Shopify中按换行符拆分字符串?

20

我在settings.html中有一个字段,期望用户输入多个由两个换行符分隔的段落。我想将这个输入字符串拆分为一个字符串数组,每个元素表示一个段落。

我想要做类似于下面这样的操作:

{% assign paragraphs = settings.intro | split: '\n' %}
{% for paragraph in paragraphs %}
    <p>
        {{ paragraph }}
    </p>
{% endfor %}

我似乎无法弄清楚如何在Liquid中引用换行符。我该怎么做?是否有什么替代方法?

3个回答

42

试一试:

{% assign paragraphs = settings.intro | newline_to_br | split: '<br />' %}
{% for paragraph in paragraphs %}<p>{{ paragraph }}</p>{% endfor %}

19
ه»؛è®®ï¼ڑهœ¨newline_to_brن¹‹هگژو·»هٹ strip_newlinesم€‚ - Denilson Sá Maia
1
为什么不直接像这样通过\n进行分割:settings.intro | split: '\n' - Nyasro
1
@Nyasro 看看 morganbaz 的答案:“Liquid 不会将转义序列转换为特殊字符。” 但除此之外它能够正常工作(见他的回答)。 - Carlo Wood

5

如果你确实需要Shopify按换行符拆分任何内容,而且不需要之后使用for循环迭代,这是可以做到的:

{% assign paragraphs = settings.intro | split: '
' %}
{% for paragraph in paragraphs %}
    <p>
        {{ paragraph }}
    </p>
{% endfor %}

比如说,你需要在你的源代码中输入一个显式换行符。

这是由于Liquid的工作方式所致,引用来自关于类型的文档:

Liquid不会将转义序列转换为特殊字符。


哇,太疯狂了。它起作用了,非常感谢你的提示,很棒你找出来了! - Cenco

4
@josh-browns的回答基本上已经帮我解决了问题,对于大多数情况可能已经足够。然而,由于用户生成的双行会导致一些空白段落出现,因此我需要手动检查每行是否为空才能输出段落。Denilson Sá Maia提供的strip_newlines方法对我的markdown处理器没有什么帮助。
{% for paragraph in paragraphs %}
    {% assign paragraph-length = paragraph | number_of_words %}
    {% if paragraph-length > 0 %}
        <p>{{ paragraph }}</p>
        IMAGE HERE
    {% endif %}
{% endfor %}

这并不能解决数组中的空白,因此我对数组进行了迭代,创建了一个新数组,仅包含有效内容。如果有一个适用于数组而不仅限于哈希表的筛选器会很好。
{% assign all-paragraphs = content  | strip | newline_to_br | strip_newlines | split: "<br />"  %}
{% assign paragraphs = site.emptyArray  %}
{% for paragraph in all-paragraphs %}
    {% if paragraph and paragraph != "" and paragraph != site.emptyArray %}
         {% assign paragraphs = paragraphs | push: paragraph %}
    {% endif %}
{% endfor %}

过滤器标签 uniq 也会删除除一个空行以外的所有空行。 - Craig.C
“newline_to_br” 似乎只适用于“textarea”字段。有没有办法将其应用于“richtext”组件? - Fed
我相信富文本设置已经使用<br>代替换行符了。 - Ferares

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接