【a-blog cms】Entry_Bodyで作成するrss2.xml

CMS

出力前のテンプレート

テーマフォルダの中にあるsystemフォルダの中の「rss2.xml」を元にEntry_Body仕様に変更していきます。 下記のテンプレートを使用するテーマの直下に置いてください。

system/rss2.xml

<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2001/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0" xml:lang="ja"><!-- BEGIN_MODULE Feed_Rss2 -->
	<channel>
		<title>%{BLOG_NAME}<!-- BEGIN_MODULE Touch_Category --> - %{CATEGORY_NAME}<!-- END_MODULE Touch_Category --></title>
		<link>%{BASE_URL}</link>
		<atom:link href="%{INHERLINK}" rel="self" type="application/rss+xml" />
		<description>%{META_DESCRIPTION}</description>
		<language>ja</language>
		<copyright>Copyright (C) %{Y} %{BLOG_NAME} All rights reserved.</copyright>
		<lastBuildDate>{lastBuildDate}</lastBuildDate>
		<generator>a-blog cms</generator>
		<docs>http://blogs.law.harvard.edu/tech/rss</docs><!-- BEGIN item:loop -->
		<item>
			<dc:creator>{creator}</dc:creator>
			<title>{title}</title>
			<link>{link}</link>
			<description><![CDATA[
				<!--#include file="/include/unit.html" -->
			]]></description><!-- BEGIN category:veil -->
			<category>{category}</category><!-- END category:veil -->
			<guid isPermaLink="true">{permalink}</guid>
			<pubDate>{pubDate}</pubDate>
		</item><!-- END item:loop -->
	</channel><!-- END_MODULE Feed_Rss2 -->
</rss>

出力結果の例

<rss xmlns:atom="http://www.w3.org/2001/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0" xml:lang="ja">
<channel>
<title>木々録</title>
<link>//kigiroku.com/</link>
<atom:link href="//kigiroku.com/rss2.xml" rel="self" type="application/rss+xml"/>
<description/>
<language>ja</language>
<copyright>Copyright (C) 2017 木々録 All rights reserved.</copyright>
<lastBuildDate>Thu, 13 Apr 2017 13:05:17 +0900</lastBuildDate>
<generator>a-blog cms</generator>
<docs>http://blogs.law.harvard.edu/tech/rss</docs>
<item>
<dc:creator>miki hayashida</dc:creator>
<title>jQueryでinputからリアルタイムで取得する</title>
<link>//kigiroku.com/frontend/jquery-input-val.html</link>
<description>
<![CDATA[
~~~~~~~~~~~~略~~~~~~~~~~~~
]]>
</description>
<category>フロントエンド</category>
<guid isPermaLink="true">//kigiroku.com/frontend/jquery-input-val.html</guid>
<pubDate>Thu, 06 Apr 2017 13:24:54 +0900</pubDate>
</item>
</channel>
</rss>

Entry_Bodyに変更する

モジュールIDの作成

rss2.xmlを変更して行きます。Entry_Bodyで作るので汎用性を高めるためにまずはモジュールIDを作成し、カテゴリーのカスタムフィールドを出せるように設定をしておきます。英語対応などをする際に使えます。


画像を例にモジュールIDを作成してください。 今回は英語の情報を出す例を紹介するので、カテゴリーや、エントリーに必要な下記のカスタムフィールドを作ったと仮定したソースに変更していきます。

title_en英語タイトル用
category_en英語カテゴリー用
name_enユーザーの英語名用
blog_description_enブログのdescription英語用
titleTag_enブログ名の英語用

カスタムフィールド部分の変更

まずは上記のカスタムフィールドの部分を変更していきます。

