Liquid - парсить переднюю часть YAML в строке

Я использую сайт Jekyll, который использует JSON в качестве данных в моей папке _data. Я просматриваю файл, как обычно, и делаю такие вещи, как {% for item in site.data.resources.items %}, просто отлично. Однако я хотел бы разобрать вступительную часть YAML, которая находится внутри строки.

Пример:

\n---\nblog: http://google.com\nbackground-img: http://www.ew.com/sites/default/files/i/2013/07/23/Dumb-and-Dumber.jpg\nbuttonText: Download\n---\n

Как я могу заставить Liquid проанализировать это на моем сайте Jekyll, чтобы я мог использовать его так:

<a href="{{blog}}"><img src="{{background-img}}>Image</a>

или что-то подобное?

РЕДАКТИРОВАТЬ: Чтобы уточнить, эта строка находится в формате основного материала в текстовом файле, который я получаю с помощью вызова ajax. Итак, эта строка - это ответ, который я получаю, и формат не изменится. Я надеялся, что Liquid сможет каким-то образом проанализировать эту строку и найти формат типа основного материала. Если нет, я верну свои методы JavaScript.


person chris_s    schedule 21.11.2016    source источник
comment
Вы спрашиваете, как использовать yaml-файл для выбора элементов данных?   -  person TBB    schedule 22.11.2016
comment
Я не разработчик, но есть ли пары "ключ-значение" background-img и buttonText элемента blog в этой структуре? Если так, возможно, что-то вроде вступительной статьи item: blog и в содержании <a href="{{ site.data.resources.items.[page.item] }}"><img src="{{site.data.resources.items.[page.item].background-img}}>Image</a>. Это то, что вы имели ввиду?   -  person TBB    schedule 22.11.2016
comment
Как именно выглядит ваш фронтмэттер? Эта длинная строка на самом деле является ценностью в вашем фронтмене? Будет ли работать оператор contains? например, {%, если page.url содержит nbackground-img%} background-img {% endif%}. Непонятно, в чем именно заключается ваша установка.   -  person Tom Johnson    schedule 22.11.2016
comment
@TomJohnson, чтобы уточнить, что эта строка является форматом основного материала в текстовом файле, который я получаю с помощью вызова ajax. Итак, эта строка - это ответ, который я получаю, и формат не изменится. Я надеялся, что Liquid сможет каким-то образом проанализировать эту строку и найти формат типа основного материала. Если нет, я верну свои методы JavaScript.   -  person chris_s    schedule 22.11.2016
comment
@TBB нет, это не дочерние k-v пары. Я не форматировал это, потому что это просто строка, и именно так в моем файле JSON.   -  person chris_s    schedule 22.11.2016


Ответы (1)


Это невозможно.

Liquid / YML анализируется при создании сайта, и ваша строка JSON становится доступной спустя долгое время после создания сайта: она существует только после того, как запрос JSON для строки был успешным.

Однако вы можете использовать javascript, как вы уже упоминали. Просто разделите строку на \n для пар "ключ-значение" и разделите на : для ключа и значения. Затем используйте jQuery (или простой javascript) для записи результатов в DOM.

Удачи!

person JoostS    schedule 22.11.2016
comment
Я использую задачу Gulp, чтобы сначала получить эти данные, затем сохраняю их в файле json в моей папке _data, а затем запускаю команду сборки. Так что технически это есть. Думаю, я надеялся, что есть способ сделать это из Liquid, но я начинаю понимать, что это просто невозможно. Вернемся к доске с множеством способов решить эту проблему. - person chris_s; 22.11.2016