Использовать первую букву каждого слова с синтаксисом жидкости?

Я пытаюсь настроить SEO в установке LocomotiveCMS с использованием жидкого синтаксиса. Я пытаюсь закодировать его так, чтобы заголовок страницы динамически вытягивался с помощью {{page.title}}, а затем заставлял его заглавные буквы первой буквы каждого слова.

Я пробовал это:

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

Основываясь на документации по синтаксису жидкости здесь: http://docs.shopify.com/themes/liquid-basics/output#camelize

Но он не работает. Использование capitalize работает, но только заглавные буквы первой буквы первого слова.

Спасибо!

Ответ 1

Я бы предложил использовать плагин для получения этого поведения

_plugins/_capitalize_all.rb:

require 'liquid'
require 'uri'

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

Liquid::Template.register_filter(CapitalizeAll)

Использование:

{{ "mein text" | capitalize_all }}

Ответ 2

Существует способ достижения этого, используя только синтаксис Liquid. Нет необходимости в каких-либо плагинах.

Разделите строку слов в массив и используйте цикл for в сочетании с фильтром capize, чтобы загладить первую букву каждого слова. Если вы соответствующим образом инкапсулируете это в оператор захвата, вы останетесь с первым символом в каждом заглавном слове.

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

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

{{ titlecase }}

Вывод:

Привет, как вы сегодня?

Обратите внимание, что все это находится в одной строке и есть только одно появление пробелов во всем объявлении записи!

Ответ 3

как настроить это с помощью CSS?

title {
    text-transform:capitalize;
}

edit: я сделал опечатку об текстовом преобразовании, теперь он исправлен;

Ответ 4

Относительно ссылки, которую вы опубликовали, дело верблюда работает следующим образом:

{{ 'coming-soon' | camelcase }}

Он берет строку со словами, разделенными на "-", и на ней снимается. У меня есть только один вопрос: как идет ваш "page.title"? его слова разделены на "-"? или у вас есть такой текст: "Это название моей страницы"? если это так, вы должны заменить его: "this-is-the-title-of-my-page"

Надеюсь, что это поможет.

Ответ 5

Спасибо за ответы, я действительно выяснил обходное решение сразу после публикации этого сообщения. Вместо вызова page.title я теперь вытаскиваю page.seo_title, который можно ввести вручную через бэкэнд LocomotiveCMS с правильной заглавной буквой.

Ответ 6

Это работает для меня: {{page.title | capizeize}}

Он заглаживает только первое слово в предложении.

Мой первый инстинкт заключался в том, что это будет использовать каждое слово, но это не так.

Источник: https://docs.shopify.com/themes/liquid-documentation/filters/string-filters#capitalize

Ответ 7

Эта серия фильтров работает для меня. Вы столкнулись бы с проблемами, если бы ваш титул имел 5 последовательных тире или тире, в которых вы не хотели бы использовать следующую букву.

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