Как проверить, является ли `folderitem` первым элементом массива в Jekyll (Liquid)?

Следующий код должен добавить <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
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
52
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Идея от: jekyll/liquid: задано значение доступа к ключу из хэша в шаблоне

Не удалось проверить это, но может ли что-то подобное помочь вам в вашем цикле?

{% assign first_url= site.data.sidebars[page.sidebar].entries | where: "url", page.url | first %}`

Я думаю, вы ответили на мой вопрос о том, как я могу использовать first (создав оператор where), но я искал что-то более похожее на то, что я обнаружил на одном из других сайтов документации Liquid (см. мой ответ ниже).

mig81 25.11.2022 04:37
Ответ принят как подходящий

Я понял. Вместо

{% 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. Круто, что это также работает для вашего варианта использования.

Christian 25.11.2022 05:47

Другие вопросы по теме