RSS最終版・改

タイトル部分が半角英数字から始まった場合、広告と同じように蹴られるという事態が発生。
まぁ、基本的に正規表現とかよくわかんないままだし。
ということで、ちょっと改造しました。

<?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 == mb_ereg_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;
?>

PR以降はマルチバイト文字列なんだから、やっぱそっちにしないとダメだったということですかね。
それにしては、半角数字から始まると弾かれる理由がわかりませんが。

あとで、「広告」から始まるのも同じように除外するようにしないとなー。