タグ「tips」が付けられているもの

MT5とSQLite

  • 投稿日:
  • by
  • カテゴリ:

以前にも

MT5とMT4の動作環境の違いを調べてみました (エムロジック放課後プロジェクト)

このエントリで書きましたが、MT5ではSQLiteは対応していません。
しかし、MTをインストール時にはSQLiteも選択することができ、インストールも最後まで行うことができます。
実際に動かしてみても普通に使えるみたいなのですが、いくつか問題を発見しました。

ブログの削除ができない
ブログの一覧画面からブログを選択して「削除」ボタンを押すと「Can't call method "execute" on an undefined value」というエラーが出て削除ができません。
カスタムフィールドがうまく動かない
タグ名を「EntryDesc」としてテキストフィールドを追加したとき、<$MTEntryDesc$>タグを使っても再構築後に表示されない。これは、他の種類のフィールドでも同様で、「entrydesc」のように小文字にしないとうまく動かない

この他にも、まだ、問題はあるかもしれません。
もともとサポートしていないものなのですがから、正常に動作しなくても仕方ないと思いますが、もしかすると、同じようにエラーが起きて悩んでいる人もいるかも知れないので、ここに書いておきます。
MT5では素直にMySQLを使うのが良さそうです。

MTプラグインで、管理画面のメニューに項目を追加するには、レジストリを使います。
そこでは、「view」オプションを使って「どの画面」にメニューを追加するかを指定できます。

my $plugin = new MT::Plugin::Hoge({
    name => 'Hoge',
    registry => {
        applications => {
            cms => {
                menus => {
                    'tools:hoge' => {
                        label       => "Hoge",
                        order       => 800,
                        view        => "blog",
                    },
                },
            },
        },
    },
});

MT->add_plugin($plugin);

こんな感じで、指定するとブログメニューにだけメニューが追加できます。

と、今まではこんな感じで、blogを指定すればブログメニューに、systemを指定すればシステムメニューに、view自体を指定しなければ両方に追加されたのですが、MT5からはビューが増えたこともあり、配列を渡すことで複数のviewを追加できるようになりました。

my $plugin = new MT::Plugin::Hoge({
    name => 'Hoge',
    registry => {
        applications => {
            cms => {
                menus => {
                    'tools:hoge' => {
                        label       => "Hoge",
                        order       => 800,
                        view        => [ "blog", "website", "system"],
                    },
                },
            },
        },
    },
});

MT->add_plugin($plugin);

こんな感じにすると、ブログ、システム、ウェブサイトのメニューに新しくメニューを追加することができるようになります。
ここでは、以下の指定ができます。

user
ユーザーダッシュボード
blog
ブログメニュー
system
システムメニュー
website
ウェブサイトメニュー

この中でも、「user」が非常に面白くて、これを指定すると、本来メニューが存在しないユーザーダッシュボードに追加したメニューがひとつだけぽつんと表示されます。
まさに、「俺メニュー」という感じです。
とても、面白いので、ぜひ試してみてください。

MTのスケジュールタスク機能は、指定日投稿のほかにも公開キューによる再構築や迷惑コメント・トラックバックの削除、不要になったセッションやテンポラリファイルの削除など重要な処理を行っています(弊社でもいくつかのプラグインでスケジュールタスクを利用しています)。
MTの機能をフルに活用したいのであれば、この機能は可能な限り設定するべきです。

MTのスケジュールタスクを実行する方法として、もっとも一般的な対応はMTが動作しているサーバー上で、MTに含まれるスクリプト run-periodic-tasks を定期的に実行する方法ですが、定期的な実行を行うためには cron や Windows タスク・スケジューラ の設定が必要であり、利用するサーバーによってはこの設定を行うことができずに、スケジュールタスク機能を設定しないまま利用されている方もいらっしゃるのではないかと思います。

MTでは、サーバー上で run-periodic-tasks を実行できない場合の代替策として

指定日投稿や公開キュー等のスケジュール処理の設定 | Movable Type 4 ドキュメント
に書いてある
  • ログ・フィードの取得時に実行
  • XML-RPC API で拡張された mt.runPeriodicTasks の利用
の2通りの方法が用意されています。
どちらの方法もサーバーの設定を必要とせず外部からMTのスケジュールタスクを実行させることが可能なのですが、その設定方法については具体的に解説されていません。

