index » ラボ&備忘録 » MODx » memo » NewsListingでRSSを・・・ このエントリーを含むはてなブックマーク

RSS×NewsListingの改造メモ

2006.10.16

NewsListing6.4.2でRSSを吐いているんですが、若干修正したのでメモ。

プレースホルダを追加・修正

descriptionの内容がsummaryになってるんですが、本文が使用されて冗長になるので、説明もしくは要約を使うように修正。 リンクや画像の呼び出しにホスト名を付けていない為、全部デッドリンクになるしね…。
プレースホルダに[+description+]を追加。
他でNewsListingを使うこともあると思うので、summary自体は弄らずRSS出力周りだけを修正。

[snippet] NewsListing:230

///// edited
$tpl = '		<item>'."\n".
	'			<title>[+rsspagetitle+]</title>'."\n".
	'			<link>[(site_url)][+id+].html</link>'."\n".
	'			<description><![CDATA[ [+description+] ]]></description>'."\n".
	'			<pubDate>[+rssdate+]</pubDate>'."\n".
	'			<guid>http://chibinowa.net/[+id+].html</guid>'."\n".
	'			<author>[+rssusername+]</author>'."\n".
	'			</item>'."\n";

[+rsspagetitle+]は、長いタイトルがある場合長いタイトルを使用し、ない場合はページタイトルを使うように。
[+description+]は、序文がある場合は序文を使用し、ない場合は説明文を使うように。
「rsspagetitle」を変えたのは、うちのサイトの場合「タイトル」が『設置方法』だけだったりして、これだけを見ると何の設置方法なのか分かりません。
「長いタイトル」の方には『phpExit 設置方法』など書くようにしているのでこちらを優先して使うようにします。
「タイトル」の方にこう書かないのは、パンくずエディタの表示で「script > phpexit > phpexit設置方法」と重なってしまう為です。

また、htmlentitiesだと「×」等の一部の文字を使った際にパースエラーが起きるので、htmlspecialcharsに変更しました。

[snippet] NewsListing:532

if($format == "rss") {
	$placeholders['[+rssdate+]'] =  date("r", $resource[$x][$datetype]);
	//$placeholders['[+rsspagetitle+]'] = htmlentities($resource[$x]['pagetitle'], ENT_QUOTES, $modx->config['etomite_charset']);
	$placeholders['[+rsspagetitle+]'] = htmlentities(strlen($resource[$x]['longtitle']) > 0 ? $resource[$x]['longtitle'] : $resource[$x]['pagetitle'], ENT_QUOTES, $modx->config['etomite_charset']);
	$placeholders['[+description+]'] = strlen($resource[$x]['introtext']) > 0 ? $resource[$x]['introtext'] : $resource[$x]['description'];
	$placeholders['[+rssusername+]'] = htmlentities($author, ENT_QUOTES, $modx->config['etomite_charset']);
}

スパムが来そうなのでAuthorにE-Mailを載せないように…

assets/snippets/newslisting/functions.php:32-51

if($limit2<1) { 
	// get admin user name
	$btbl = $modx->getFullTableName("user_attributes");
	$bsql = "SELECT fullname, email  FROM $btbl WHERE $btbl.id = '1'"; 
	$brs = $modx->dbQuery($bsql);
	$blimit = $modx->recordCount($brs);
	$bdsuser = $modx->fetchRow($brs); 
	///// edited
	//$rssusername = "".$bdsuser['fullname']." <".$bdsuser['email'].">";
	$rssusername = "".$bdsuser['fullname'];
	$username = $bdsuser['fullname'];
} else { 
	$resourceuser = $modx->fetchRow($rs2); 
	if ($resourceuser['fullname'] != "") {
		$username = $resourceuser['fullname']; 
	}else{
		$cbrs = $modx->dbQuery($sql2);
		$cblimit = $modx->recordCount($cbrs); 	
		$cbuser = $modx->fetchRow($cbrs); 
		$username = $cbuser['username']; 
	}
	///// edited
	//$rssusername = "".$resourceuser['fullname']." <".$resourceuser['email'].">";
	$rssusername = "".$resourceuser['fullname'];
}

とりあえずこれで…。