RSS最終版

最終的に試行錯誤の結果、こういう形になりました。
スニペットコール

[!rssrss!]

スニペット

<?php
$rssCount = isset($rssCount) ? $rssCount : '20';
$rssTpl = isset ($rssTpl) ? $modx->getChunk($rssTpl) :
'<ul>
<!-- start -->
<li><a href="[+rsslink+]">[+rsstitle+]</a>([+rssdate+] / [+blogtitle+])</li>
<!-- end -->
</ul>
';

define('MAGPIE_OUTPUT_ENCODING', 'UTF-8'); //文字コード化け対策

$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');

//次に読み込むRSSの配列を作成する
$mainrss = array ('http://www.xxx.net/rss.xml' => 'BLOG 1',
'http://www.yyy.com/rss.rdf' => 'ブログ2'
);

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

$rssNum = 0;

$output = "";

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

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

	foreach ($rss->items as $item ) {
		$title = $item['title'];
		$urls = $item['link'];
//アイテムの日付を拾う、RSSによって変更する必要あり、if文が必要かも
		$date_timestamp = $item[date_timestamp];
		if ($date_timestamp) {
		  $date = Date("Y年m月d日",$date_timestamp);
		} else {
		  $date_timestamp = strtotime($item[pubdate]);
		  $date = Date("Y年m月d日",$date_timestamp);
		}

//出力はここでタイムスタンプとセットで出力
		$title = mb_convert_encoding($title,$modx->config["modx_charset"],"AUTO");

		if($title == preg_match("/^PR:/",$title)){
		  $rsslineItem[$rssNum]['timestamp'] = $date_timestamp;
		  $rsslineItem[$rssNum]['rssdate'] = $date;
		  $rsslineItem[$rssNum]['blogtitle'] = $names;
		  $rsslineItem[$rssNum]['rsslink'] = $urls;
		  $rsslineItem[$rssNum]['rsstitle'] = $title;
		  $rsslineItem[$rssNum]['bloglink'] = $bloglink;

		  $rssNum += 1;
		}
	}
}

if (count($rsslineItem) > 0) {
	$tpl = str_replace("<!-- start -->","\0",$rssTpl);
	$tpl = str_replace("<!-- end -->","\0",$tpl);
	$parts = explode("\0",$tpl);
	if (count($parts) != 3) {
		return "Template Error";
	}

	$frame = $parts[0];

	foreach ($rsslineItem as $key1 => $val1) {
		$tmp_data = $parts[1];
		foreach ($val1 as $key2 => $val2) {
			$tmp_data = str_replace("[+".$key2."+]",$val2,$tmp_data);

		}
//タイムスタンプで配列を作る。
		$rsslines["{$val1['timestamp']}"] = $tmp_data;
	}

//タイムスタンプでkrsort (配列をキーで逆順にソートする)
	krsort($rsslines);

	$count = "0";

	for(reset($rsslines); $key=key($rsslines); next($rsslines)){
		$frame .= $rsslines[$key];
		$count++;
		if($count == $rssCount){
			break;
		}
	}

	$frame .= $parts[2];

	$output .= $frame;
}

return $output;
?>

 
テンプレートはチャンクで。

<table>
<!-- start -->
<tr>
  <th>[+rssdate+]</th>
  <td><a href="[+bloglink+]">[+blogtitle+]</a></td>
  <td><a href="[+rsslink+]">[+rsstitle+]</a></td>
</tr>
<!-- end -->
</table>

 
以下パラメータ。
rssCount
表示する記事件数。デフォルトは20。
rssTpl
出力するテンプレート(チャンク名)。指定されていない場合は、リスト形式で出力される。
 
以下テンプレートのプレースホルダ
rssdate
日付。Y年m月d日の形式で出力される。
形式を変更できるようにしたほうがいいか?
blogtitle
ブログのタイトル。
bloglink
ブログトップへのリンク。
rsslink
記事へのリンク。
rsstitle
記事タイトル。
 
今後手を加えるとしたら、記事の日付形式をパラメータで指定できるようにする、ですかね。とりあえずはこれでいったんは完成。