このサイトでは以前Rubyスクリプトを用いた方法を紹介しましたが、今回は、Windowsに限定した、WSH(VBScript)を使った方法を紹介したいと思います。
この方法は、IEがインストールされているWindows XP/Windpows Server 2003以上の環境であれば、追加のソフトを必要としないことが特徴です。

MTプラグインは、MTシステムにインストールするとシステム単位の有効/無効は指定できますが、ブログごとの有効/無効を指定することができません(2009/07現在)。
システムに実装されていない以上プラグインで実装するしかないわけです。
毎回同じようなコードを書くわけで、いいかげんテンプレート化できてきたので、ここで、紹介しておこうと思います。

MAMPとMacGDBpでPHPスクリプトのデバッグ環境を構築する

  • 投稿日:
  • by
  • カテゴリ:

少し前に「MAMPにMTをインストールする際のメモ」という記事を書きましたが、今回はそこで書き忘れたPHPのデバッグ環境の構築について書いてみたいと思います。

MacGDBpのインストール

PHPスクリプトをリモートデバッグするには MacGDBpという、XdebugのGUIフロントエンドを使用します。ダウンロード、アーカイブ展開後、MacGDBp本体をアプリケーションフォルダにコピーするだけです。

Xdebugのインストール

次にサーバ側にXdebugエクステンションをインストールします。XdebugのバイナリパッケージがActiveStateにありますのでこれを利用します。Komodo Debugger Extensionsから"Komodo 5.1 Remote Debugging Packages"の欄にある"PHP Remote Debugging / Mac OS X"をダウンロードし、展開します。

展開するとPHPのバージョンごとにエクステンションがありますので、MAMPで使用しているPHPのバージョン(MAMP 1.7.2の場合はPHP 5.2.6)にあわせてエクステンション(xdebug.so)を選択し、以下の場所へコピーします。

$ cd 5.2
$ cp xdebug.so /Applications/MAMP/bin/php5/lib/php/extensions/no-debug-non-zts-20050922

Xdebugの設定

Xdebugを使えるようにするには、/Applications/MAMP/conf/php5/php.iniを編集し、
以下の設定をファイルの最後へ追加します。

[xdebug]
zend_extension="/Applications/MAMP/bin/php5/lib/php/extensions/no-debug-non-zts-20050922/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.remote_autostart=1

また、Zend Optimizerを無効にするため、以下の行の先頭にセミコロンを入れ、コメントにします。

zend_extension_manager.optimizer=/Applications/MAMP/bin/php5/zend/lib/Optimizer-3.3.3

MacGDBpでスクリプトをデバッグする

MacGDBpを起動すると、デバッガ画面が開きます。この状態で、デバッグしたいページをブラウザからアクセスすると、ブラウザ上には何も表示されませんが、MacGDBpでは次のような画面になり、スクリプトの先頭で停止します。

macgdbp_debugger.jpg

画面上部左側では、変数の内容を確認できます。

スクリプトを任意の場所で停止したい場合は、Breakpointsウィンドウを開き、画面下部の「+」をクリックしてスクリプトを指定し、画面上部に表示されたスクリプトから停止させたい箇所の行番号部分をクリックします。

macgdbp_break.jpg

これでPHPスクリプトのデバッグが出来るようになり、ダイナミックパブリッシングに対応したMTプラグインの開発効率が上がるはず(?)です。

MAMPにMTをインストールする際のメモ

  • 投稿日:
  • by
  • カテゴリ:

MT関連の開発にはMAMPに複数のバージョンのMTを同時にインストールして使っていますが、毎回新しいバージョンを入れる度にやり方をすっかり忘れているので、次にインストールする時のためにここにメモしておきます。

  1. MTのアーカイブを展開後、"mt425"等バージョン番号をつけたディレクトリ名にrenameし、DocumentRootへコピーする。
  2. 以下の内容でmt-config.cgiを作成する。
    CGIPath        /mt425/
    StaticWebPath  /mt425/mt-static/
    StaticFilePath /Applications/MAMP/htdocs/mt425/mt-static
    
    ObjectDriver DBI::mysql
    Database mt425
    DBUser root
    DBPassword xxxx
    DBHost localhost
    DBSocket /Applications/MAMP/tmp/mysql/mysql.sock
    
    MailTransfer sendmail
    SendMailPath /usr/sbin/sendmail
    
    MySQLのSoketファイルは/Applications/MAMP/tmp/mysql/mysql.sockにある。mt-config.cgiのDBSocketにはこれを設定する。
  3. バージョン毎のディレクトリ以下で直接cgiが動くよう、DocumentRootに以下の内容の.htaccessが存在するか確認し、なければ作成する。
    Options +ExecCGI
    AddHandler cgi-script .cgi
    
  4. mt-config.cgiで指定したデータベースを作成する。mysql/mysqladminは/Applications/MAMP/Library/binにある。
    > mysqladmin -u root -p create mt425 --default-character-set=utf8
    
  5. mt.cfgにアクセスする。

