Как сравнить размер / длину строки в шаблонах Liquid's Liquid?

Я использую Jekyll на страницах GitHub для создания блога и page.title получить длину строки page.title переданной в шаблон Liquid Template в переднем вопросе YAML в каждом сообщении. Я не смог найти простой способ сделать это. Глядя на руководство Liquid For Designers, я смог увидеть, что он поддерживает два типа разметки:

  • Выделение вывода. Ограниченные двойными фигурными фигурными скобками {{ }} , вы можете выводить переменные, которые передаются в ваш шаблон, либо в переднем вопросе YAML, например в page.title в Jekyll, либо в глобальных переменных уровня сайта в _config.yml . Чтобы вывести заголовок сообщения или страницы, вы должны использовать {{ page.title }} .

  • Отметка тегов – ограничено фигурными фигурными скобками и процентами {% %} %% {% %} , они используются для логики в ваших шаблонах. Если утверждения, циклы, этот тип вещи.

По-видимому, есть много фильтров, которые вы можете использовать с Output Markup, и вы можете вывести длину строки, переданной в шаблон, с помощью {{ page.title | size }} {{ page.title | size }} .

Однако то, что я хотел бы сделать в моем шаблоне, отображает заголовок страницы, используя либо заголовок <h1> , <h2> , либо <h3> зависимости от длины заголовка.

В любом случае, я не могу разобраться в разметке тегов и разметке вывода.

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

Кто-нибудь, у кого больше опыта работы с Liquid, знает, как это сделать?

В идеале, то, что я хотел бы сделать, это нечто подобное:

 {% if page.title | size > 5 %} 

Solutions Collecting From Web of "Как сравнить размер / длину строки в шаблонах Liquid's Liquid?"

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

 {% assign thesize = variable.size %} {% if thesize > 5 %} Do stuff here. {% endif %} 

Я работаю над тем, что я делаю, по крайней мере, просто подумал, что я выброшу его. У меня были проблемы с использованием захвата из-за того, что он автоматически сохраняется как строка.

Затем снова,

 {% if variable.size > 5 %} Do stuff here. {% endif %} 

должны работать одинаково.

Я собираюсь опубликовать это решение, которое я нашел в чьем-то блоге. Это единственный способ, который я нашел до сих пор, так надежно получить длину переданного в строке и сравнить, используя что-либо иное, чем прямое равенство. Чтобы сделать сравнение, вы должны сделать вычитание и использовать разницу. Метод описан в этом блоге, написанном Бен Данлапом . Это все-таки своего рода обходной путь, но он умен и кажется, что он всегда будет работать. Не может быть так эффективно, если вы хотите сделать if, elsif, else с несколькими предложениями, но вы все равно можете использовать несколько различий и заставить его работать. В основном вы бы сделали это в моем случае:

 {% capture difference %}{{ page.title | size | minus:20 }}{% endcapture %} {% unless difference contains '-' %} // 20 characters or less <h3>{{ page.title }}</h3> // show smaller header {% else %} // More than 20 characters <h2>{{ page.title }}</h2> // show larger header {% endunless %} 

Вид умный, но и своего рода хак. Если кто-нибудь придумает лучший способ, дайте мне знать.

Вы хотите сначала записать значение в переменной:

 {% capture title_size %}{{ page.title | size }}{% endcapture %} {% if title_size > 5 %} // do your stuff here... {% endif %} 

capture подробно описан в самом конце этой страницы: https://github.com/shopify/liquid/wiki/liquid-for-designers

В качестве побочного примечания также используется компоновка длины:

 {% if site.posts.length > 0 %} blablabla... {% endif %} 

Хотя нет очевидного способа вывести строку в целое число в шаблон Liquid, вы можете сделать это наоборот (т. Е. Отличить целое число к строке), используя тэг {% capture %} который просто выводит целочисленную переменную , Это связано с тем, что захват всегда будет возвращать зарисовку.

Имея это в виду, вы действительно можете обмануть Jekyll в сравнении между целым и строкой, по крайней мере, если вы хотите сделать простой тест равенства.

Это не решает проблему этого вопроса, но достаточно полезно для тех, кто здесь смотрит, поэтому я все равно отправлю его. В этом примере мы хотим сравнить длину заголовка страницы с размером массива. Не спрашивайте почему 🙂

 {% capture title_size %}{{ page.title | size }}{% endcapture %} {% if title_size == some_array.size %} This will never be reached, because some_array.size is an integer and title_size a string {% endif %} {% capture some_array_size_str %}{{ some_array.size }}{% endcapture %} {% if title_size == some_array_size_str %} But this will! {% endif %}