Jekyll集合全局设output:false后,如何为指定条目开启output:true?
解决Jekyll集合全局
output:false下部分条目单独生成页面的问题 嘿,这个问题我之前也踩过坑——全局设了output: false之后,直接在条目front matter里写output: true确实不生效,因为Jekyll在集合层面就把生成页面的开关关了,单个条目的设置会被直接忽略。不过咱们可以用Jekyll的钩子(Hooks)来绕开这个限制,同时保证所有条目的published: true都能正常生效,完全不影响你在站点其他地方调用这些条目的数据。
具体实现步骤
1. 创建自定义插件钩子
在你的Jekyll站点根目录下,新建一个_plugins文件夹(如果还没有的话),然后在里面创建一个Ruby脚本,比如custom_collection_output.rb,把下面的代码放进去:
Jekyll::Hooks.register :documents, :pre_render do |document, payload| # 把这里的'your_collection'替换成你实际的集合名称 target_collection = 'your_collection' if document.collection.label == target_collection # 检查条目front matter里的自定义标识 if document.data['output_override'] == true document.data['output'] = true else document.data['output'] = false end end end
2. 保持全局集合配置不变
在你的_config.yml里,集合的配置还是维持原来的设置:
collections: your_collection: output: false published: true
3. 给需要生成页面的条目加标识
在那些你想要生成独立页面的条目front matter里,加上自定义的output_override: true,比如:
--- title: "我需要生成页面的条目" output_override: true --- 这里是条目内容...
为什么这个方法有效?
当集合全局output: false时,Jekyll默认不会为任何条目生成页面,但我们通过pre_render钩子,在文档渲染前动态修改了条目的output属性。Jekyll会在后续的处理中识别到这个修改后的属性,从而为标记了output_override: true的条目生成独立页面,同时所有条目依然保持published: true,完全不影响你在站点其他地方调用这些条目的数据。
另外,这个方法不需要改动任何已有的全局配置或其他条目,只需要给目标条目加个标识就行,非常灵活。
内容的提问来源于stack exchange,提问作者Josh
相关产品推荐
相关产品推荐