MAMPを起動しても、Apache/MySQLサーバの状態が「赤」になり、起動しないことがたまにあります。そういう場合は、/Applications/MAMP/bin/apache2/logs/httpd.pidが存在するならそれを削除してみます。MySQLで同様の場合は、/Applications/MAMP/tmp/mysql/mysql.pidを削除してみます。

MTのDBをSQLiteからMySQLへ

  • 投稿日:
  • by
  • カテゴリ:

MTが動いているサーバを移転することになりました。
しかし、

  • 旧サーバはSQLiteしか使えない
  • 新サーバはMySQLしか使えない

ということで、SQLiteのファイルをそのまま移動して終わりと言うわけにはいきません。
どこかで、新サーバのMySQLにデータを移行するために変換を行う必要があります。
そこで、こんな方法を考えてみました。

  1. 旧サーバのSQLiteのデータベースファイルをローカルPCにバックアップする
  2. ローカル環境に構築したサーバに旧サーバのMTと同じバージョンのMTをインストールしておく
  3. バックアップしたSQLiteのバックアップファイルをローカル環境のMTで使えるようにMT側の設定を行い、ファイルを所定のディレクトリにおく
  4. ogawaさんの「MT Database Converter 」を使い、MySQLにコンバート
  5. MySQLのデータベースをdumpする
  6. dumpしたデータを新サーバのMySQLにインポートする

これで、うまくいくはずなんですが、はまったのが

旧サーバとローカルサーバのDBD::SQLiteのバージョンを揃える必要がある

という点でした。
今回は、旧サーバのバージョンにあわせてモジュールをインストールしました。

この手の作業は、仕事で時々発生することがあると思うので、ここにメモしておきます。

WindowsマシンにXAMPPをインストールしてローカルサーバ環境をつくり、その上でMTを使ってサイト構築をしたり、プラグインのテストをしたりという方法は非常にポピュラーになってきています。

先日、僕も手持ちのMac mini上のVistaにXAMPPをインストールして、いざ! ローカルサーバ環境構築! と意気込んでみたのですが、インストールが終わりセキュリティの設定をしようというところで、タイトルのエラーにぶち当たりました。

管理画面で使わないメニュー項目を非表示にする

  • 投稿日:
  • by
  • カテゴリ:

Windows関係のネタは一旦お休みしてMovable Typeの管理画面カスタマイズの小ネタを書いていこうと思います。

Movable Type を用いた案件などで、まれに「使えないメニュー項目を表示しないでほしい」という要望を聞くことかあるのですが、実は、これには簡単な解決方法があります。
公式なドキュメントには書かれていないのですが、Movable Type 4.1以降には「HideDisabledMenus」という環境変数が追加されています。この値を 1 にすることで、通常グレーアウトされるメニュー項目が非表示になります。
設定はmt-config.cgiに次の1行を挿入します。

HideDisabledMenus 1

デフォルトは 0 ですので、設定しない限り非表示にはなりません。
また、この設定はアンドキュメント(?)ですので自己責任でお使いください。

さて、この設定で非表示になるメニュー項目は、「使えない」メニュー項目なのですが、これはアクセスしているユーザーに付与された権限によって、判断されています。
ユーザーが「使わない」メニュー項目を非表示にしたい場合には、そのユーザーの権限を「使えない」と判断される権限に変更する必要があります。

