Расширение Jekyll and Liquid для анализа содержимого сообщения - PullRequest
2 голосов
/ 14 июня 2010

Мой блог, поддерживаемый 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/"?

Спасибо

Ответы [ 2 ]

3 голосов
/ 29 июня 2010

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

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

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

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

1 голос
/ 24 июня 2015

У меня была такая же проблема в ленте моего блога , и мне удалось решить ее без использования плагина, то есть только с 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/, поэтому затрагиваются только те ссылки, которые на самом деле начинаются с /.

...