使用流畅的语法将每个单词的首字母大写?
Posted
技术标签:
【中文标题】使用流畅的语法将每个单词的首字母大写?【英文标题】: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
有效,但它只将第一个单词的第一个字母大写。
谢谢!
【问题讨论】:
我也尝试使用camelize
代替camelcase
,但这也没有用。
camelcase
是 Shopify filter, not a Liquid filter - 所以它在 Locomotive CMS 中不起作用。
【参考方案1】:
有一种方法可以仅使用 Liquid 语法来实现这一点。不需要任何插件。
将您的单词字符串分解为一个数组,然后使用 for 循环与大写过滤器相结合,将每个单词的第一个字母大写。如果您将其适当地封装在捕获语句中,则每个单词的第一个字符都是大写的。
% assign words = "Hi, how are you today?" | split: ' ' %
% capture titlecase %
% for word in words %
word | capitalize
% endfor %% endcapture %
titlecase
输出:
嗨,你今天好吗?
请注意,所有这些都在一行中,并且在整个捕获语句中只出现一次空格!
【讨论】:
尽管使用了a custom plug-in 或css-capitalize,但我很确定这只是解决方案。 这是唯一对我有用的东西。好主意!【参考方案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 的一个错误。因为它是一个令人惊讶的约定。预期的标题将是文件名中写入的标题。我正在研究如何获得实际的文件名标题。在您的情况下,如果您不想弄乱您的邮政编码,您可以只编写一个液体循环并将其包含在内。或者像我一样做,只是从文件名中提取标题。以上是关于使用流畅的语法将每个单词的首字母大写?的主要内容,如果未能解决你的问题,请参考以下文章