You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jekyll:如何通过文章前置元数据生成Lightbox插件所需标签列表

别慌!我来一步步带你搞定从Front Matter提取数据生成Lightbox标签列表的事儿,不管你用的是Jekyll、Hugo这类主流静态站点生成器,都能找到对应的解决方案~

第一步:先理清你的Front Matter数据结构

首先得确保你的文章前置元数据里已经存好了Lightbox需要的图片和标签信息,举个典型的例子(用YAML格式):

---
title: "我的秋日登山相册"
# 这里用lightbox_images数组存每张图的信息,你可以改成自己习惯的命名
lightbox_images:
  - url: "/assets/photos/mountain-1.jpg"
    alt: "山顶红叶"
    tags: ["红叶", "山顶"]
  - url: "/assets/photos/mountain-2.jpg"
    alt: "山间溪流"
    tags: ["溪流", "山林"]
  - url: "/assets/photos/mountain-3.jpg"
    alt: "云海日出"
    tags: ["日出", "云海"]
---

注意:如果你的数据结构不一样(比如单独存tags数组),后续代码里的对应字段要跟着调整哦~

第二步:根据你的静态生成器循环生成HTML

下面针对两种最常用的静态站点生成器给出代码示例,你可以直接套用:

如果你用的是Jekyll(Liquid模板)

找到你的文章布局文件(一般在_layouts/post.html),插入这段代码:

<!-- 生成标签筛选按钮组 -->
<div class="lightbox-tag-group">
  <!-- 先提取所有唯一标签,避免重复 -->
  {% assign all_tags = site.posts | map: 'lightbox_images' | flatten | map: 'tags' | flatten | uniq %}
  
  {% for tag in all_tags %}
    <button class="lightbox-tag-btn" data-tag="{{ tag }}">
      {{ tag }}
    </button>
  {% endfor %}
  <!-- 可选:添加重置按钮 -->
  <button class="lightbox-tag-btn lightbox-reset">全部</button>
</div>

<!-- 生成Lightbox图片容器 -->
<div class="lightbox-gallery">
  {% for image in page.lightbox_images %}
    <a href="{{ image.url }}" data-lightbox="gallery" data-tags="{{ image.tags | join: ',' }}">
      <img src="{{ image.url }}" alt="{{ image.alt }}" class="gallery-thumb">
    </a>
  {% endfor %}
</div>

如果你用的是Hugo(Go模板)

找到你的文章布局文件(一般在layouts/_default/single.html或者对应文章类型的布局文件),插入这段代码:

<!-- 生成标签筛选按钮组 -->
<div class="lightbox-tag-group">
  <!-- 先收集所有唯一标签 -->
  {{ $allTags := slice }}
  {{ range .Site.Pages }}
    {{ range .Params.lightbox_images }}
      {{ range .tags }}
        {{ $allTags = $allTags | append . }}
      {{ end }}
    {{ end }}
  {{ end }}
  
  {{ range $tag := uniq $allTags }}
    <button class="lightbox-tag-btn" data-tag="{{ $tag }}">
      {{ $tag }}
    </button>
  {{ end }}
  <!-- 可选:添加重置按钮 -->
  <button class="lightbox-tag-btn lightbox-reset">全部</button>
</div>

<!-- 生成Lightbox图片容器 -->
<div class="lightbox-gallery">
  {{ range .Params.lightbox_images }}
    <a href="{{ .url }}" data-lightbox="gallery" data-tags="{{ delimit .tags "," }}">
      <img src="{{ .url }}" alt="{{ .alt }}" class="gallery-thumb">
    </a>
  {{ end }}
</div>
第三步:给Lightbox加上标签过滤逻辑

不管你用的是Lightbox2、Fancybox还是其他插件,都需要加一段JS来实现标签筛选功能,这里以Lightbox2为例,在布局文件的末尾(</body>之前)插入:

// 标签筛选逻辑
document.querySelectorAll('.lightbox-tag-btn').forEach(btn => {
  btn.addEventListener('click', function() {
    const selectedTag = this.dataset.tag;
    
    // 遍历所有图片链接,显示/隐藏对应标签的图片
    document.querySelectorAll('.lightbox-gallery a').forEach(link => {
      const imgTags = link.dataset.tags.split(',');
      if (selectedTag === '全部' || imgTags.includes(selectedTag)) {
        link.style.display = 'inline-block'; // 可以根据你的布局改成block或其他
      } else {
        link.style.display = 'none';
      }
    });
  });
});

如果用的是其他Lightbox插件,只需要调整对应的数据属性名(比如Fancybox用data-fancybox而不是data-lightbox),核心逻辑是一样的~

第四步:把代码插入到文章布局里

最后一步就是把上面的HTML和JS代码放到你的文章布局文件的合适位置:

  • 标签按钮组可以放在文章正文的顶部或者侧边栏
  • 图片容器放在正文里你想展示相册的位置
  • JS代码放在页面末尾,确保DOM加载完成后再执行

另外别忘了:

  1. 引入你用的Lightbox插件的CSS和JS文件(比如Lightbox2需要在<head>里加CSS,页面末尾加JS)
  2. 根据自己的网站样式调整标签按钮和图片的CSS,让它们更贴合你的设计

内容的提问来源于stack exchange,提问作者user6283187

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:23:30