我开始使用Jekyll和Liquid,我遇到了一些麻烦。
假设我想在Jekyll里面做一些制作链接的Liquid标签:写作时
...and according to {% cite my_link %} we have that...
然后Jekyll搜索caption
(某些YAML预定义信息)为my_link
的帖子,并根据某种样式为其创建链接。要创建这个Liquid标签,我想必须从像
module Jekyll
class Cite < Liquid::Tag
def render(context)
caption = ????????
aux = site.posts | where: "lang", page.lang | where: "caption", "#{@caption}" | first
return <a href="{{aux.cleanurl}}" class="{{aux.kind}}" title="{{aux.title}}"></a>
end
end
end
Liquid::Template.register_tag('cite', Jekyll::Cite)
首先,我不知道如何分配caption=my_link
,即提取{% cite my_link %}
的第二部分。一旦我们得到它,这段代码会起作用还是错了?
非常感谢您的帮助
答案 0 :(得分:2)
您可以阅读Jekyll Tags plugins documentation,更重要的是,Liquid Tag code。
在最后一篇参考文献中,您将了解到$(document).on('change','#chkisJointApplication',function(){
if(this.checked)
{
//loading partial view
$('#element').load('/Controller/GetPartialView',function(){
alert("Partial View Loaded");
});
}
else
$("#element").html(''); //clearing the innerHTML if checkbox is unchecked
})
方法默认情况下为其他方法提供initialize
变量。此变量包含传递给标记的参数。
因此,在@markup
方法中,您已经有一个包含所需值的render
变量。然后,您可以@markup
。请注意,这仅适用于一个参数标记。对于多个参数,您必须使用caption = @markup
上的正则表达式对各个部分进行排序。
答案是否定的。插件是ruby代码而不是Liquid。
以下是一个可行的示例:
@markup
注意:您必须在module Jekyll
class CiteTag < Liquid::Tag
def render(context)
# @markup is a Liquid token so, we convert it to string
# then we remove spaces before and after
caption = @markup.to_s.strip
site = context.registers[:site]
posts = site.collections['posts'].docs
page = context.registers[:page]
if defined? page['lang'] and !page['lang'].nil? then
# if current page has a lang front matter varaible set (or a default)
currentLang = page['lang']
elsif defined? site.config['lang']
# if no lang is defined in current page, fallback to site.lang
currentLang = site.config['lang']
else
# if no site.lang is available we raise an error
raise "No default 'lang' option defined in _config.yml"
end
# create a new array with posts selected on currentLang and caption variable
selectedPosts = posts.select do |post|
postLang = post.data['lang']
postCaption = post.data['caption']
sameLang = postLang == currentLang
sameCaption = postCaption == caption
sameLang and sameCaption
end
# select first post
post = selectedPosts.first
# print the link
link = "<a href=\"#{site.baseurl}#{post.url}\" class=\"#{post.data['kind']}\" title=\"#{post.data['title']}\">#{post.data['title']}</a>"
end
end
end
Liquid::Template.register_tag('cite', Jekyll::CiteTag)
中设置lang
变量。例如:_config.yml
。