【问题标题】:Titleize Jekyll category命名 Jekyll 类别
【发布时间】:2013-10-29 03:15:38
【问题描述】:

我想将我帖子的打印类别名称转换为标题大小写。我找不到合适的液体过滤器。我尝试使用破折号和驼峰过滤器,但没有骰子。

或者,我想打印在 YAML frontmatter 中写入的类别名称。

例如,对于具有以下内容的帖子:

category: Here's the Category

当我提到名字时:

{% for cat in site.categories %}
    <h1>{{ cat[0] }}</h1>
{% endfor %}

我在页面上看到“这里是类别”。我想看到“Here's the Category”甚至“Here's The Category”,我可以替换(替换:'The'、'the')我想要小写的几篇文章。

编辑

对于像我这样绝望的人来说,这个令人作呕的 hack 有效,其中 n 是您在类别标题中拥有的最大单词数。

{% for cat in site.categories %}
    {% assign words = cat[0] | split: ' ' %}
    <h1>{{ words[0] | capitalize | replace:'The','the'}} {{ words[1] | capitalize }} {{ words[2] }} {{ words[3] | capitalize }} {{ words[4] | capitalize }} {{ words[n] | capitalize }}</h1>
{% endfor %}

如果有人知道更优雅的方法,我将不回答这个问题。

【问题讨论】:

    标签: jekyll liquid


    【解决方案1】:

    您可以通过使用capitalize 过滤器来实现您想要的一部分:

    输入

    {{ 'capitalize me' | capitalize }}
    

    输出

    Capitalize me
    

    Source.

    另一种可能性是使用joincamelize

    {{ "here's the category" | join: '-' | camelize }}
    

    它应该打印“Here's The Category”,但camelize 可能对here's 有问题。

    【讨论】:

    • 我认为连接过滤器不会起作用,因为它似乎适用于数组的元素,而不是字符串中的单词。但是我能够使用替换过滤器将空格替换为“-”。不幸的是,camelcase 和 camelize 都不适合我。即使在非动态字符串上,我也无法让它们工作。我已经在带有破折号和下划线的字符串上尝试了“camelize”和“camelcase”。
    • 哦,这很奇怪。你用的是什么版本的 Jekyll?
    • 这也是我的第一个想法,但我使用的是最新的 1.2.1。是否有可能我不久前更新了但没有做一些必要的事情来启动更新?比如,我必须重建项目吗?我每次启动项目时都在运行jekyll serve --w
    • 这很奇怪......好吧,在这种情况下,你最好的选择可能是编写一个自定义插件。呃,对不起:(
    【解决方案2】:

    在我的情况下,只需使用 {{ category.first | capitalize }} 即可,无需在类别上附加 ''

    【讨论】:

      【解决方案3】:

      可以使用另一个 for 循环,而不是手动遍历单词 0 到 n,如下所示:

      {% for category in site.categories %}
        {% assign words = category | first | split: ' ' %}
        {% for word in words %}
          {{ word | capitalize | replace: 'The','the' }}
        {% endfor %}
      {% endfor %}
      

      【讨论】:

        【解决方案4】:

        我知道这是旧的,但它帮助我解决了我的问题,它可以帮助其他人。

        我的解决方案是:

        {% for category in site.categories %}
          <a href="/{{category[0] | slugify }}/">
            {{category[0]}}
          </a>
        {% endfor %}  
        

        这列出了所有博客类别(最常用于构建菜单)

        变成:

        <a href="/dicas/">
          Dicas
        </a>
        
        <a href="/diário-de-bordo/">
          Diário de bordo
        </a>
        

        谢谢你给我线索。 您可以在以下位置查看其他过滤器:http://jekyllrb.com/docs/templates/#filters

        【讨论】:

          【解决方案5】:

          在 Kabab-case 中按您希望的方式命名页面,然后使用替换:

          {{ category.name | replace: '-', ' '}}
          

          Don't-Capitalize-the 变为 Don't Capitalize theCapitalize-The 变为 Capitalize The

          【讨论】:

            【解决方案6】:

            这个解决方案有点过头了,但您可以调整 author data file solution from the Jekyll site 以处理类别。

            在您的_data 文件夹中,创建一个名为categories.yml 的文件。输入如下内容:

            my-first-category:
              name: My First Category
            
            another-category:
              name: Another Category
            

            然后,您可以像这样遍历您的类别:

            {% for category in site.categories %}
                {% assign category_slug = category[0] %}
                {% assign category_data = site.data.categories[category_slug] %}
                {% if category_data %}
                    {{ category_data.name }}
                {% endif %}
            {% endfor %}
            

            旁注:我不确定我为什么需要 category_slug 分配。我在循环post.categories时不需要它。

            这会通过添加额外的文件来增加开销,但会为其他可以附加到对象(如类别图像或描述)的数据打开大门。你可以更细化你的名字。这也是一个可读性很强的解决方案,很好。

            【讨论】:

              【解决方案7】:

              我反其道而行之。我在标题大小写中硬编码了我的页面标题,并在其他页面中使用了downcaseupcasecapitalize 液体过滤器。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2016-06-04
                • 2012-07-08
                • 1970-01-01
                • 1970-01-01
                • 2016-04-11
                • 2017-02-25
                相关资源
                最近更新 更多