MovableTypeプラグインの最近のブログ記事

こんな連載が始まっちゃったので僕もひとつ(忙しくて中々追いつかんのですが)。

検索エンジンからの流入時に検索ワードを拾ってサイト内検索をリアルタイムに実行する例なんかも面白いのですが、単純に流入元のドメインによって分岐するなんて例も面白いんじゃないかと。Twitterからの流入だったら「フォローしてね」って表示させてみたりFacebookからの流入時に「いいね!」ボタンをわかりやすく配置したり外部サイトからの流入時にサイトの利用規約を表示するとか、まーアイデア次第で。

<MTIfTheHTTPReferrer domain="www.google.com">
www.google.comからの流入
</MTIfTheHTTPReferrer>

<MTIfTheHTTPReferrer domain="google.com" scope="backward">
*google.comからの流入
</MTIfTheHTTPReferrer>

<MTIfTheHTTPReferrer domain="www.google" scope="foward">
www.google* からの流入(www.google.com や www.google.co.jp)
</MTIfTheHTTPReferrer>

<MTIfTheHTTPReferrer domain="google" scope="contains">
googleを含むドメインからの流入
</MTIfTheHTTPReferrer>

<MTIfTheHTTPReferrer scope="empty">
リファラが空の場合
</MTIfTheHTTPReferrer>

プラグインのダウンロード

Movable Typeに普通にあったらいいと思うんだけどシリーズ...

とか...

カテゴリの場合"categoryfilter"、ウェブページの場合"pagefilter"、ブログ記事の場合"entryfilter"というベースネームのカスタムフィールド(チェックボックス)を作成、チェックを付けたカテゴリ/ウェブページ/ブログ記事アーカイブは出力されません(という働きをするプラグインです)。entryfilterとかはmt-configで変更できます(環境変数 CategoryFilterBasename / PageFilterBasename / IndividualFilterBasename)。

Safari003.jpg

最近GitHubの方ばかりに上げてるので(のと本業の方のリリースで忙しかったのもあって)ここに上げるのは久しぶりなんですが、ちょっと思いつきで書いたプラグインです。Movable Typeに普通にあったらいいと思うんだけどシリーズ(続く...かも)。

先日のセミナーに参加いただいた方は何のためのプラグインかわかりますよね? ブログ記事消したりユーザー登録できちゃったりするあの件とかと関係あるわけですが[謎]。

ログイン画面に次のアクションを表示

この件とは直接関係ないんですが、投稿しようとするとログアウトになっちゃうってケース、アカウントの共有してないですか? (ライセンス的には駄目なんだと思いますがそうして使ってるケースがあると有り得ますね。てか、「Movable Typeからログアウトしました」って表現が適切じゃなくて混乱する気がするんですよね。)

また、フラグ用の変数はP62,63の予約変数で確認できます。スライドには、確認するためのテンプレートモジュールについて言及しています(分からない人は使わないでも問題ありません)

いや、本が手元にないんですよ、という人のために、予約変数はどこに書いてあるか、というご紹介。

mtディレクトリの以下のlib/MT/ArchiveType/以下の各ファイルにアーカイブタイプ毎に指定されています。

#  lib/MT/ArchiveType/Category.pm

sub template_params {
    return {
        archive_class              => "category-archive",
        category_archive           => 1,
        archive_template           => 1,
        archive_listing            => 1,
        'module_category_archives' => 1,
    };
}

ドキュメントにもあります(下記のページからPDFで一覧表があります)。

でも、でもでも、ソース見ろってのも違うと思うし上記のPDFだってわかりやすいとも言いがたい、というか、今変数がどうなっているかを確認したい時ってないですか? layout-wtt みたいな変数もあるし。そこでプラグイン。

カテゴリーアーカイブのプレビュー画面に <MTVarDump> と入れてプレビューするとこんな感じで表示してくれます。エスケープ済みの文字列をpreタグで囲って表示してくれます。

$VAR1 = {
          'category_entry_listing' => 1,
          'preview_template' => 1,
          'archive_class' => 'category-archive',
          'archive_template' => 1,
          'page_layout' => 'layout-wtt',
          'page_columns' => 3,
          'archive_listing' => 1,
          'category_archive' => 1,
          'module_category_archives' => 1
        };

他にもMTCookieDump、MTQueryDump、MTEnvDumpってタグが用意されています。開発・構築のお伴にどうぞ。

