<div id="main"><article class="hentry" role="article"><div class="entry-content"> <p>给博文加入原文链接的作用不消多说。由于在网上找的到诸篇文章或年久有变,或有重要的错误,因此自己总结记录一下,以作备忘。</p>
<!-- more -->
<ul id="markdown-toc"> <li><a href="#postfooterfilterrb">增加post_footer_filter.rb插件</a></li> <li><a href="#section">对显示信息的定制</a></li> <li><a href="#section-1">将链接信息与文章内容区分出来</a></li> <li><a href="#section-2">相关文章</a></li> </ul>
<h2 id="postfooterfilterrb">增加post_footer_filter.rb插件</h2>
<p>此部分网上有多个内容相同的博文,但按其中内容增加插件后,在执行rake generate时会出现类似post_filters插件不存在之类的错误。</p>
<p>检查了一下,2.0版本的octopress中没有post_filters.rb这个插件,因此需要对插件进行修改。最终在疑似插件首发引用者的github中找到了一个更新的插件,内容如下:</p>
<div class="bogus-wrapper"><notextile><figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr> <td class="gutter"><pre class="line-numbers"><span class="line-number">1</span> <span class="line-number">2</span> <span class="line-number">3</span> <span class="line-number">4</span> <span class="line-number">5</span> <span class="line-number">6</span> <span class="line-number">7</span> <span class="line-number">8</span> <span class="line-number">9</span> <span class="line-number">10</span> <span class="line-number">11</span> <span class="line-number">12</span> <span class="line-number">13</span> <span class="line-number">14</span> <span class="line-number">15</span> <span class="line-number">16</span> <span class="line-number">17</span> <span class="line-number">18</span> <span class="line-number">19</span> <span class="line-number">20</span> <span class="line-number">21</span> <span class="line-number">22</span> <span class="line-number">23</span> </pre></td> <td class="code"><pre><code class="ruby"><span class="line"><span class="c1">#</span> </span><span class="line"><span class="c1"># post_footer_filter.rb</span> </span><span class="line"><span class="c1"># Append every post some footer infomation like original url</span> </span><span class="line"><span class="c1"># Kevin Lynx</span> </span><span class="line"><span class="c1"># 09.01.2014</span> </span><span class="line"><span class="c1">#</span> </span><span class="line"><span class="nb">require</span> <span class="s1">'octopress-hooks'</span> </span><span class="line"><span class="k">module</span> <span class="nn">AppendFooterFilter</span> </span><span class="line"><span class="k">def</span> <span class="nc">self</span><span class="o">.</span><span class="nf">append</span><span class="p">(</span><span class="n">post</span><span class="p">)</span> </span><span class="line"><span class="n">author</span> <span class="o">=</span> <span class="n">post</span><span class="o">.</span><span class="n">site</span><span class="o">.</span><span class="n">config</span><span class="o">[</span><span class="s1">'author'</span><span class="o">]</span> </span><span class="line"><span class="n">url</span> <span class="o">=</span> <span class="n">post</span><span class="o">.</span><span class="n">site</span><span class="o">.</span><span class="n">config</span><span class="o">[</span><span class="s1">'url'</span><span class="o">]</span> </span><span class="line"><span class="n">pre</span> <span class="o">=</span> <span class="n">post</span><span class="o">.</span><span class="n">site</span><span class="o">.</span><span class="n">config</span><span class="o">[</span><span class="s1">'original_url_pre'</span><span class="o">]</span> </span><span class="line"><span class="n">post</span><span class="o">.</span><span class="n">content</span> <span class="o">+</span> <span class="sx">%Q[<p class='post-footer'></span> </span><span class="line"><span class="si">#{</span><span class="n">pre</span> <span class="ow">or</span> <span class="s2">"original link:"</span><span class="si">}</span><span class="sx"></span> </span><span class="line"><span class="sx"><a href='</span><span class="si">#{</span><span class="n">post</span><span class="o">.</span><span class="n">full_url</span><span class="si">}</span><span class="sx">'></span><span class="si">#{</span><span class="n">post</span><span class="o">.</span><span class="n">full_url</span><span class="si">}</span><span class="sx"></a><br/></span> </span><span class="line"><span class="sx">written by <a href='</span><span class="si">#{</span><span class="n">url</span><span class="si">}</span><span class="sx">'></span><span class="si">#{</span><span class="n">author</span><span class="si">}</span><span class="sx"></a></span> </span><span class="line"><span class="sx">&nbsp;posted at <a href='</span><span class="si">#{</span><span class="n">url</span><span class="si">}</span><span class="sx">'></span><span class="si">#{</span><span class="n">url</span><span class="si">}</span><span class="sx"></a></span> </span><span class="line"><span class="sx"></p>]</span> </span><span class="line"><span class="k">end</span> </span><span class="line"><span class="k">class</span> <span class="nc">PostFilters</span> <span class="o"><</span> <span class="no">Octopress</span><span class="o">::</span><span class="no">Hooks</span><span class="o">::</span><span class="no">Post</span> </span><span class="line"><span class="k">def</span> <span class="nf">pre_render</span><span class="p">(</span><span class="n">post</span><span class="p">)</span> </span><span class="line"><span class="n">post</span><span class="o">.</span><span class="n">content</span> <span class="o">=</span> <span class="no">AppendFooterFilter</span><span class="o">::</span><span class="n">append</span><span class="p">(</span><span class="n">post</span><span class="p">)</span> </span><span class="line"><span class="k">end</span> </span></code></pre></td> </tr></table></div></figure></notextile></div>
<p>复制时没有加缩进,想看原版可以到此处:https://github.com/kevinlynx/codemacro-source/blob/master/plugins/post_footer_filter.rb</p>
<p>此后在文章结尾处就有了原文链接信息了</p>
<h2 id="section">对显示信息的定制</h2>
<p>从插件内容中可以看出,默认显示在链接之前的“original link:”可以通过original_url_pre参数指定。只需要在_config.yml中加入</p>
<pre><code>original_url_pre: "显示信息" </code></pre>
<p>从插件内容中可以看出,其它各项取自_config.yml已有的变量,因此可以通过自己定义变量或直接修改插件内容来改变显示信息。</p>
<p><em>注意:</em> 在<a href="http://codemacro.com/2012/07/26/post-footer-plugin-for-octopress/">为octopress每篇文章添加一个文章信息</a>一文中,误把original_url_pre写成了origional_url_pre,导致无法正确显示。</p>
<h2 id="section-1">将链接信息与文章内容区分出来</h2>
<p>默认状态下,加入的链接信息与文章内容在显示上无法区分。可以在sass/custom/_styles.scss中加入一行:</p>
<div class="bogus-wrapper"><notextile><figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr> <td class="gutter"><pre class="line-numbers"><span class="line-number">1</span> </pre></td> <td class="code"><pre><code class="scss"><span class="line"><span class="nc">.post-footer</span><span class="p">{</span><span class="na">margin-top</span><span class="o">:</span><span class="mi">10</span><span class="kt">px</span><span class="p">;</span><span class="na">padding</span><span class="o">:</span><span class="mi">5</span><span class="kt">px</span><span class="p">;</span><span class="nt">background</span><span class="nd">:none</span> <span class="nt">repeat</span> <span class="nt">scroll</span> <span class="nt">0pt</span> <span class="nt">0pt</span> <span class="nn">#eee</span><span class="o">;</span><span class="nt">font-size</span><span class="nd">:90</span><span class="err">%</span><span class="o">;</span><span class="nt">color</span><span class="nd">:gray</span><span class="p">}</span> </span></code></pre></td> </tr></table></div></figure></notextile></div>
<p><em>注意</em> 网上不止一处把文件名写成了_style.scss。很无语。</p>
<h2 id="section-2">相关文章</h2>
<p><a href="http://codemacro.com/2012/07/26/post-footer-plugin-for-octopress/">为octopress每篇文章添加一个文章信息</a>,其它文章都引用了它。</p>
<p>两个犯了同样错误的文章:</p>
<p>http://biaobiaoqi.github.io/blog/2013/07/10/decorate-octopress/</p>
<p>http://812lcl.com/blog/2013/10/26/octopressce-bian-lan-ji-ping-lun-xi-tong-ding-zhi/</p>
<p class="post-footer"> 原文链接地址: <a href="http://pangyi.github.io/blog/20150125/wei-octopresswen-zhang-jia-ru-yuan-wen-lian-jie/">http://pangyi.github.io/blog/20150125/wei-octopresswen-zhang-jia-ru-yuan-wen-lian-jie/</a><br> written by <a href="http://pangyi.github.io">PangYi</a> posted at <a href="http://pangyi.github.io">http://pangyi.github.io</a> </p> </div></article></div>