MT3かつSQLiteの時は、たくさんのプラグインとループを利用して、強引にやってましたね、俺。(^^
投稿日よりも後に更新されたエントリーをリスト化するカスタマイズ
正直、アレはよくなかった。
出力されるHTMLにはループの残骸である改行が山ほど出てたし。
そもそも、DBがあるんだから、初めから条件用意して一発で取得が理想でしょう。
てことで、MT4に合わせてMySQLにDB形式を変更したので、SQL発行で何とかならないかってのが、今回の目的です。
実はMySQLにDB形式を変更したのも、MT3時代にSQL発行での当該カスタマイズ記事を見つけたからです。
#from Movable Type備忘録
SQLでエントリを更新された順にソートする
で、喜び勇んで駆けつけると、なんと紹介されているSQLプラグインはMT4では動作しないってオチが。Σ( ̄□ ̄)
・・・しょうがないからネットで検索すると、ちょうど良い感じのプラグインが見つかりました。
#from Six Apart Movable Type プラグインディレクトリ
SQL
・・・ん? これって、Movable Type備忘録で紹介されていたプラグインと同じ。(^^A
が、ここで「Six Apartで紹介されているから、MT4でも動くのでは?」と勝手に妄想開始。(爆
公開先を探していると、件のSQLプラグインがコソッと更新されていたのを発見しました。
しかも、MT4に対応したってことで、ついにSQL発行を利用したカスタマイズができるわけです。
閑話休題。
そんなわけで、投稿日○時間後に更新されたエントリーを更新日の降順に表示するカスタマイズに行きます。
エントリーの降順ならプラグインでもできますが、更新日の降順で表示したいって方向けですね。
ただし、MySQLでDBを作成している方専用です。
SQLiteなど別DB形式の場合は無理なので、あしからず。
なおMT4.01で動作確認しましたが、多分MT3系でも動くんじゃないかなぁと思います。(^^
では、肝心のカスタマイズ記事については、続きをご覧下さいな。
#動作確認バージョン(MySQL前提)
MT4.01
#関連記事
投稿日○時間後に更新されたエントリーを更新日の降順に表示するカスタマイズ。(その1)
投稿日○時間後に更新されたエントリーを更新日の降順に表示するカスタマイズ。(その2)
1.MT4対応版SQLプラグインのインストール
まずはMT4対応版SQLプラグインのインストールをします。
#from bradchoate.com
MT hack-a-thon day at Six Apart, Japan
エントリーの中程に、"SQL"ってリンクが張ってあるので飛びます。
飛んだ先にある、"plugins/"をクリックした先が、プラグインの在処です。
"SQL"フォルダ以下を、まったく同様の階層に合わせてプラグインをダウンロードします。
具体的には、下記のようにフォルダを作って下さい。
\SQL
∟\lib
| ∟\MTSQL
| ∟Plugin.pm
∟\tmpl
| ∟config.tmpl
∟sql.pl
作成したら、そのままMovable Typeのpluginsフォルダにアップすれば完了です。
2.エントリー上でのSQL発行
さて、当該プラグインですが、下記の情報を参考にするのが一番良いでしょう。
#from Six Apart Movable Type プラグインディレクトリ
SQL
さっきと同じだって? だって、ここが日本語で書かれて分かりやすいのですよ。
これで基本的は使い方はバッチリでしょう。
あとは、どんなSQLを発行して、どんな結果を取得したいかですね。
俺の場合、下記の条件を両方満たしたエントリーを、更新一覧として表示させてたいですね。
・SQL発行日から一ヶ月以内に更新されたエントリーを対象とする。
・エントリーの公開日の○時間以降に更新されたエントリーを対象とする。
・ソート順は最後に更新されたエントリーから表示させる。
てことで、早速SQLを考えて、テンプレートに組み込んでみました。
SQLのチューニングは分からないから、結果だけ出せるようにしてます。
<ul>
<MTSQLEntries query="
SELECT
entry_id
FROM
mt_entry
WHERE
entry_blog_id = <MTBlogID> AND
(current_date - INTERVAL 1 MONTH) < entry_modified_on AND
entry_modified_on > (entry_created_on + INTERVAL 1 DAY)
ORDER BY
entry_modified_on DESC" default="no entries">
<li><a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a> <$MTEntryModifiedDate format="%m/%d"$></li>
</MTSQLEntries>
</ul>
SQLの基本構造式については省略します。ネットで探せばすぐに見つかるので。(^^
前提として、Movable Typeのエントリーは"mt_entry"テーブルにて管理されているのですよ。
そこから各エントリーの"entry_id"を取得できれば、対象エントリーを判断できるって仕組みです。
■SQL文の記述注意点
当該SQLプラグインでのSQL発行文内には、"<"・">"は使わないで下さい。
理由はタグの開始終了を表す"<"・">"と、大小比較の"<"・">"をMT側で勘違いするので。
大小比較をする際には、"<"を"<"、">"を">"として記述して下さいね。
では、各条件(WHERE)の中身について説明していきますか。
1つ目は、現在の<MTBlogID>と一致するエントリーを選択しています。
2つ目は、SQL発行日の一ヶ月前より、あとに更新されたエントリーを選択しています。
要するに、SQL発行日の一ヶ月以内に更新したエントリーってことですね。
3つ目は、更新日が公開日の1日後(24時間後)以降であるエントリーを選択しています。
単に、24時間以内の更新は誤字脱字の場合が多いので、更新一覧からハズしたかっただけです。(^^A
まぁ、各構文で使われている変数名で検索すれば、意味や使い方は分かると思いますよ。
"current_date"とか"INTERVAL"とかね。
これでテンプレートを更新すると、俺の目的通りの更新エントリー一覧が表示されます。
・・・と思ったら、大間違いでした。(ぇ
いや、原則正しいのですが、どう見てもおかしいエントリーが混ざってしましました。
具体的に言うと、半年前に下書きしていて、先ほど公開したエントリーも表示されます。
・・・はて? 公開日+1日>更新日なので、対象外のハズなんですがねぇ。
てことで、この理由については、その2で紹介しますね。
≪ 続きを隠す