タイトルの『"もっと"よくわかる条件分岐。』の話じゃなくなっちゃいましたが、ま、いっか。

MTDDC Meetup FUKUSHIMA行ってきました。やっぱり大阪まで戻るのは飛行機にするべきだった...

こんな感じのレポートにしてしまうと結局のところプラグインの話になってるように取られちゃうかもしれませんが、技術ネタは前半の少しだけであとはビジネスの話と思い出話(?)でした。とはいえビジネスの話は会場限定なので前半の話のおさらいを少し。ひとことで言えば、MTはもっとPHP使いにアピールしようよ or PHPerはMTのフレームワーク使ってマークアップとの分離、協業(分業)スタイルとか「デジタルコピーの使い回し」ができるような方法を考えようね、ってことです。

一応Perlのコードも動くようにしましたが、これはね...PHPプログラマに見て欲しいんだ(で、みんなもっとダイナミック使おう)。そう、MTはPerlプロラグマのもんじゃない。そしてMTMLはもっと自由なんだよ。

さて、前準備として、DynamicMTMLをインストールするかダイナミックパブリッシングを設定しておいてください。DynamicMTMLをインストールした方が絶対面白いんだけどね(こいつも公開した当時からいくつか進歩しているのでまたそのうち近々新しい版を公開します)。

ファンクションタグ : MTHelloWorld

最初のプラグインとして、Hello World! だけ出力するもの。会場でデモしたやつです。モディファイアの渡し方のサンプル的に worldモディファイアを追加しています。つまり、

<MTHelloWorld world="Movable Type">
Hello Movable Type!

を出力します。

モディファイア : addstring

<MTHelloWorld world="Movable Type" addstring="でいいじゃん!">
Hello Movable Type!でいいじゃん!

を出力します。つなげてるだけですけどね...

ブロックタグ:MTQueryLoop

ブロックタグはちょっとややこしいので、DBにアクセスするサンプルでなく簡単なサンプルを。

example.html?param[]=foo&param[]=bar&param[]=buz

のようにアクセスした時に、

<MTQueryLoop key="param" glue=",">
<mt:var name="param" escape="html">
</MTQueryLoop>
foo,bar,buz

と出力されます。まぁこの「glue」ってのがWordpress的なので、MTっぽく書くことも出来るようにしてあります(ユーザーが指定可能な値を動的に出力するときはescape="html"を忘れずに!)。

<MTQueryLoop key="param">
<mt:if name="__first__"><ul></mt:if>
<li class="<mt:if name="__odd__">odd<mt:else>even</mt:else></mt:if>"><mt:var name="param" escape="html"></li>
<mt:if name="__last__"></ul></mt:if>
</MTQueryLoop>

ファンクションタグ:MTQuery

MTQueryLoopのパラメタ1つバージョン

<MTQuery key="param" escape="html">
example.html?param=foo

のようにアクセスすると foo を出力します。

ファンクションタグ:MTRand

<MTRand min="1" max="10">

で、1から10までの乱数を返します。

会場でやったデモでは以下のようなテンプレートで最近のブログ記事10件から1件ランダムに出力するもでしたね。

<MTRand min="1" max="10" setvar="rand">
<MTEntries limit="1" offset="$rand">
<MTEntryTitle escape="html">
</MTEntries>

* そういえば、昨日で会社7周年。懇親会で「来週くらい」とか言ってて「覚えてないのかよ!」と思わず自分でツッコミ入れてしまいました。写真はウチの子が小遣いで買って来てくれたクラシックラガー(ありがとー)。

クラシックラガーの缶!!

いよいよ週末にMTDDC Meetup FUKUSHIMA 2010です。

当日枠あるみたいです。お時間ある方は是非。

私のセッションのアジェンダを以下に(多分全部入んないから今から削るけどww)。尚、スライド等は非公開にします。その方が絶対面白い話できるもん!!

あなたの知らない Movable Type

〜プラグイン/テーマ/テンプレートだけじゃないMovable Typeの本当の実力と可能性を知ろう〜

What's MT

  • サーバーインストール型CMS/ブログ
  • プラグインによる拡張性
  • 覚えやすく強力なテンプレート言語
  • Perl/PHPフレームワーク
  • データベースドライバとMT::Object
  • アプリケーション開発フレームワーク

