Jekyll多语言站点:如何从包含文件引入Front Matter避免重复
解决方案:统一管理
lastmod到共享Include文件 结合你使用的Jekyll多语言方案,要避免在members.md和members_en.md中重复配置lastmod,可以通过在共享Include文件中定义变量+模板调用变量的方式实现,具体步骤如下:
1. 修改共享Include文件的结构
在_includes/cr_pages/members.md开头添加lastmod变量的赋值语句,然后用capture标签包裹原内容,确保变量能被父页面读取:
{% assign lastmod = "2024-05-20" %} <!-- 这里的日期会由pre-commit钩子自动更新 --> {% capture member_page_content %} <!-- 以下是你原来的双语内容 --> ## メンバー / Members {% if page.lang == "en" %} ### Faculty - Prof. XXXX (English bio...) ### Students - YYYY (English info...) {% else %} ### 教員 - XXXX教授(日本語の略歴...) ### 学生 - YYYY(日本語の情報...) {% endif %} {% endcapture %}
2. 调整父页面的引用方式
在members.md和members_en.md中,先引用共享Include文件,再输出捕获的内容:
--- layout: cr lang: ja <!-- members_en.md里这里是lang: en --> --- {% include cr_pages/members.md %} {{ member_page_content }}
3. 修改页面模板以使用共享的lastmod
在你的页面布局文件(比如_layouts/cr.html)中,需要显示最后修改时间的位置,替换原来的{{ page.lastmod }}为{{ lastmod }}:
<footer> Last updated: {{ lastmod | date: "%Y-%m-%d" }} </footer>
4. 配置pre-commit钩子自动更新lastmod
修改你的pre-commit钩子脚本,让它自动更新_includes/cr_pages/members.md中的lastmod变量值。比如用sed命令替换赋值行:
#!/bin/sh # 更新共享Include文件中的lastmod为当前日期 sed -i.bak 's/{% assign lastmod = ".*" %}/{% assign lastmod = "'"$(date -I)"'" %}/' _includes/cr_pages/members.md # 删除备份文件(macOS的sed需要这一步,Linux可去掉.bak) rm _includes/cr_pages/members.md.bak # 提交更新后的文件 git add _includes/cr_pages/members.md
这样,每次提交代码时,钩子只会修改共享的Include文件中的lastmod,而members.md和members_en.md不需要任何重复配置,完全复用共享内容和变量。
内容的提问来源于stack exchange,提问作者Akira Okumura
相关产品推荐
相关产品推荐

