问题描述
我正在尝试根据 URL 参数是否包含在我的 URL 中以生产模式(已编译)有条件地在我的 Jekyll 应用程序中呈现包含文件,以便我可以更改已加载的文件。
我需要用 JS 来做这件事,因为 JS 将接受参数,但我不知道 Jekyll 怎么会知道,我想知道是否有 JEKYLL 插件或类似的东西可以工作。
在我的 URL 中,例如:https://example.com/page 我将指定一些 mode
参数,然后我想决定显示哪个文件。
<div>
<!-- Default -->
{% include_relative includes/form/form.html %}
<!--
If URL param 'mode' is set
-->
{% include_relative includes/form/form_lookup.html %}
</div>
解决方法
Jekyll 生成静态网站,因此它甚至在知道 JS 告诉页面什么之前就生成了所有内容。对于这种动态行为,您不能使用 Jekyll 本身。有一些解决方法:
-
您可以生成两个单独的页面,然后根据您的 URL 参数返回一个或另一个页面。
-
生成一个包含表单和嵌入脚本的单个页面,该脚本根据从 javascript 设置的值隐藏一个或另一个:
<script>
// Check the URL parameter
check_mode(){
// See tutorial below
}
// Display one or another
show_form(x){
if(x == "formA"){
document.getElementById("formB").style.display = "none"
}else if(x == "formB"){
document.getElementById("formA").style.display = "none"
}
document.getElementById(x).style.display = "initial" // or whatever visible
}
if(check_mode())
show_form("formA")
else
show_form("formB")
</script>
<div>
<!-- Default -->
<div id="formA">
{% include_relative includes/form/form.html %}
</div>
<!--
If URL param 'mode' is set
-->
<div id="formB">
{% include_relative includes/form/form_lookup.html %}
</div>
</div>
确实,您同时发送了两种表单,这并不是带宽和浏览器内存的最有效使用方式,但最糟糕的事情发生在网络上。此外,虽然这不是最干净的方法,但考虑到问题的范围,我认为足以为您指明方向。