<title><!-- BEGIN_MODULE Blog_Field -->{titleTag_en}<!-- END_MODULE Blog_Field --><!-- BEGIN_MODULE Touch_Category --> - {categoryName_en}<!-- END_MODULE Touch_Category --><!-- BEGIN_MODULE User_Field -->{name_en}<!-- END_MODULE User_Field --></title>
<description><!-- BEGIN_MODULE Blog_Field -->{blog_description_en}<!-- END_MODULE Blog_Field --></description>
<language>en</language>
<copyright>Copyright (C) %{Y} <!-- BEGIN_MODULE Blog_Field -->{titleTag_en}<!-- END_MODULE Blog_Field --> All rights reserved.</copyright>
<!-- BEGIN userField --><dc:creator>{name_en}</dc:creator><!-- END userField -->
<title>{title_en}</title>
<!-- BEGIN category:veil --><!-- BEGIN categoryField --><category>{categoryName_en}</category><!-- END categoryField --><!-- END category:veil -->

entry:loopの記述、Entry_Bodyの関数へ変更

item ~ /item の外に entry:loop を記述します。
<!-- BEGIN entry:loop -->
<item>
~~~~~~~~~~~~~略~~~~~~~~~~~~~
</item>
<!-- END entry:loop -->

エントリーのリンクは

<link>{titleUrl}</link>

に変更します。{ url }は使用できませんので注意。

日付の変更

pubDateはEntry_Bodyの変数を元に下記のように変更します。

<pubDate>{date#r}</pubDate>

lastBuildDateについてはa-blog cmsのグローバル変数ではphpのdate関数が使用できるので、RFC 2822 フォーマットされた日付[r]を使用します。

<lastBuildDate>%{r}</lastBuildDate>

以上で変更は終わりです。今回は全てカスタムフィールドという仮定で変更しましたが、実際はrssの出力結果と同じように出力されるように必要な部分のみ変更すればOKです。

変更後のソース

変更後のrss2.xml

<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2001/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0" xml:lang="ja"><!-- BEGIN_MODULE Entry_Body id="RSS" -->
	<channel>
		<title><!-- BEGIN_MODULE Blog_Field -->{titleTag_en}<!-- END_MODULE Blog_Field --><!-- BEGIN_MODULE Touch_Category --> - {categoryName_en}<!-- END_MODULE Touch_Category --><!-- BEGIN_MODULE User_Field -->{name_en}<!-- END_MODULE User_Field --></title>
		<link>%{BASE_URL}</link>
		<atom:link href="%{INHERLINK}" rel="self" type="application/rss+xml" />
		<description><!-- BEGIN_MODULE Blog_Field -->{blog_description_en}<!-- END_MODULE Blog_Field --></description>
		<language>en</language>
		<copyright>Copyright (C) %{Y} <!-- BEGIN_MODULE Blog_Field -->{titleTag_en}<!-- END_MODULE Blog_Field --> All rights reserved.</copyright>
		<lastBuildDate>%{r}</lastBuildDate>
		<generator>a-blog cms</generator>
		<docs>http://blogs.law.harvard.edu/tech/rss</docs>
		<!-- BEGIN entry:loop -->
		<item>
			<!-- BEGIN userField --><dc:creator>{name_en}</dc:creator><!-- END userField -->
			<title>{title_en}</title>
			<link>{titleUrl}</link>
			<description>
			<![CDATA[
				<!--#include file="/include/unit.html" -->
			]]></description>
			<!-- BEGIN category:veil --><!-- BEGIN categoryField --><category>{categoryName_en}</category><!-- END categoryField --><!-- END category:veil -->
			<guid isPermaLink="true">{permalink}</guid>
			<pubDate>{date#r}</pubDate>
		</item><!-- END entry:loop -->
	</channel><!-- END_MODULE Entry_Body -->
</rss>

Entry_BodyでRSSを書いても特に問題は何もないので、カスタムフィールドを出力したい時にはEntry_Bodyを使うのも1つの手です。 (ほとんどの場合はFeed_Rss2モジュールで足りますが.....。)


この記事の読んだ方におすすめ