Жидкие шаблоны получают токены в пользовательском блоке

Я пытаюсь создать пользовательский блок с помощью жидких шаблонов. Ниже приведен мой код:

module MyModule
    module Blocks
        class MyBlock < Liquid::Block

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

            def render(context)
                p @tokens
            end

        end
    end
end

Liquid::Template.register_tag('myblock', MyModule::Blocks::MyBlock)

И в моем шаблоне у меня есть следующий код:

{% for i in mypages %}
    {% myblock %} {{ i.title }} {% endmyblock %}
{% endfor %}

Мой вопрос в том, как мне получить весь контент, который передается между тегами myblock. то есть, как мне сделать i.title доступным для myblock функции render. Я думал, что tokens записывает это, но когда я puts tokens выводит []

Благодарю вас


person swaroopsm    schedule 23.10.2013    source источник
comment
У меня нет ответа здесь, но с точки зрения его отладки извлеките {% myblock %}.... из цикла for и поместите его прямо в сообщение/страницу со статическим значением: {% myblock %} this is my block {% endmyblock %} . Таким образом, вы точно знаете, чего следует ожидать.   -  person tamouse    schedule 28.10.2013


Ответы (1)


Метод render из Liquid::Block возвращает текст между начальным и конечным тегами. Так что просто измените метод рендеринга на это:

def render(context)
  p super
end
person Nathan Grigg    schedule 09.11.2013