21

Liquidでカスタムリンクタグを作成し、そのタグの呼び出しに液体変数を渡すことができるようにしようとしています。

{{ assign id = 'something' }} // this value is actual dynamic while looping through data 
{% link_to article: id, text: 'Click Me!' %} // my custom tag

ただし、これにより、記事パラメータは、その上のassignステートメントのように「something」ではなく「id」として渡されます。

タグ呼び出しに変数を渡す方法を知っている人はいますか?

4

5 に答える 5

10

最近、Jekyll 0.11.2 と Liquid 2.3.0 で、変数の名前をタグ パラメータとして渡すことで、これを非常に簡単に解決しました。

{% assign v = 'art' %}
{% link_to_article v %}

上記のように、ループ中に制御変数の名前を渡すこともできますarticle

ではLiquid::Tag.initialize@markupは 2 番目のパラメータで、タグ名に続く文字列です。割り当てられた変数は、 のトップ レベルで使用できますcontext

def render(context)
  "/#{context[@markup.strip]}/"
end

これにより、明らかに 1 つのパラメーターのみを渡すことができます。より複雑なソリューションは、のようなパラメーターを解析しx: 2, y: 3ます。

于 2012-08-12T15:01:39.023 に答える
8

これで問題は解決しましたcontext[@markup.strip]

私の問題は、次のように変数をカスタム Liquid タグに渡すことができるようにしたかったことです。{% get_menu main_menu navigation.html settings.theme.id %}

これを行うには、最初に変数文字列をすべてのスペース文字で異なる変数に分割します。

class GetMenu < Liquid::Tag
    include ApplicationHelper
    def initialize(tag_name, variables, tokens)

        @variables = variables.split(" ")

        @menu_object = @variables[0]
        @file_name = @variables[1]
        @theme_id = @variables[2]

        super
    end

    def render(context)

        # This is where i use context[@theme_id.strip] to get the variable of "settings.theme.id"
        content = CodeFile.find_by(hierarchy: 'snippet', name: @file_name.to_s, theme_id: context[@theme_id.strip])

        @menu ||= Menu.find_by_slug(@menu_object)

        context.merge('menu' => @menu)

        Liquid::Template.parse(content.code).render(context)

    end

end

Liquid::Template.register_tag('get_menu', GetMenu)

*これは、Jonathan Julian による上記の回答よりも豊富な例です。

于 2014-04-14T17:31:58.790 に答える
7

これが可能なようには見えません。私の解決策は、変数名をタグに渡し、タグがレンダリングされているコンテキストからそれを取得することでした。

{% for article in category.articles %}
  {% link_to variable: article, text: title %}
{% endfor %}

私のタグコード(要約):

def render(context)
  uri = "article/#{context[@options[:variable]]['id']}"
  "<a href='#{uri}'>#{build_link_text context}</a>"
end
于 2011-10-28T17:00:53.460 に答える