RSS×NewsListingの改造メモ
2006.10.16 Mon/PM
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+]~]</link>'."\n".
' <description><![CDATA[ [+description+] ]]></description>'."\n".
' <pubDate>[+rssdate+]</pubDate>'."\n".
' <guid>http://chibinowa.net/[~[+id+]~]</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'];
}
とりあえずこれで…。