最近つくったものをいくつか...(デモ)

  • Xtalk(Twitterクローン)
  • Viewerアプリケーション
  • ePublisher(電子書籍編集/出版)
  • DynamicMTML(静的ファイルにMTML)
  • カスタムオブジェクト
  • MTObjectBuilder(GUIでプラグイン)
  • PowerCMS::Util

Movable Type on Buisiness

〜地方+小規模+Web系会社にとってのプラットフォームビジネスを考える〜

  • About Me
  • About Us(アルファサードについて)
  • アルファサードのProduct
  • Background - 1(野田純生のバックグラウンドについて1995年から2002年頃まで)
  • Ju's iEdit(1997-2002)
  • Background - 2(アルファサード設立から2005年-2006年くらいまで)
  • Shift_the Movable Type.
  • 2007 - Movable Type 4
  • Power CMS for MT

Movable Type on Buisiness

  • どんなビジネスの種類がある?
  • どんな特徴のビジネスモデル?
  • アルファサードでは?
  • デメリットはないの?
  • プラグインが書けなくてもビジネスできる?

Why Movable Type?(Why not Wordpress?)

  • 再利用可能なデジタルコピーが利益につながるモデルをつくる
  • Inside Movable Type(拡張MVCと分業スタイル)

Movable Type on Buisiness, -地方の小規模組織にとってのビジネスチャンス-

  • theme-1 地方案件は予算がないのか?
  • theme-2 東京の仕事とどう付き合うか?
  • theme-3 アライアンスは有効な手段か?
  • theme-4 シフトチェンジはどう行うか?
  • theme-5 どう考えて、どう行動するか?

みなさんへ、いくつかの提案


それでは当日、お会いしましょう。

10月17日:コメントでご指摘いただいた点を修正しました...

9月8日:permitted_actionを指定していなかったので修正しました...

タイトルの通り。

ロールの管理画面

Twitter / Kousuke Nakatani: あ・・これ削除時は動かないんですね・RT @junn ...

あ・・これ削除時は動かないんですね・RT @junnama: @junnama http://junnama.alfasado.net/online/2008/01/post_158.html 使わせていただきました!おかげさまで無事解決いたしました!ありがとうございますー!

おっと。修正しました。

指定日時公開の時効かないですけど。まぁいずれ対応させます。

ダイナミックパブリッシングでMTのタグとかプラグインのタグとかがエラーを吐く時に「ダイナミックパブリッシングエラー」テンプレートが呼ばれるわけですが、404(Not Found)のエラーもタグのエラーも一緒くたなのでこんな状態になるわけです。

ダイナミックパブリッシングエラー

開発中・構築中はまぁご愛嬌なんですが、公開したサイトでこんなの表示って不細工きわまりないと思うのは僕だけでしょうか? ダイナミックパブリッシングエラーテンプレートでSetVarして分岐してみたけどうまくいかないので...

エラーメッセージを返せないのはなんですが、MTErrorHandlerで囲まれた部分についてはエラーをスキップするようなブロックタグを書いてみました。MTErrorファンクションタグはテスト用(MTErrorHandlerで囲っていない部分に記述すると強制的にエラーを返します)。

<mt:ErrorHandler>
    <$mt:error$>
</mt:ErrorHandler>

(せっかくだから5.1で直ってるんじゃないかって書いておこう)

Perl/PHP両対応です。管理画面や検索結果などにも適用できますが、基本的にはダイナミックパブリッシングかDynamicMTMLで同一URLでスタイル分岐させて動かすのが正攻法でしょう。*CSS/JavaScriptだけでも出来てしまうんでしょうが。

<MTIfAndroid>
Android向け
<mt:else>
そうじゃない向け
</mt:else>
</MTIfAndroid>

一応、こっちもあります。基本同じですね。やり方。

参考:

*蛇足ですが、ダイナミック対応プラグインが少ないってのは(昔書かれたものは別にして)現在では書かない人が多いってことだけかと思います。軽い重いってことじゃなくて、ハイブリッドなパブリッシングが出来るってことですからもっと可能性が色々あると思いますよ。

ウェブページ

OpenID対応しています OpenIDについて
Powered by Movable Type 5.04

このアーカイブについて

このページには、過去に書かれたブログ記事のうちMovableTypeプラグインカテゴリに属しているものが含まれています。

前のカテゴリはMovableTypeです。

次のカテゴリはWeb制作・ビジネスです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。