扩展Jekyll和Liquid以解析帖子的内容

时间:2010-06-14 11:03:31

标签: liquid jekyll jekyll-extensions

我的博客由Jekyll提供支持,提供Atom Feed。

---
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>

我会在jekyllliquid中对此进行编码,如何解决仅更改指向“/ ”的 href 值的问题而不是“http://otherdomain.com/ ”?

谢谢

2 个答案:

答案 0 :(得分:3)

  

我在哪里用jekyll或液体编码?

在最近发布的Jekyll 0.6.0中,您可以创建自己的插件,包括Liquid标签插件。您可以查看Jekyll plugin文档了解更多信息,但这是您最好的选择。

  

如何解决仅更改指向“/”而非“http://otherdomain.com/”的href值的问题?

似乎很容易。在自定义Liquid标签中,检查第一个字符是否为'/';如果是,则添加新域名。您可以使用Ruby HTML解析器查找<a>的所有实例,然后根据需要更改href属性。

答案 1 :(得分:1)

我在the feed of my blog遇到了同样的问题,我设法在不使用插件的情况下解决了这个问题,即只使用了香草液体。

my Atom XML file中,我的内容填充如下:

<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>

...我在my config file中有这些变量:

# 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/

换句话说,我只做两个ordinary string replaces,一个用于链接,一个用于图像。

诀窍是:
在这两种情况下,我都会将href="/替换为href="http://christianspecht.de/,因此只有开始/的链接才会受到影响。