Расширение возможностей Jekyll и Liquid для анализа содержимого сообщений

Мой блог, созданный Jekyll, предоставляет канал Atom.

---
layout: nill
rooturi: http://stefan.artspace44.com
---

<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

...

{% for post in site.posts %}
  <entry>
    <title>{{ post.title }}</title>
    <link href="{{ page.rooturi }}{{ post.url }}" />
    <updated>{{post.date | date_to_xmlschema }}</updated>
    <id>{{ page.rooturi }}{{ post.id }}</id>
    <content type="html">{{ post.content | xml_escape }}</content>
  </entry>
 {% endfor %}
</feed>

Мне нужно изменить содержание каждого сообщения, чтобы

<img href="/images/01.jpg" />
<a href="/2010/post/">Post</a>

становится:

<img href="http://stefan.artspace44.com/images/01.jpg" />
<a href="http://stefan.artspace44.com/2010/post/">Post</a>

Я думал сделать что-то вроде

<content type='html'>
  {{ post.content | make_hrefs_base page.rooturi }}
</content>

Где бы я закодировал это в jekyll или liquid, и как решить проблему изменения только тех значений href, которые указывают на "/", а не на "http://otherdomain.com/"?

Спасибо


person Stefan    schedule 14.06.2010    source источник


Ответы (2)


Где бы я закодировал это в jekyll или жидкости?

В недавно выпущенном Jekyll 0.6.0 вы можете создавать свои собственные плагины, в том числе плагины тегов Liquid. Дополнительную информацию можно найти в документации по плагину Jekyll, держать пари.

Как решить проблему изменения только тех значений href, которые указывают на "/", а не на "http://otherdomain.com/ "?

Кажется довольно легким. В вашем пользовательском теге Liquid проверьте, является ли первый символ «/»; если это так, то добавьте свой новый домен. Возможно, вы могли бы использовать парсер Ruby HTML, чтобы найти все экземпляры <a>, а затем соответствующим образом изменить атрибуты href.

person mipadi    schedule 29.06.2010

У меня была такая же проблема в ленте моего блога, и мне удалось решить ее без с помощью плагина, т.е. только с vanilla Liquid.

В мой XML-файл Atom , мой контент заполняется следующим образом:

<content type="html">
    {{ post.content | replace: site.feed_linkurl_find, site.feed_linkurl_replace | replace: site.feed_imgurl_find, site.feed_imgurl_replace | xml_escape }}
</content>

... и у меня есть эти переменные в моем файле конфигурации:

# URL replacements for feeds
feed_linkurl_find: href="/
feed_linkurl_replace: href="http://christianspecht.de/
feed_imgurl_find: src="/
feed_imgurl_replace: src="http://christianspecht.de/

Другими словами, я просто делаю две замены обычных строк , один для ссылок и один для изображений.

Хитрость заключается в следующем:
в обоих случаях я заменяю href="/ на href="http://christianspecht.de/, поэтому затрагиваются только те ссылки, которые фактически начинаются с /.

person Christian Specht    schedule 23.06.2015