开发者

How to pass a variable into a custom tag in Liquid?

开发者 https://www.devze.com 2023-04-10 18:12 出处:网络
I have written a custom tag in liquid, and I\'d like to pass a variable to it. Liquid tags will turn any parameter into a string.

I have written a custom tag in liquid, and I'd like to pass a variable to it. Liquid tags will turn any parameter into a string.

For example:

{% n开发者_开发知识库av page /some/url.html %}

Where page is a variable.

Is there a way to get Liquid to treat page as a variable and not a string?

Thanks in advance!


If you are using Jekyll specifically, you can access the page variable this way:

def render(context)
  page_url = context.environments.first["page"]["url"]


I had a similar problem. I solved it by creating a custom lookup method:

def look_up(context, name)
  lookup = context

  name.split(".").each do |value|
    lookup = lookup[value]
  end

  lookup
end

To use it, create something like this:

def initialize(tag_name, markup, tokens)
  @markup = markup
  super
end

def render(context)
  output = super
  if @markup =~ /([\w]+(\.[\w]+)*)/i
    @myvalue = look_up(context, $1)
  end

  do_something_with(@myvalue)
end 


To answer the general question and not the part specifically about the page variable, you can also pass the contents of the tag through the Liquid parser again:

def initialize(tag_name, markup, tokens)
  @markup = markup
  super
end

def render(context)
  content = Liquid::Template.parse(@markup).render context
end
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号