外部RSSを複数受信・表示する

PieXではブログタイトルがヘッダ部分にしか表示されなかったため
(レイアウトの問題で、 日付 記事タイトル(ブログタイトル) のように表示したかった)
却下せざるをえず。
 
こちらのサイトを参考に、スニペットを作ってみた。
今後もう少し手を入れる必要はあるが、現段階でのメモ。
 
必要なファイル
/rss_utils.inc
/rss_parse.inc
/rss_fetch.inc
/rss_cache.inc
/code_table.ucs2jis
/extlib
 
MagpieRSS入手先 http://magpierss.sourceforge.net/
(文字化け対策としてrss_parse.incだけver0.61のrss_parse.incで上書きしたモノを設置。上書きしなくても大丈夫かはまだ未確認)
 
rss_utils.incなどはmanager/media/の中にあるようなので、そちらを使うように設定しなおしたほうがいい気がする。

とりあえず上記ファイルを/assets/snippets/rssrssにアップロード。
スニペットの新規作成(スニペット名:rssrss)で

<?php
$rssrss_base = isset($rssrss_base) ? $modx->config['base_path'].$rssrss_base : $modx->config['base_path']."assets/snippets/rssrss/";

//まずMagpieRSSのモジュールを読み込む
require_once ($rssrss_base . 'rss_fetch.inc');
require_once ($rssrss_base . 'rss_utils.inc');
require_once ($rssrss_base . 'code_table.ucs2jis');

//次に読み込むRSSの配列を作成する
$mainrss = array ('http://www.xxx.com/rss' => 'XXX.com',
'http://d.hatena.ne.jp/m-mitsuki/rss' => '仕事備忘録',
);

//あとで使う配列を規定しておく
$rssarray = array();

//1970年1月1日からの秒数を今の時間で取得
$today = date(U);

//$mainrssを分解してURLと名前に分けて取り出す。このあたりは通常のMagpierssと変わらない。
foreach ($mainrss as $url=>$names){
$rss = fetch_rss($url);
$title = $rss->channel['title'];


foreach ($rss->items as $item ) {
$title = $item['title'];

$title = mb_convert_encoding($title,$modx->config["modx_charset"],"AUTO");

$urls = $item['link'];
//アイテムの日付を拾う、RSSによって変更する必要あり、if文が必要かも
$date = $item[pubdate];
//タイムスタンプを1970年1月1日からの秒数に変換
$timestamp = date("U",strtotime($date));
//ここは表示用の年月
$daytime = date("Y年m月d日",strtotime($date));
$youbi = array(0 => '(日)', 1 => '(月)', 2 => '(火)', 3 => '(水)', 4 => '(木)', 5 => '(金)', 6 => '(土)');
$youbi2 = date("w",strtotime($date));
//出力はここでタイムスタンプとセットで出力
$linkstr = "<tr><th align=\"left\" valign=\"top\"><span>$daytime $youbi[$youbi2]</span>$names</th><td align=\"left\" valign=\"top\"><a href=\"$urls\">$title</a></td></tr>\n";
//タイムスタンプで配列を作る。
$rssarray["{$timestamp}"] = $linkstr;
}
}
//タイムスタンプでkrsort (配列をキーで逆順にソートする)
krsort($rssarray);

//ここから出力
echo "<table cellspacing=\"0\" cellpadding=\"0\">\n";
//20個まで出力したら終了させる
for(reset($rssarray); $key=key($rssarray); next($rssarray)){
echo "$rssarray[$key]";
$count++;
if($count == 20){
break;
}
}
echo "</table>\n";
?>

を貼り付ける。
参考元との変更点は、文字コードの変換をforeach内で行っていること、ついでにJcodeConvertからmb_convert_encodingに変更したこと。
 
今後の課題としては、2つ目で読み込んでいるRSSが最新1件しか表示されないこと(必須)
できれば表示部分をチャンクに切り分けて、表示方法の変更が容易にできるようにすること。
不必要なファイルの削除。