エントリー間でリンク

まだ踊っているワタシ Movable Typeって、自分が以前書いた記事にリンクしようとすると、ちょっと面倒だなぁと思ってた。個別ファイル名が記事のIDになってしまうので、どの記事がどの番号なのか調べてからでないとリンクが貼れないし、移転とか破損で再構築するとIDが変わっちゃうので、全部リンクを張りなおさないとならないし。この辺、何とかならないかなぁ...と思っていたのね。

 「記事のタイトルで検索して該当するものにリンクする」ようにしておけばいいはずなので、MySQLに移行してMTSQLプラグインを使えるようになったのを機に考えてみますた。

 そいういうわけで、前提としてMySQLを使っていて、MTSQLプラグインが使えるようにっている必要があります。簡単にエントリーできるようにするため、MTMacroプラグインも使います。まずは<Myblog>という新しいタグを作って、そのの中にリンクを抜き出すためのSQL文をセットします。

<MTMacroDefine name="Myblog" ctag="Myblog">
<MTSQLEntries query="select entry_id from mt_entry where entry_title like 
'%[MTMacroAttr name='ttl']%' limit 1"><a href="<MTEntryLink>"><MTMacroContent></a></MTSQLEntries>
</MTMacroDefine> 

ワタシはエントリー文中で利用することを前提にしているので、limit 1で表示するエントリーを1件に限定しています。次に<MTMacroApply>タグで<$MTEntryBody$>などを囲んでMTMacroを有効にしておきます。Templateいじりは以上。

 あとはエントリーで、リンクしたい部分に

<Myblog ttl="(リンクするエントリーのタイトル)">リンクする文字列</Myblog> 

と書くだけ。どーすか。簡単じゃないですか?

 上のSQL文では、そのフレーズを含むタイトルを1つ抜き出すようにしてあります。なので、同じフレーズを使ったタイトルが複数あると、勝手に1つ抜き出します。完全一致にしたい場合は「%」をとればいいんじゃないかなぁ。多分。

 あと、いくつもBlogがある場合は、MTOtherBlogプラグインを使って、<MTSQLEntries>を<MTOtherBlog blog_id="1,2,3">とかではさんでやると、拾ってくれます。

 本当は、ttlを指定しなければMTMacroContent(タグではさんだテキスト部分ね)で検索するように条件で振り分けるとかしたいんだけど、とりあえずは、やりたいことができてまずまず満足。*1

  • *1: これはMT2.6時代の記事です。参考にする方はいないと思いますが、最新版では使えないプラグインとかありますので、念のため

アーカイブ

Powered by Movable Type 4.261