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

后端 未结 3 1620
独厮守ぢ
独厮守ぢ 2021-02-19 11:25

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:

{% nav pag         


        
相关标签:
3条回答
  • 2021-02-19 11:50

    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 
    
    0 讨论(0)
  • 2021-02-19 12:04

    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 讨论(0)
  • 2021-02-19 12:15

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

    def render(context)
      page_url = context.environments.first["page"]["url"]
    
    0 讨论(0)
提交回复
热议问题