ラック
Home > CMS > 記事 > 2017年12月 > Feedlyにアイキャッチ画像を表示させる(不完全)

Feedlyにアイキャッチ画像を表示させる(不完全)

カテゴリ: MODx

Feedlyでアイキャッチ画像が表示されず、されたと思ったら本文中の画像だったりするので、どうにかならないものかと試してみました。

WordPressならばfunctions.phpに「RSSのdescriptionタグの中にアイキャッチ画像を挿入」するコードを書いて対処できるのですが、MODxの場合はDittoを使うのでさてどうしたものかと。

何とかならないものかと色々テキストを突っ込んでみたところ、どうやら「要約(序説)」、リソース変数でいうと[*introtext*]がRSSのdescriptionに吐き出されるようです(空欄の場合は本文から一部抜粋)。……ということは、「要約(序説)」に<p><img src="[*eyecatch*]" alt="[*pagetitle*]"></p><p>[*description*]</p>と入れてあげれば良い(eyecatchはテンプレート変数)のでは?と考えました。しかし、pagetitleは展開されますが、他のリソース変数・テンプレート変数が展開されないのでダメっぽいですね。まあ、DocumentObjectの中身はRSSフィードのリソースのものになっているはずですから、それはそうか。かといって[+pagetitle+]のようなプレースホルダでも結果は変わらず。

改めてDittoのソースを眺めてみると、RSSの場合は/formats/rss.format.inc.phpで処理をしていますね。その最後の方に

$tpl = isset($tpl) ? $tpl : "@CODE:".$rss_tpl;

とあるので、$tplをパラメータで渡してあげれば良さそうな感じがします。つまり、RSSではなく普通の記事一覧などを作る際のDittoと同じように、tpl = '@CODE: ...'の形式でテンプレートを渡してあげれば良さそうです。肝心の渡すパラメータは先ほどの/formats/rss.format.inc.phpにある


$rss_tpl = <<<TPL

		<item>
			<title>[+rss_pagetitle+]</title>
			<link>[+url+]</link>
			<description><![CDATA[ [+summary:strip+] ]]></description>
			<pubDate>[+rss_date+]</pubDate>
			<guid isPermaLink="true">[+url+]</guid>
			<dc:creator>[+rss_author+]</dc:creator>
			[+tagLinks+]
		</item>
	
TPL;

この形式に則って、descriptionの中にpタグとimgタグを挿入してあげる、と。ところが、description$tplに指定するとなぜかスニペットタグごとDittoの指定を吐き出して、Ditto自体が動かなくなるという現象に遭遇……。これ、もしかして<![CDATA[ ]]>の部分でMODxのプレースホルダと認識されて競合している……?

であれば、プレースホルダと競合しないように特殊文字をエスケープすれば行けるのでは、と考えて特殊文字のエスケープを調べてみると、[は&#91;、]は&#93;とのことなので、これでエスケープして、以下のようなコードに。


$rss_tpl = <<<TPL

		<item>
			<title>[+rss_pagetitle+]</title>
			<link>[+url+]</link>
			<description><!&#91;CDATA&#91; <p><img src="[+eyecatch+]" alt="[+pagetitle+]"></p>[+summary:strip+] &#93;&#93;></description>
			<pubDate>[+rss_date+]</pubDate>
			<guid isPermaLink="true">[+url+]</guid>
			<dc:creator>[+rss_author+]</dc:creator>
			[+tagLinks+]
		</item>
	
TPL;

これでどうでしょうか……って、[, ]が&#91;, &#93;とエスケープされた文字そのままになってしまいました。ダメか……。

過去バージョンも試してみて、1.0.15Jだと正常に出力されるので「おや?」と思ったのですが、1.0.16JのリリースノートCDATAセクションの終端付近で誤動作を起こすため修正とあるので、どうも1.0.15Jと1.0.16Jで挙動が分かれるような感じがします。

この悪戦苦闘の結果プルリクすることになったのは以前の記事(プルリクしたお話)で書いたのですが、そっちに話が持って行かれてしまって、肝心のFeedlyにアイキャッチを表示させたいという内容そのものについての記事がなかったので改めて書いた次第。

参考サイト

え、Dittoの使用は非推奨なの……?

追記

しばらく放置していたのですが、Feedlyアプリ内で最初の記事ではなく、2番目以降の記事になった場合、上記のうちXMLのエスケープを外した上体の不完全な記述でもアイキャッチが認識されるという現象に遭遇しました(下図)。でもアプリを開いて一番最初の記事だとアイキャッチを認識してくれない。……謎な現象です。

Feedlyアプリ内で最初の記事ではなく、2番目以降の記事になった場合にアイキャッチが認識されて表示されている例

タグ: ブログ関係,カスタマイズ

 



関連する記事一覧