例えば、「ウェブページの管理(「一覧」→「ウェブページ」)」のメニュー項目(manage:page)は、「ウェブページの管理(manage_pages)」権限がないユーザーには使えませんので、この項目を非表示にするためにはユーザーが 「ウェブページの管理(manage_pages)」権限を持たない状態に設定しなければなりません。
また、ユーザーに付与される権限は、複数の権限を組み合わせた「ロール」で管理されており、このロールを作成・編集し、適切に割り当てることで、ユーザーが持つ権限をカスタマイズすることになります。

しかし、この段階的な権限設定はユーザー管理を徹底したいサイトでは便利な機能ですが、その反面設定の手数が多くなってしまい、熟知していないと設定ミスの原因にもなりかねません。

そこでこういったメニューへの要望をプラグインで実現する方法を紹介したいと思います。

今回もMTのデバッグネタです。 先日、弊社のプラグインをインストールしたところうまく動かない、というお客様がいらっしゃいました。手元の環境では問題なく動作していますが、お客様の管理画面にアクセスして調べてみると、やはりうまく動作してません。サーバのシェルにアクセスして調べようにも、お客様が契約されたレンタルサーバでは、シェルでのアクセスが出来ない環境でした。 こういう状況で使えるのが "PerlScript プラグイン":http://bradchoate.com/weblog/2002/07/27/mtperlscript です。このプラグインは、テンプレート内にPerlのスクリプトを記述できるようにするもので、再構築時にスクリプトを実行し、その結果を出力します。 プラグインには2つスクリプトが同梱されていて、それぞれ指定された場所へインストールするようドキュメントに書かれていますが、私は以下のようにファイルを配置し、プラグインディレクトリへコピーしました。 ==
    PerlScript
    |-- lib
    |   `-- bradchoate
    |       `-- perlscript.pm
    `-- perlscript.pl
== 使い方は、テンプレートにPerlスクリプトを記述し、MTPerlScriptタグで囲うだけです。 例として、MTのコンフィグをダンプするスクリプトを書くと以下のようになります。 ==
<MTPerlScript>
require MT;
require YAML;
print YAML::Dump(MT::config);
</MTPerlScript>
== 1つのテンプレートの中にMTPerlScriptタグをいくつも置くこともできます。 ==
<MTPerlScript>
print "begining of template";
</MTPerlScript>

<MTPerlScript>
print "end of template";
</MTPerlScript>
== サブルーチンを定義することも出来ます。 ==
<MTPerlScript package="mylib" once="1">
sub log {
  my ($str) = @_;
  print "<p>log: $str</p>\n";
}
</MTPerlScript>

<MTPerlScript>
mylib::log("middle of template");
</MTPerlScript>
== 作成したテンプレートを再構築し、出力内容を確認するという手順を繰返して、デバッグします。 かなり便利かつ強力なプラグインですが、その反面、テンプレートの編集権限さえあれば、何でも出来てしまう危険なプラグインでもありますので、取り扱いにはご注意ください。

Windows環境のMTでmemcachedを使う

  • 投稿日:
  • by
  • カテゴリ:

懲りることを知らない私は、前回に引き続きWindows関係のネタを書いていこうと思います。

Movable Type 4 では、分散型メモリキャッシュシステムであるmemcachedを使ったキャッシュ機構が組み込まれています。
システム自体は、大規模なシステムでこそより大きな効果を発揮する性質のものではありますが、メモリに余裕があれば、単体での利用でもかなりの効果を望めます。
また、MT::Memcachedを使った開発を行う場合、ローカル環境で動作確認できると大変便利です。

そこで、今回はWindows環境のMovable Typeでmemcachedを利用する方法を紹介したいと思います。

MTの一部の機能をコマンドラインから操作する

  • 投稿日:
  • by
  • カテゴリ:
プラグイン(には限りませんが)を書いていると、これから書こうとしているコードやちょっとした思いつきが正しく動くのかどうか確認したくなることがあります。 確認のためには、最低限の動作をするプラグインに仕上げ、ブラウザからアクセスし、ログあるいはデバッガで確認するという手順を踏む必要がありますが、確認したいコードがたった1行、例えば、MT->version_number()がどういう形式の値を返すのか知りたい、というときには、いちいち前述のような作業を行うのは面倒です。また、最低限の動作をさせるために書いた部分に問題があり、もともと確認したかったところへなかなか到達しない、ということもありがちです。 そうした場合に、役に立つのが、コマンドラインからMTの一部の機能を操作するスクリプトです。(スクリプトといっても、デバッガが起動し、MTのインスタンスを生成した後、breakするだけなのですが...。) ==
#!/usr/bin/perl -d

use lib '../lib';
use vars qw( $mt );
use MT;

BEGIN {
    $mt = MT->new;
}

$DB::signal = 1;
== これをMTをインストールしたディレクトリの下にある、toolsディレクトリに配置して、そこから起動します。ここではconsoleというファイル名にしています。 ==
$ perl console

Loading DB routines from perl5db.pl version 1.28
Editor support available.

Enter h or `h h' for help, or `man perldebug' for more help.

