Picoの改造 その1 RSSフィードの改造

作成日:2015/07/03
最終更新日:2020/07/05

Picoの改造 その1 RSSフィードの改造

作成日:2015/07/03
最終更新日:2020/07/05

概要

前回PicoでRSSフィードを配信できるようにしました。

しかし、Pico-RSS-Pluginを利用した場合、本文がすべて出力されます。

そこで、概要のみ出力するように修正しました。

修正内容

以下のファイルを修正します。

  • lib/pico.php
  • plugin/pico_rss/rss.html

lib/pico.php

PicoはテンプレートエンジンとしてTwigを採用しています。 各ページの本文は {{ content }} として呼び出されます。 この、contentは lib/pico.phpで生成されます。

{{ summary }}表記した場合に、{{ content }}の中の概要の節のみ出力されるよう修正します。 コンストラクタの中で生成されているので、適当な箇所に追記します。

ソース1. pico.phpの__construct()の修正
$prev_page = next($pages);
prev($pages);
$next_page = prev($pages);
$this->run_hooks('get_pages', array(&$pages, &$current_page, &$prev_page, &$next_page));

// ここから
$summary = "";
$tmp_front = mb_split("<h2>", $content);
for ($i = 0; $i < count($tmp_front); $i += 1) {
        $tmp = mb_split("</h2>", $tmp_front[$i]);
    if (strcmp($tmp[0], "概要") == 0) {
        $summary = "<h2>" . $tmp[0] . "</h2>" . $tmp[1];
    }
}
// ここまで

// Load the theme
$this->run_hooks('before_twig_register');
Twig_Autoloader::register();
$loader = new Twig_Loader_Filesystem(THEMES_DIR . $settings['theme']);

同様にページのリストからもsummaryを読み出せるようにget_pages()を修正します。

ソース2. pico.phpのget_pages()の修正
// Get title and format $page
$page_content = file_get_contents($page);
$page_meta = $this->read_file_meta($page_content);
$page_content = $this->parse_content($page_content);
// ここから
$tmp_front = mb_split("<h2>", $page_content);
$page_summary = "";
for ($i = 0; $i < count($tmp_front); $i += 1) {
        $tmp = mb_split("</h2>", $tmp_front[$i]);
    if (strcmp($tmp[0], "概要") == 0) {
        $page_summary = "<h2>" . $tmp[0] . "</h2>" . $tmp[1];
    }
}
// ここまで

$url = str_replace(CONTENT_DIR, $base_url .'/', $page);
$url = str_replace('index'. CONTENT_EXT, '', $url);
$url = str_replace(CONTENT_EXT, '', $url);

plugin/pico_rss/rss.html

page.content となっている箇所を page.summaryに書き換えます

ソース3. rss.htmlの修正
<description><![CDATA[{{ page.summary }}]]></description>

結果

Twigで呼び出せる変数の追加方法が判りました。 徐々に機能を足していきたいと考えています。