如何在自定义插件中使用 `relative_url`
How to use `relative_url` inside custom plugin
我正在尝试在插件中使用 relative_url
过滤器。
module Jekyll
module Tags
class MyNewTag < Liquid::Block
include Jekyll::Filters::URLFilters
def initialize(tag_name, block_options, liquid_options)
super
@class = block_options.strip
end
def render(context)
context.stack do
context["class"] = @class
@content = super
path_js = Jekyll::Filters::URLFilters::relative_url("assets/custom.min.css")
path_css = Jekyll::Filters::URLFilters::relative_url("assets/custom.min.js")
end
output = <<~EOS
<link rel="stylesheet" href="#{path_js}">
<script src="#{path_css}"></script>
EOS
end
end
end
end
Liquid::Template.register_tag('MyNewTag', Jekyll::Tags::MyNewTag)
但是,Ruby 显示 NoMethodError: undefined method
relative_url' for Jekyll::Filters::URLFilters:Module` - 因此我无法使用它。
我应该如何包含 relative_url
过滤器,以便我可以在我的代码中使用它?
事实证明,错误是由于缺少上下文变量引起的,必须由@context = context
显式传递
它有效,如果它是这样格式化的:
module Jekyll
module Tags
class MyNewTag < Liquid::Block
include Jekyll::Filters::URLFilters
def initialize(tag_name, block_options, liquid_options)
super
@class = block_options.strip
end
def render(context)
context.stack do
context["class"] = @class
@content = super
@context = context
@path_js = relative_url("assets/custom.min.css")
@path_css = relative_url("assets/custom.min.js")
end
output = <<~EOS
<link rel="stylesheet" href="#{@path_js}">
<script src="#{@path_css}"></script>
EOS
end
end
end
end
Liquid::Template.register_tag('MyNewTag', Jekyll::Tags::MyNewTag)
我正在尝试在插件中使用 relative_url
过滤器。
module Jekyll
module Tags
class MyNewTag < Liquid::Block
include Jekyll::Filters::URLFilters
def initialize(tag_name, block_options, liquid_options)
super
@class = block_options.strip
end
def render(context)
context.stack do
context["class"] = @class
@content = super
path_js = Jekyll::Filters::URLFilters::relative_url("assets/custom.min.css")
path_css = Jekyll::Filters::URLFilters::relative_url("assets/custom.min.js")
end
output = <<~EOS
<link rel="stylesheet" href="#{path_js}">
<script src="#{path_css}"></script>
EOS
end
end
end
end
Liquid::Template.register_tag('MyNewTag', Jekyll::Tags::MyNewTag)
但是,Ruby 显示 NoMethodError: undefined method
relative_url' for Jekyll::Filters::URLFilters:Module` - 因此我无法使用它。
我应该如何包含 relative_url
过滤器,以便我可以在我的代码中使用它?
事实证明,错误是由于缺少上下文变量引起的,必须由@context = context
它有效,如果它是这样格式化的:
module Jekyll
module Tags
class MyNewTag < Liquid::Block
include Jekyll::Filters::URLFilters
def initialize(tag_name, block_options, liquid_options)
super
@class = block_options.strip
end
def render(context)
context.stack do
context["class"] = @class
@content = super
@context = context
@path_js = relative_url("assets/custom.min.css")
@path_css = relative_url("assets/custom.min.js")
end
output = <<~EOS
<link rel="stylesheet" href="#{@path_js}">
<script src="#{@path_css}"></script>
EOS
end
end
end
end
Liquid::Template.register_tag('MyNewTag', Jekyll::Tags::MyNewTag)