main::(console2:23):	$DB::signal = 1;
  DB<1> 
== スクリプトを起動すると、デバッガのプロンプトが表示されますので、後はperlのプログラムを記述するだけです。変数$mtがMTのインスタンスですので、これを使っていろいろと試すことができます。 たとえば、前述のバージョン番号を調べるのであれば、 ==
  DB<1> p $mt->version_number
4.22
== とします。 公開済みのエントリの一覧を取得し、タイトルを表示するには、 ==
  DB<2> @entries = MT::Entry->load({status=>MT::Entry::RELEASE()})

  DB<3> print $_->title,"\n" for @entries
Movable Type を利用してウェブサイトをリニューアルしました
Movable Type 4 へようこそ!

  DB<4> 
== などとします。 スクリプトの中にサブルーチンを定義しておくと便利です。例えば、変数をダンプするのに毎回、 ==
print Data::Dumper->Dump($v);
== と入力するのは面倒なので、 ==
sub dd {
    my ($v) = @_;
    require Data::Dumper;
    print Data::Dumper->Dump($v);
}
== と定義しておけば、 ==
dd $v
== だけで済みます。YAMLでフォーマットされたのが見やすければ、 ==
sub xx {
    my ($v) = @_;
    require YAML;
    print YAML::Dump($v);
}
== と定義しておき、 ==
xx $v
== とすることができます。 ちょっと動作を確認したい、という場面で役に立つと思いますが、いかがでしょうか?

MTプラグインの簡単なデバッグ方法

  • 投稿日:
  • by
  • カテゴリ:

以前、

MovableType のプラグインをperl debuggerでデバッグする (エムロジック放課後プロジェクト)

このエントリで、perl debuggerを使ったデバッグの仕方を書きました。この中で、

Movable Type のプラグインをデバッグする方法というと、ログにメッセージや変数を出力する、いわゆる「printfデバッグ」になると思います。

と触れられている、いわゆる「printfデバッグ」について、今回は書いてみたいと思います。

Windows環境でMTのログをリアルタイムに見る

  • 投稿日:
  • by
  • カテゴリ:

前回に引き続きWin32関係のネタを書いていきます。

前回Windowsのデバッグ用ツールDebugViewを用いてApacheのエラーログをリアルタイムに見ることができるようにしてみましたが、Movable Typeのログも見れると開発者的には便利だったりします。
そこで、今回は前回の応用ということでMovable Typeのログをリアルタイムに見るためのプラグインを紹介したいと思います。

DebugViewのインストール方法など事前の用意については、前回のエントリーを参照してください。

MTプラグイン開発に欠かせない10のソフトウェア

  • 投稿日:
  • by
  • カテゴリ:
