Следующий код должен добавить <h1>
для каждой страницы в выводе PDF. По сути, он проходит через файл YAML, который определяет мое руководство, и, если URL-адрес текущей страницы совпадает с URL-адресом в блоке YAML, он помещает ключ title
родительского блока в тег <h1>
.
{% assign sidebar = site.data.sidebars[page.sidebar].entries %}
{% for entry in sidebar %}
{% for folder in entry.folders %}
{% if folder.title and folder.type != "navi" and folder.type != "frontmatter" %}
{% for folderitem in folder.folderitems %}
{% if folderitem.url == page.url %}
<h1 class = "post-title-main" id = "{{page.permalink | replace: '/', '' }}">{{ folder.title }}</h1>
{% endif %}
{% endfor %}
{% endif %}
{% endfor %}
{% endfor %}
Проблема в том, что текущий код делает это для каждой страницы, например:
<h1>The Title I Want to Put in the H1</h1>
<h2>The Title of the Page Which I *Do* Want the <H1> to Appear Above</h2>
. . .
<h1>The Title I Want to Put in the H1</h1>
<h2>The Title of the Page Which I *Don't* Want the <H1> to Appear Above</h2>
Мне нужна еще одна условная проверка, что-то вроде «если folderitem
является первым», которая позволила бы остальной части условной логики выполняться только в том случае, если элемент является первым в списке, что приводит к:
<h1>The Title I Want to Put in the H1</h1>
<h2>The Title of the Page Which I *Do* Want the <H1> to Appear Above</h2>
Каков синтаксис выбора первого элемента? first
, по-видимому, для возврата первого элемента массива, который, похоже, не применяется к проверке, является ли текущий элемент первым элементом в структуре данных YAML, с которой я работаю.
Вот пример структуры YAML:
entries:
- title:
pdftitle: foobar.pdf
product:
version:
folders:
- title:
output: pdf
type: frontmatter
folderitems:
- title:
url: /titlepage.html
output: pdf
type: frontmatter
- title: My Amazing Guide
output: web
type: navi
folderitems:
- title: Home
url: /index.html
output: web
- title: The Title I Want to Put in the H1
url: /section/page/index.html
output: web, pdf
folderitems:
- title: The Title of the Page Which I *Do* Want the <H1> to Appear Above
url: /section/page/some-page.html
output: web, pdf
- title: The Title of the Page, Which I *Don't* Want the <H1> to Appear Above
url: /section/page/another-page.html
output: web, pdf
Идея от: jekyll/liquid: задано значение доступа к ключу из хэша в шаблоне
Не удалось проверить это, но может ли что-то подобное помочь вам в вашем цикле?
{% assign first_url= site.data.sidebars[page.sidebar].entries | where: "url", page.url | first %}`
Я понял. Вместо
{% if folderitem.url == page.url %}
я смог использовать
{% if folderitem.url == page.url and forloop.first == true %}
Это дополнительное условие фактически проверяет именно то, что я хотел проверить — является ли элемент массива первым. По иронии судьбы (потому что я пишу документацию?), проблема в том, что документация Liquid на https://shopify.github.io/liquid/ неполная, тогда как документация Liquid на https://shopify. dev/api/liquid/ гораздо более полный.
Вот документация по forloop.first. Именно здесь я также узнал, что могу использовать такие свойства, как forloop.index
(на основе 1), forloop.index0
и так далее.
Хороший. Приятно видеть, что вы решили это. Спасибо, что поделились этой полезной ссылкой на документацию по API. Описанный трюк довольно часто используется для создания файлов JSON. Круто, что это также работает для вашего варианта использования.
Я думаю, вы ответили на мой вопрос о том, как я могу использовать
first
(создав операторwhere
), но я искал что-то более похожее на то, что я обнаружил на одном из других сайтов документации Liquid (см. мой ответ ниже).