【问题标题】:Capitalize first letter of each word with liquid syntax?使用流畅的语法将每个单词的首字母大写?
【发布时间】:2014-02-14 10:44:01
【问题描述】:

我正在尝试使用流动语法在 LocomotiveCMS 安装中设置 SEO。我正在尝试对其进行编码,以便使用 {{ page.title }} 动态拉取页面标题,然后强制它大写每个单词的第一个字母。

我试过了:

<title>
      {{ page.title | camelcase }} | {{ site.name }}
</title>

基于此处的流式语法文档:http://docs.shopify.com/themes/liquid-basics/output#camelize

但它不起作用。使用capitalize 有效,但它只将第一个单词的第一个字母大写。

谢谢!

【问题讨论】:

标签: html liquid


【解决方案1】:

有一种方法可以仅使用 Liquid 语法来实现这一点。不需要任何插件。

将您的单词字符串分解为一个数组,然后使用 for 循环与大写过滤器相结合,将每个单词的第一个字母大写。如果您将其适当地封装在捕获语句中,则每个单词的第一个字符都是大写的。

{% assign words = "Hi, how are you today?" | split: ' ' %}

{% capture titlecase %}
  {% for word in words %}
    {{ word | capitalize }}
  {% endfor %}{% endcapture %}
{{ titlecase }}

输出:

嗨,你今天好吗?

请注意,所有这些都在一行中,并且在整个捕获语句中只出现一次空格!

【讨论】:

【解决方案2】:

我建议使用插件来获得这种行为

_plugins/_capitalize_all.rb:

require 'liquid'
require 'uri'

# Capitalize all words of the input
module Jekyll
  module CapitalizeAll
    def capitalize_all(words)
      return words.split(' ').map(&:capitalize).join(' ')
    end
  end
end

Liquid::Template.register_filter(Jekyll::CapitalizeAll)

用法:

{{ "mein text" | capitalize_all }}

【讨论】:

  • 感谢您的回答!请问如何在液体主题文件夹中添加插件文件?
  • @YaoyuYang 我记得你只要把它放到你的 jekyll 站点的_plugins 目录中就可以了
  • 我明白了。我没有使用 Jekyll,我正在使用 shopify 网站,不知道在哪里添加它。
  • @YaoyuYang 没有这方面的经验,抱歉。
【解决方案3】:

如何使用 CSS 进行设置?

title {
    text-transform:capitalize;
}

编辑:我对文本转换做了一个错字,现在已修复;

【讨论】:

  • 这不是他想要的。他希望他的标题中的所有单词都以大写字母开头。
  • 对不起,我的意思是:text-transform:capitalize;
  • 这实际上做了我想做的事情,即 Jekyll 中的标题案例类别。谢谢提醒。
  • 好主意...幸运的是,CSS 中的大写字母并不像 Liquid 中那么糟糕 ;-)
【解决方案4】:

关于您发布的链接,骆驼案的工作原理如下:

{{ 'coming-soon' | camelcase }}

它接受一个字符串,它的单词用'-'分隔,然后将它的驼峰化。我只有一个问题:你的“page.title”怎么样了?它的单词是用'-'分隔的吗?或者你有这样的文字:“这是我页面的标题”?如果是这样,您应该将其替换为:“this-is-the-title-of-my-page”

希望这会有所帮助。

【讨论】:

    【解决方案5】:

    感谢您的回复,实际上我在发布此内容后立即找到了解决方法。我现在不是调用page.title,而是调用page.seo_title,它可以通过LocomotiveCMS 后端以正确的大小写手动输入。

    【讨论】:

      【解决方案6】:

      这一系列过滤器一直对我有用。但是,如果您的标题有 5 个连续的破折号或您不希望以下字母大写的破折号,则会遇到问题。

      {% assign headerTitle = page.title | split: " " | join: "-----" | camelcase | split: "-----" | join: " " %}
      

      【讨论】:

        【解决方案7】:

        这对我有用:{{ page.title |大写 }}

        它只大写句子中的第一个单词。

        我的第一直觉是这会将每个单词都大写,但事实并非如此。

        来源:https://docs.shopify.com/themes/liquid-documentation/filters/string-filters#capitalize

        【讨论】:

        • 是的,这在我的 OP 中提到了
        • 我实际上遇到了相反的问题。我不希望标题中的每个单词都大写。在我的情况下,我从文件名中提取标题而不是前端标题。当我这样做时,每个单词都会大写。这可能是 Jekyll 的一个错误。因为它是一个令人惊讶的约定。预期的标题将是文件名中写入的标题。我正在研究如何获得实际的文件名标题。在您的情况下,如果您不想弄乱您的邮政编码,您可以只编写一个液体循环并将其包含在内。或者像我一样做,只是从文件名中提取标题。
        猜你喜欢
        • 2015-11-10
        • 2014-11-15
        • 1970-01-01
        • 2020-08-30
        • 2015-11-04
        • 2012-11-11
        • 2012-07-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多