いかにも狙ったようなタイトルで申し訳ないですが、私、えんどうが普段、MTプラグイン開発で使っているソフトウェアを紹介してみようと思います。ちなみにOSは、MacOS X 10.5(Leopard)です。 * "MTPlugin-Starter":http://sourceforge.jp/projects/mtpluginstarter MTプラグインのひな形を作るPerlスクリプトです。これなしでスクラッチから書くなんてできません。 * "Carbon Emacs":http://homepage.mac.com/zenitani/emacs-j.html 長いこと使っている割には、ぜんぜん使いこなせていませんし、ほとんどカスタマイズもしていません。たまに他のエディタも使ってみますが、なぜかすぐにEmacsに戻ってきてしまいます。 * "MAMP":http://www.mamp.info/en/index.php apache/mysql/phpをまとめてインストールできるので重宝しています。この環境下に複数のバージョンのMTをインストールして使っています。 * "Terminal":http://www.apple.com/jp/macosx/ apache/php等のlogを表示させていますが、mysql, perldoc, perl debuggerなども開いています。 * Firefox/Safari 開発中はほぼFirefoxしか使いません。よく使うプラグインは、Firebug, Web Developper, Live HTTP Headersです。Safariは調べものと最終的なテストで使います。 * "Parallels":http://www.runexy.co.jp/products/parallels-mac/ おもにIE6でテストするためにWindows 2000を入れて使っています。ごくまれにLinux環境での動作確認に使用する場合もあります。 * "MacGDBp":http://www.bluestatic.org/software/macgdbp/ PHPのXDebugのフロントエンドです。GUIで操作しなければいけないのがちょっと面倒ですが、なかなか役に立ちます。 * "LimeChat":http://limechat.net/mac/index_ja.html 私は在宅で仕事をしているので、会社の他のメンバーに「ちょっと教えてー」と話かけるのに使います。もちろん雑談します。たまにお客様と連絡を取ったりもします。 * "辞書":http://www.apple.com/jp/macosx/ 変数やメソッドに名前を付けるときに使います。スペルチェックもしますが、和英辞書として使う方が多いです。 * "iTunes":http://www.apple.com/jp/macosx/ 音楽なしで仕事なんて考えられません。 最後はちょっと苦しい感じでしたが、なんとか10個挙げてみました。特にこれがないと困るという状況にならないよう、代替できるものがあるものを、なるべくカスタマイズせず、素のまま使うように心がけています。

Win32版Apacheでリアルタイムにエラーログを見る

  • 投稿日:
  • by
  • カテゴリ:

前回に引き続きWin32版Apache関係のネタを書いていきます。

ローカルにWin32版Apacheを用いたWebアプリケーション開発環境を構築した場合のメリットのひとつとして、ビルド・デバッグの手軽さという要素があるかと思います。
今回はローカル環境でそのような作業を行う場合に、役に立つかもしれないTipsを紹介しようと思います。

ファイルの配置ミスだったり、ファイル名のtypoだったり、Perlのモジュール不足だったり・・・ちょっとしたミスで期待した出力を得ることができない状況というのはよく発生することだと思います。
・・・よく発生するのは私だけかもしれません(笑)

このような状況に陥った場合には、まず最初にApacheのエラーログを見ることになると思いますが、事あるごとにテキストエディタでエラーログを開いて・・・という作業は結構かったるいものです。
私は一時期Apacheのログの最終行を表示するショートカットを作っていたりしました。

Windowsアプリケーションの開発者にはおなじみかもしれませんが、WindowsのAPIにOutputDebugStringというAPIがあります。
これは開発ツールが持つデバッガにデバッグ出力を行うためのものですが、開発ツールをインストールしなくとも、この出力を表示するDebugViewというツールがSysinternalsより公開されています(現在はMicrosoftが配布しています)
今回このツールを活用して、Win32版Apacheのエラーログをすばやく参照できるデバッグ補助環境を作りたいと思います。

ある月の日数をMTのテンプレート機能だけで求める

  • 投稿日:
  • by
  • カテゴリ:

先日、あるお客様で、MTのテンプレートの中で「2008年の2月は何日あるか?というように、ある月の日数を知りたい」という方がいらっしゃいました。日数を知りたい月と年を指定すると、日数を返すテンプレートタグをプラグインとして作成しようかと考えていたところ、「できれば'MT標準の機能だけでやりたい」とおっしゃられるので、ちょっと考えてみたのが、以下のテンプレートです。

<MTSetVarTemplate name="days_in_month">
<MTIf name="year">
<MTIf name="month">
<MTSetVar name="daysin[1]" value="31">
<MTSetVar name="daysin[2]" value="28">
<MTSetVar name="daysin[3]" value="31">
<MTSetVar name="daysin[4]" value="30">
<MTSetVar name="daysin[5]" value="31">
<MTSetVar name="daysin[6]" value="30">
<MTSetVar name="daysin[7]" value="31">
<MTSetVar name="daysin[8]" value="31">
<MTSetVar name="daysin[9]" value="30">
<MTSetVar name="daysin[10]" value="31">
<MTSetVar name="daysin[11]" value="30">
<MTSetVar name="daysin[12]" value="31">
<MTSetVarBlock name="days"><MTGetVar name="daysin" index="$month"></MTSetVarBlock>
<MTIf name="year" op="%" value="4" eq="0">
  <MTIf name="year" op="%" value="100">
    <MTSetVar name="leap_year" value="1">
  </MTIf>
<MTElseIf name="year" op="%" eq="0">
  <MTSetVar name="leap_year" value="1">
</MTIf>
<MTIf name="month" eq="2">
  <MTIf name="leap_year">
    <MTSetVar name="days" value="29">
  </MTIf>
</MTIf>
<MTGetVar name="days">
</MTIf>
</MTIf>
</MTSetVarTemplate>

上記テンプレートをテンプレートモジュールとして別途保存しておき、使いたいところで呼び出すか、使いたいテンプレートに貼付けておきます。

テンプレート変数として使用している、"days", "month", "year"等は同じ名称の変数が既に使われている可能性がありますが、その場合は、適当に変更してください。

2008年の各月の日数を求める例は、以下のようになります。

<h1>月の日数</h1>
<MTSetVar name="year" value="2008">
<ul>
<MTFor var="month" from="1" to="12">
<li>
<MTGetVar name="year">年<MTGetVar name="month">月は、
<MTGetVar name="days_in_month" strip_linefeeds="1" trim="1">日まであります。
</li>
</MTFor>
</ul>

これは、次のように表示されます。

    ・2008年1月は、 31日まであります。
    ・2008年2月は、 29日まであります。
    ・2008年3月は、 31日まであります。
    ・2008年4月は、 30日まであります。
    ・2008年5月は、 31日まであります。
    ・2008年6月は、 30日まであります。
    ・2008年7月は、 31日まであります。
    ・2008年8月は、 31日まであります。
    ・2008年9月は、 30日まであります。
    ・2008年10月は、 31日まであります。
    ・2008年11月は、 30日まであります。
    ・2008年12月は、 31日まであります。

このテンプレートは、これを使って作成したページ自体がボツになってしまったので、実際に使われることはなかったのですが、せっかくですので、ここでネタとして公開することにしました。

ほとんど実用的な使い道は思いつきませんが、MTCalendarタグを使わずにカレンダーを表示することに挑戦してみるのも楽しいかもしれません。

MacOSX用のアプリケーションを簡単に作るワザ

  • 投稿日:
  • by
  • カテゴリ:

Mac用のアプリケーションは開発するのが難しいとよく言われます。
実際、難しいですし、MacOSXでの開発で使うObjective-Cも非常に変態的個性的で習得の壁も高いような気がします。
しかし、最近では少し事情も変わってきてさくさくっと開発できるようにもなってきています(もちろん、その先には大きな壁が立ちはだかってはいるのですけど)。
今回は、CoreDataというフレームワークを使って、コードを書かずに(一行も!)アプリケーションを作ってみます。
まるで魔法のようにアプリケーションが完成するので、ぜひ、実際に手を動かしてみてください。

Win32版Apache+FastCGIでMT環境を構築する

  • 投稿日:
  • by
  • カテゴリ:

前回に引き続きWin32版Apache関係のTipsを書いていきたいと思います。

まもなくMovable Type 4.2が正式版になる予定ですが、MT4.2において進化した機能のひとつがFastCGI対応です。
これまでもFastCGI上で動作させることは可能だったのですが、安定性など不安要素があり、簡単にお勧めできる手法ではありませんでした。
今回MTOSでの成果が取り込まれたことにより、いくつかの既知の制限事項は残しているものの、安定性の問題はクリアされたようです。
そのため今回のバージョンアップを機に、FastCGI環境を試したいという方もいるかと思います。

そこで今回はWin32版ApacheのFastCGI環境でMovable Typeを動作させる方法について、いくつか書いておきたいと思います。

Win32版ApacheでMT環境を構築する際の注意点

  • 投稿日:
  • by
  • カテゴリ:

Win32環境でApache上にMovable Typeの環境を構築する場合、CGIプログラムをどのように実行させるかによって、いくつかの設定方法が存在します。

最近オールインワンのMTOS環境であるInstaMTがリリースされ、設定を意識せずMTOSの実行環境が手に入るようになりましたが、すでにApacheやActivePerlなどをインストールしている場合、オールインワンであることを余計に感じることもあるかと思います。

そこで今回、Win32版Apache上でMovable TypeをはじめとするPerl/CGIの実行環境についてまとめておきたいと思います。