BlogTop > MovableType > mt4 Archive

mt4 Archive

Movable type 4.x は、2011/11/26 で製品ライフサイクルを終了しています。
詳しくは、MovableType.jpの Movable Type のプロダクト・ライフサイクルポリシーについて を参照してください。

all of 5

すべてのページ

キャッシュとSSIでの失敗談

  • Posted by: maRk
  • MovableType | mt4
  • はてなブックマークに追加

Movable Type4.2からのキャッシュとサーバーサイドインクルード機能を利用していて失敗したときのことを記します

キャッシュとSSI(サーバーサイドインクルード)機能の説明はここでは省略します。以下を参照してみてください。

この前サーヴァ間移動をおこなったときのことなのですが、ページを表示するとWarningがでているんですねえ。

でそのWarningの内容を見ると、パスのところに移動もとのほうのアカウントが。インクルードするファイルを読み込めないために警告されているようでした。

サイトパスとかブログの設定で書き換えた(移動のときサーヴァのアカウントも変えたので)ハズなんだけどおかしいなあと思っていたら、SSIのところだったというオチでした。*ヴァージョンは4.27にてということにしておきます。

キャッシュ設定がPHPでおこなわれたとすると、そのモジュールの出力ページは保存用のディレクトリに保存されて、読み込む側のページにおいて以下のように置き換わるようです。

  • <?php include("/path/to/site/includes_c/includemodule.php") ?>

これが静的ページに残ってるということですね。ちなみに保存用ディレクトリincludes_cは環境変数(IncludesDir)により変更可能です。新しいほうのサーヴァのパスになるためにはファイルが更新されないといけないので、結局のところ再構築をおこなう必要があります。

つまるところ、サーヴァ移動をおこなったときの全再構築を執り行うのを怠っていたワタくシのミスでした。

なんというか、テンプレート編集画面を見てもモジュールインクルードの箇所はSSIが展開されて表示されているのではないのでうっかりしてました。サーヴァ移動後の注意点としてはそんなところです。

TemplateShelfプラグインの「All Templates」の選択がワナらしいので

  • Posted by: maRk
  • mt4 | mt5 | plugins
  • はてなブックマークに追加

Movale TypeのTemplateShelfプラグインですがAll Templatesを選択時にテンプレートの数が多いと動作が重くなるとのことなので使えないようにする改造とグローバルテンプレートのIDについてです

Movable Type 5で「TemplateShelfプラグイン」が動作できるとの情報がWolaWolaさまにて紹介されています。不具合の修正や改造方法も掲載されていますので参考になります。

ヴァージョンを4.2にしてから動作しなくなったので放置してしまったのですが、4.2以降でも動作するようにヴァージョンアップされていたようですね。さっそく使ってみましたところ4.261においても動作することを確認しました。

さて、「All Templates」を選択した際に動作が重いとのことです(JSON形式のデータの書き出しか読み込みで時間がかかるのか??)。すべてのテンプレートのショートカットを表示させたい場面は滅多にありませんので要らないものは使わなくて済むように以下のように変更してみました。なお以下のカスタマイズはMovable Type 4.261にて確認をおこないました

<option value="" disabled="disabled"><__trans phrase="All Templates"></option>

template_shelf.tmplファイルのoption要素で当該の箇所にdisabled属性を追加して選択できないようにしています。

余談ではありますが、書いておきますとoption要素のdisabled属性がIE6では選択不可にならなかったとおもいます。その前にIE自体でこのプラグインが動かないですので。。(参考:「Template Shelf」プラグインがIE6では動かない? - ElectricBrain Standard)上記はワタくシがやった方法ですから、その部分を削除するなり、コメントにするなりお好みの方法でよろしいかと。

それと、グローバルテンプレート時の振り分け(blog_id=0のパラメタが機能していない件の対処)についてなのですが、実はモーダルボックスでグローバルテンプレートの表示を試してみると(MT4.261の場合です)、コチラのほうはいちおう表示されているんですね、これが。

ソースを見るとどうやらtmpl.idの値が求めているものそのものらしいです。で、問題の箇所は以下のように変更してみました。createRow()関数の箇所でmt:var name="blog_id"の部分をtmpl.blog_idに置き換えます。そういう意味とは違うようでしたら御免なさい。

?__mode=view&amp;_type=template&amp;blog_id='+ tmpl.blog_id + '&id=' + tmpl.id + '">'

改造後はいつもの如しで、MTシステムディレクトリ/plugins/TemplateShelf/tmpl以下にアップロードして管理ページから確認して終了です。これで「むきょー!」の仲間入りですね。

Movable Typeのjsファイル内の関数を利用したShow-Hideのカスタマイズ

Movable Typeが生成する、インデックステンプレートのjsファイルに登録されている関数を利用して特定IDの要素の表示や非表示を実現するカスタマイズです。

ページ内の一部分をクリックで表示させたり、非表示にしたりするのに、自分でJavaScriptを書いて用意するか、prototype.jsやjQueryを利用するなどの方法があります。

さて、ほんの小ネタなのですが、MTのインデックステンプレートのJavaScriptテンプレートには、簡単な要素の表示・非表示をおこなう関数があらかじめ用意されています。簡素な表示切り替えでしたら、このJSファイルを利用する、という手もあります。

今回使う関数は、mtShow()mtHide()です。

なお、上記の関数はMovable Type 4のヴァージョンによってはこの関数が導入されていませんので注意願います。ということで、以下のカスタマイズは、JavaScriptテンプレート内に、function mtHide(id)といったコードが記述されていることを前提として説明していきます。

mtShow()を利用した例

例として、簡単なテンプレートで示します。<$mt:Link template="javascript"$>を使ってMTのJSファイルを呼び出していますが、これはあくまでも例としてのテンプレートです。実際の使用は、individualアーカイブテンプレートのように作りこまれたテンプレート内で利用することを想定しています。

<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<style type="text/css">
#show { display: none; }
</style>
<title>MT Template test Show(ID)</title>
<script type="text/javascript" src="<$mt:Link template="javascript"$>"></script>
</head>
<body>
<p><a href="./" onclick="mtShow('show'); return false;">Show List</a></p>
     <div id="show">
     <ul>
         <li>list - 1</li>
         <li>list - 2</li>
         <li>list - 3</li>
     </ul>
     </div>
</body>
</html>

mtShow('show')で表示したい要素のID、showを渡します。記事ページのコメント一覧の表示とか、トラックバックURIを表示させるなどに使えるかと思います。

mtHide()を利用した例

以下は、画面上部に表示された要素を消すボタン用に関数を利用した例です。サイドバーやページの最上部に簡単なお知らせを表示するような場合などに。

<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<style type="text/css">
body *{ margin:0; padding:0; }
#hide { display: block;
 margin     : 0;
 border     : 1px solid #CCCCCC;
 background : #FFFFE0 none;
 text-align : right; }
</style>
<title>MT Template test Hide(ID)</title>
<script type="text/javascript" src="<mt:Link template="javascript">"></script>
</head>
<body>
     <p id="hide">This is a test of MT Template !! <a title="Click to hide this message" href="./" onclick="mtHide('hide'); return false;">[ X ]</a></p>
<ul>
<li>list - 1</li>
<li>list - 2</li>
<li>list - 3</li>
</ul>
</body>
</html>

以上です。もっと複雑なことをされたいようなときは、自前で用意されたほうがいいかと思います。

これらのテンプレートをセットしたものは以下にあります。

解凍後の、templatesフォルダ内のファイルをインデックステンプレートで作成すれば試すことができます。

Download

MT:ついでにエディタのツールバーもドラッグ可能にしてみる

Movable Typeの記事編集画面のツールバーをドラッグできるようにしてみました。

以下の内容は、Movable Type 4系に関するものです

Movable Type 4では記事の内容のエリアの縦サイズは可変になるようになっています。ところが、ワタくシのように記事の「続き(extend)」を使わずに、ほとんどが「本文」のみで書いており、長い記事の編集中にテキスト部分をスクロールバーが出ないように長くしていると、ツールバー(テキスト編集のためのボタン群)が上のほうに送られることで画面から隠れてしまうケースがあります。

これを解決する方法で思いつくのはこのようなところです。

そこで、MTのツールバーもドラッグで任意の位置にもっていくことができるようにしてみたというわけです(というのはタテマエでdraggableのオプションを試すのが目的だと言う話もあります)。

方法ですが、先般書いた、「メモ:MTでファイルアップロード等のダイアログが画面内に収まり切らない時の対処」の記事内のダイアログをドラッグする方法にコードを追加します。追加する(している)コードは以下のようになります。

jQuery(function(){
     //  エディタツールバーにz-index設定し、テキスト部分に潜り込まないようにする
       $('#editor-content-toolbar').css("z-index","1");
     //  draggable の設定をする
       $('#editor-content-toolbar').draggable({
        snap: ".tab",
        cursor: "move",
        containment: "#content-inner",
        drag: function(event, ui){$(".field-buttons-formatting").css("visibility","hidden");},
        stop: function(event, ui){$(".field-buttons-formatting").css("visibility","visible");}
        });
});

導入までの手順の簡単なオサライです。

  1. https://www.movabletype.jp/faq/modal-dialog.htmlの代替テンプレートをダウンロード
  2. /alt-tmpl/ディレクトリ以下に指定された箇所にアップ。ダイアログの動作を確認。
  3. jQuery本体、jQuery UI(ui.core.js、ui.draggable.js)を用意する
  4. 代替テンプレートを書き換えて再びアップする

動作確認はMTOS4.3-jaとおよびこのブログでのMovable Type Pro 4.261、ブラウザはFirefox3.0.13とIE7です。動作的にはFirefoxのほうを推奨します。

あと、特定の要素を指定していますから、テンプレートの構造とか要素が変更になると動作しなくなります。なお、draggableのオプション設定については以下を参考にしました。

メモ:MTでファイルアップロード等のダイアログが画面内に収まり切らない時の対処

Movable Type 4.54.25以降で、ファイルアップロードなどの画面がモニタの解像度やウインドウサイズによって収まりきらずにボタン類が画面に表示されなくなる問題の対処法です

以下の内容は、Movable Type 4系に関するものです。

この問題は、通常の使用では表面化しない類のものかと思うのですが、画像ファイルなどをアップロードする際に表示される、「ダイアログ」が画面内に入りきらないことで、「キャンセルボタン」や「アップロード」といったボタンが表示されなくなってしまう、というものです。

解決法としてMovable Type.JPにて、代替テンプレートが公開されています。

説明を読んでファイルをダウンロードして、Movable Typeが設置されているディレクトリ内の指定された箇所にファイルを置くだけなのでそれほど面倒ではありません。

それで、適用するファイルのパスは、以下のようになります。

  • MTがインストールされているディレクトリ/alt-tmpl/cms/include/footer.tmpl

適用後、ダイアログが画面に収まりきらないときにスクロールバーが表示される動作になっていれば正常な動作です。

以下は試しにFirefoxでFirebugを起動させてみたときのスクリーンショットです。

mt_dialog.gif

おまけ

それで、「ダイアログ自体をドラッグしてみたらどうよ」、ということで実装してみました。

先ほどの件でjQueryが使われてましたので、DraggableというUIを利用するとします。

jQuery UIからUI coreとDraggableをダウンロードしておきます。ダウンロード後は展開したファイルからui.core.js、ui.draggable.jsをMTのjqueryフォルダ内か自分が管理するJSファイルのディレクトリなどにアップロードしておきます。

先述のfooter.tmplファイルを開いてjQueryの呼び出しの箇所と、スクリプト実行の部分を書き換えをおこないます。

</mt:unless>というコードの下付近から以下のように変更しています。なお、jQueryのヴァージョンで1.3.2を使っている関係で、デフォルトのfooter.tmplのjQuery呼び出しファイル自体も変更しています。

<script type="text/javascript" src="<$mt:Var name="static_uri"$>jquery/jquery-1.3.2.min.js"></script>
<script type="text/javascript" src="<$mt:Var name="static_uri"$>jquery/ui/ui.core_172.js"></script>
<script type="text/javascript" src="<$mt:Var name="static_uri"$>jquery/ui/ui.draggable_172.js"></script>
<script type="text/javascript"><!-- 
    $("head").append('<link rel="stylesheet" href="<mt:var name="static_uri">css/dialog_draggable.css" type="text/css" media="screen" />');
    $(document).ready(function(){
                $('#dialog-container').draggable();
    });
    jQuery(function() {
        jQuery(window).resize(function() {
            var $dialog = $('#dialog');
            var height = jQuery(window).height();
            if ($dialog.length) {
                $dialog.height(height - 60);
                $('#dialog-iframe').height(height - 60);
            }
        });
    });
// -->
</script>

jQueryで、スタイルシートをappendしていて、スタイルシートで使っているのは、カーソルの形を変えるといった程度のものです。mt-static/css/ 以下か自分がわかる任意の箇所に置きます。

/* for draggable dialog */
#dialog-container{ cursor: move; }
#dialog-container:hover { border: 2px solid blue; }

footer.tmplを変更したものに差し替えて、ダイアログを見ますと以下のように、ダイアログの外側のグレーアウトされた部分でドラッグ可能となりました。

mt_dialog_draggable.gif

それと注意点としてですが、MTのヴァージョンをあげた、などに起因して動かなくなってしまった場合は、この代替テンプレートファイルを削除されるとよろしいかと。

今月のいらんことしい(2009年6月)

今月(2009年6月)、サイトのテンプレート等をカスタマイズしたところをまとめた記事です。

今月は、Movable Typeのマイナーアップデートがありました。

このほかには、これといって目立ったところを弄っていないのですが、とりあえず記しておきます。

  • 4.25から4.261へアップグレードした
  • 各記事ページでコメンテーターのアンカーを付けた
  • アーカイブページにAjax検索の仕組みを採用した
  • Open Searchプラグインを導入
  • カテゴリアーカイブでパラメタ(page=)の付くページはNOINDEXとしてみた

4.26へのアップグレードは順調に問題なく進みましたが、不具合に遭遇。その後、早急に修正ヴァージョン4.261がリリースされました。

コメントされる方のリンクですが、コメントのテンプレートにはもともとIDがMTCommentIDが付与されてましたので、それを利用したというだけです。

アーカイブインデックスですが、詳細は以下にて記載してあります。

Open Searchプラグインについては、以下に記しておきました。

MTPaginateプラグインをカテゴリーインデックスページに採用していますが、 phpでパラメタの付いたページには、metaタグで、下記のような出力となるようにしてみました。

  • <meta name="robots" content="noindex" />

アーカイブインデックステンプレートでパラメタのないトップページにはコレがでないように振り分けしてあります。今現在その結果どうなるのか様子を見ているといった状況です。

今月のカスタマイズは以上です。2009年6月のアーカイブは以下から閲覧することができます。

メモ:trim toとencodeの組み合わせで気をつけること

  • Posted by: maRk
  • mt4
  • はてなブックマークに追加

Movable Typeのグローバル・モディファイアのtrim_toを使うとき、エンコードすべき文字の途中でトリムされる場合の検証と対処について

説明がわかりにくいと思うので、いきなりですが、やりたいことをテストテンプレートにて示します。

test template 1
<mt:setvars>data=0123456789&ABCDEF</mt:setvars>
<?xml version="1.0" encoding="<$MTPublishCharset$>" standalone="yes" ?>
<data><mt:var name="data" encode_xml="1" trim_to="11" /></data>

上に示したテンプレートでは、0から&(アンパサンド)までを指定して出力するものです。

このテンプレートをそのまま出力(XMLファイルとして)させてブラウザで見ると、パースエラーとなってるはずです。

では、trim_toの値を15にしてみるとどうでしょうか。これはエンコード後のアンパサンドの文字数を含める数値です。

test template 2
<mt:setvars>data=0123456789&ABCDEF</mt:setvars>
<?xml version="1.0" encoding="<$MTPublishCharset$>" standalone="yes" ?>
<data><mt:var name="data" encode_xml="1" trim_to="15" /></data>

今度は、モディファイアの順番をいれかえして、trim_toを先に記述してみます。

test template 3
<mt:setvars>data=0123456789&ABCDEF</mt:setvars>
<?xml version="1.0" encoding="<$MTPublishCharset$>" standalone="yes" ?>
<data><mt:var name="data" trim_to="11" encode_xml="1" /></data>

この場合だと、問題なく表示されます。

日本語の場合でテストしてみます。下のテンプレートではどうでしょうか。

test template 4
<mt:setvars>data=あいうえお&かきくけこ</mt:setvars>
<?xml version="1.0" encoding="<$MTPublishCharset$>" standalone="yes" ?>
<data><mt:var name="data" encode_xml="1" trim_to="9" /></data>

まとめのようなもの

以上のテンプレートは故意にエスケープすべき場所を指定してトリムをおこなっていますが、普通に記述していて予期しない箇所でパースエラーを引き起こす原因になっていることがありうるかも。

回避の方法としては、先にtrim_toを記述してから、encodeをおこなう形にするか、それが具合悪いのであれば、setvar、getvarで変数に渡してから処理するとか、XMLならば当該箇所をCDATAにするか、でしょうか。

それと、グローバル・モディファイアの処理を先に書いたものが先に実行されるらしいというかそういう仕様っぽいです。

4.25での認証ユーザのサインイン動作確認:はてなの場合

  • Posted by: maRk
  • mt4
  • はてなブックマークに追加

Movable Type 4.25では、これまでの認証ユーザのサービスにいくつかのサービスが加えられています。今回は「はてな」のOpenIDによる認証を試してみます。

認証ユーザの件については、MovableType.JPの以下のドキュメントを参照します。*モーション用のドキュメントですが、通常のブログであっても認証については同様です(のはず)。

コメントのサインインのリンクをクリックします。

hatena_openid01_425.gif

サインイン画面に遷移します。自分のはてなIDを入力して、サインインのボタンをクリックします。

hatena_openid02_425.gif

はてなのサインイン画面に遷移します。SSLでログインする場合は、セキュア(SSL)のリンクをクリックします。なお、すでにはてなにサインインしている場合は、ログイン認証画面は出ずに次のステップとなります。

hatena_openid03_425.gif

OpenIDでのログイン確認画面に移動します。認証するサイトのURIが表示されて、認証をおこなう場合は、「今回のみ許可」か「常に許可」を選ぶことができます。この辺の説明は、はてなの説明ページを参照します。

hatena_openid04_425.gif

認証に成功すると、元記事のページに戻りコメント欄のところで、ワタくシの場合だと「maRkとしてサインインしています。」という文言が表示されます。

はてなのOpenIDの確認画面で「常に許可」を選んだ場合ですが、次回からはそのサイトではOpenIDを許可するかの確認画面が表示されなくなります。

「常に許可」のサイトを解除するには、http://www.hatena.ne.jp/ユーザID/config/authのページに移動して、許可済みサービス一覧のなかから削除したいサイトのところの「削除」ボタンを押下します。

hatena_openid05_425.gif

あとがき

検証日は、2009年5月21日です。その後の仕様変更などで挙動が変わることがあるかもしれません。

はてな認証は、4.25からのもので、プラグインのものとは別です。4.24以前からプラグインで導入されているかたは、無効にするかプラグインを外されるとよろしいかと。自分の場合ですが4.25にアップする際、以前のバージョンのプラグインディレクトリからコピーせずにアップグレードをおこないました。「はてな」のほか、4.25ではWordPress(のアカウント)も同様にはじめから認証サービスとして入っています。

MT:ダッシュボードにブログパーツを表示させてみた

Movable Typeのダッシュボードにプラグインとして、ウィジェットを追加することができるとのことで、あれこれ試して「ブログパーツ」を表示するというのができました。

最近ブログパーツとか使わないというか、それほどかまったりすることがないのですが、ほんの練習がてら作ってみたものです。ウィジェット作成の方法ですが、The blog of H.Fujimotoさまの以下の記事から始まる続き物記事にて詳しい解説があり、参考にさせていただきました。

以下に作成した手順を記しておきます。これはネタ的なものでして、実用性とか全く考えてませんのであしからず。例としてBlogPet(ブログペット)を表示させるというのを示します。まずはキャプチャから。

dashbordwidget_blogparts.gif

手順は以下のような感じです。

手順1:ブログペットを表示させるHTMLファイルを作る

テンプレート側で、インラインフレームにて呼び出す、という形にしています。因みに自分のVoxブログにて表示させていますが、あれもインラインフレームが使われています。

テンプレート自体はブログペットを表示させるだけの簡単なものでいいかと思います。blogparts.htmlとか適当なファイル名で保存して、サーバにアップしておき表示されることを確認しておきます。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<title>blogpet</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<meta name="robots" content="noindex,nofollow" />
<style type="text/css">
object,embed{ border: 0px none; }
</style>
</head>
<body>
<--ここにブログペットを表示させるコード -->
</body>
</html>

手順2:config.yamlとテンプレートを作成

config.yamlのコード

ここではidをWidgetBlogparts、テンプレートファイルは、blogparts_widget.mtmlとし、ファイル名config.yamlで保存します。

name: Widget Blogparts
id: WidgetBlogparts
description: ブログパーツを表示
version: 1.0
widgets:
  blogparts_widget:
    label: ブログパーツ
    plugin: $WidgetBlogparts
    template: blogparts_widget.mtml
    singular: true
    set: sidebar

テンプレート(blogparts_widget.mtml)のコード

ファイル名をblogparts_widget.mtmlとして、tmplという名前のフォルダを作成してその中に保存します。以下は上記のブログペットを表示するページをウィジェットに取り込むためのテンプレートの例です。

<mt:setvar name="blogpetID" value="ブログペットのID(貼り付け用コード内にある32文字くらいの英数)" />
<mt:setvar name="src" value="http://example.com/blogparts.html" />

<mt:setvartemplate name="showBlogparts">
<iframe frameborder="0" marginwidth="2"
marginheight="2" longdesc="http://www.blogpet.net/profile/view/<$mt:getvar name="blogpetID"$>" src="<$mt:getvar name="src"$>" width="134" height="324" scrolling="no"></iframe>
</mt:setvartemplate>

<mtapp:widget id="WidgetBlogparts" class="widget" label="ブログパーツ" can_close="1">
    <mt:getvar name="showBlogparts">
</mtapp:widget>

手順3:ファイルをまとめてプラグインディレクトリに入れる

ファイルの準備が整ったらフォルダにまとめていつものようにMTシステムのpluginsディレクトリに収めます。

フォルダの構成とかはこのような感じです

  • blogpartsWidget
    • tmpl
      • blogparts_widget.mtml
    • config.yaml

最後に

マルチブログ機能とかで、複数ユーザのパーツの対応とか考えたけど、ややこしくなってきそうなのでこの辺でやめておきます。この理屈でいうと、いくつでもパーツをつけれそうなのですが、ま・あまりつけ過ぎるとダッシュボードがカオス状態に!くれぐれもご注意を。次回はもう少しマトモなのをやってみたいと思います。以上です。

4.25がでたのだけど

  • Posted by: maRk
  • mt4 | myown
  • はてなブックマークに追加

Movable Type4.25の出荷が開始されましたが、どうも今回はアップデートするのが乗り気でありません

Movable Type 4.25 では、様々なバグフィクス、セキュリティ強化に加え、モーションブログを作成するためのテンプレートセットや、それに関する新機能を追加。また、プラグインとして提供されていたアクションストリーム機能を強化してバンドルしています。

Movable Type 4.25 出荷開始 | MovableType.jpより

【追記:2009/04/30 】4月30日に4.25にアップグレードしました。4.24において脆弱性が確認されたとのことです。詳細は、Movable Type 4.24 でのセキュリティ上の問題について (MovableType.jp)に記載されています。

モーションブログ、アクションストリーム機能は今回の目玉というわけですが、どうも今回はアップデートする気が起きません。

理由としては、ベータ版から正式版リリースまでの期間がはやすぎない??というのと、アクションストリームはプラグイン単体のほうがいいような気がするということからです。

まぁ個人が思ったことにすぎず細かく説明することもないのでこれ以上のことは書かないでおきますが。

いちおう本体はダウンロードしていて、アクションストリーム1.0との差分みていたりします。config.yamlでわかったのは、1.0になくて追加になっているテンプレートタグがあるようですネ。以下が4.25にバンドルされたほうでつかえるタグのようです。

function
block

あと、これはどうでもいいことですが、これ以降、このブログでアクションストリームのネタをとりあげるのを打ち止めにしておきます。バージョン1.0のころの情報で古いですし、どこの馬の骨かわからないようなのが情報垂れ流ししても迷惑なだけで、影響力のあるヒトが書いたらそのほうが情報を信頼できるでしょうから。自分で書いてて馬鹿馬鹿しくなってきたので。

それと。。Movable Typeのタグの仕様とかみるのに、テンプレートタグリファレンスみたら全部わかるよ、と思っているかたもいるとはおもうんですけど(自分でもリンク張っていますが)、あれ万能というわけでもないですから。これとか

ActionStreams関連のドキュメント・リファレンスが追加されている

  • Posted by: maRk
  • mt4 | plugins
  • はてなブックマークに追加

Movable Type 4.25でバンドルされているActionStreams(アクションストリーム)プラグイン関連の情報がmovabletype.jpにあがってきているようです。

最近ほとんどかまうことのなくなってきたActionStreamsなのですが、movabletype.jpを見ますと、このプラグインの関連情報やタグリファレンスなどが追加されています。一寸だけピックアップします。詳細は、アクションストリームのドキュメントをご参照ください。

タグリファレンス

ドキュメント

EntryAuthorLinkタグでAuthorのURLの有無で分岐する

MTEntryAuthorLinkは、ブログ記事作成者に対しリンクを付加するものです。このタグでリンクが付かなかった場合の分岐をやってみます。あとmicroformatsを少々カスタマイズします。

Vicunaテンプレートのカスタマイズを中心にやっているのですが、たまにはデフォルトのテンプレートをカスタマイズしてみることにします。

MTEntryAuthorLinkの説明は以下のページに記載されています。

さて、Movable typeデフォルトテンプレートのエントリアーカイブには、microfomatsが埋め込まれており、Operator(Firefoxアドオン)などを使うことで情報を抽出できるようになっています。

しかしながら、OperatorでMovable Typeのテンプレートで生成されたページをみますと、hcardの連絡先の部分でInvalidになっているのをよく見かけます。

これをOperatorでおこられないようにしてみよう、というわけです。

Invalidの原因と対処

OperatorでInvalidとなる原因ですが、早い話が仕様に則してない書き方をされてる、ということになります。

最も簡単な解決方法は、記事を作成できる権限のあるユーザにプロフィールでURLを設定してもらえば、Invalidとはなりません。それは、EntryAuthorLinkshow_hcard="1"の指定によるものです。例えば、MTUserさんが、user.example.orgで設定された場合の実際のテンプレートタグの出力は、

<span class="vcard author">
<a class="fn url" href="http://mtuser.example.org">MT User</a>
</span>

となっています。これが、URLおよびEmailを設定されていませんと、リンクとおよびclass属性のfn urlが表示されませんからOperatorでInvalidとなるようです。

分岐によりURLがないときvcardをつけないようにする

ということで、作成者のURLがないとき、vcardは使わない、というように分岐してみることにしました。デフォルトテンプレートを以下のように書き換えてみます。

<mt:If tag="EntryAuthorDisplayName">
<mt:SetVarBlock name="Autr">
<$mt:EntryAuthorLink show_hcard="1"$>
</mt:SetVarBlock>
 By <mt:If name="Autr" like="href="><span class="vcard author"><mt:Else><span class="author"></mt:If><$mt:Var name="Autr" /></span> on <abbr class="published" title="<$mt:EntryDate format_name="iso8601"$>"><$mt:EntryDate format="%x %X"$></abbr>
<mt:Else>
・・・・以下略・・・・

ここではAutrという変数名にEntryAuthorLinkの内容を与え、href属性があるかで判断しております。リンクがないと、vcardが付かないので、Operatorでは抽出されなくなります。細かくて伝わらないと思いますけど、複数記事作成者がいて、URLの登録を統一できないようなときなどに。

ちょっと小技で改造する

一寸だけ改造をしてみます。テンプレートを見ると、<mt:If tag="EntryAuthorDisplayName">とあることから、表示名はニックネームだろうと、決め付けてしまうならば、オプションのnicknameをつけて以下のようにしてみるとか。

<$mt:EntryAuthorLink show_hcard="1" regex_replace="/fn url/","fn nickname url"$>

あと思いつたのは、hAtom関連で、updated情報もというときに。

<abbr class="updated" title="<$mt:Date format_name="iso8601"$>">Update: <$mt:Date format="%x %X"$></abbr>

といった感じです。最後に、show_hcardの情報はMovableType.orgの以下を参考にしました。

4.2xのコメントリプライお試しの続き

MovableType4.2xのコメント返信機能つきテンプレートの編集。前回のものはmicroformatsをあまり意識してなかったのでその点だけ修正してみました

この記事は以下の記事の続きになります。コメント返信機能をmt.Vicunaテンプレートに適用させるといった内容です。

テンプレートの変更

当該記事に示しましたテンプレート(のコード)のdt要素の部分だけ抜粋します。

<dt<MTIfArchiveTypeEnabled archive_type="Individual"> id="comment-<$MTCommentID$>"</MTIfArchiveTypeEnabled>>
<span class="name">
<MTIfNonEmpty tag="CommentAuthorIdentity">
<$mt:CommentAuthorIdentity$>
</MTIfNonEmpty>
<mt:IfCommentParent>
<span class="vcard author"><$mt:CommentAuthorLink default_name="Anonymous" show_email="0" spam_protect="1"$></span> replied to <a href="<mt:CommentParent><$mt:CommentLink$></mt:CommentParent>">comment from <mt:CommentParent><$mt:CommentAuthor$></mt:CommentParent></a>
<mt:Else><span class="vcard author"><$mt:CommentAuthorLink$></span>
</mt:IfCommentParent>
| <span class="date"><a href="<$mt:CommentLink$>"><$mt:CommentDate$></a></span>
<mt:IfCommentsAccepted>
| <$mt:CommentReplyToLink$>
</mt:IfCommentsAccepted>
</span>
</dt>

以下のよう書き換えをおこないます。

class="name"のところは、class="vcard autor name"class="vcard author"のところは、class="fn"のようにしてみます。書き換え後のテンプレートは以下のようになります。

<dt<MTIfArchiveTypeEnabled archive_type="Individual"> id="comment-<$MTCommentID$>"</MTIfArchiveTypeEnabled>>
<span class="vcard author name">
<MTIfNonEmpty tag="CommentAuthorIdentity">
<$mt:CommentAuthorIdentity$>
</MTIfNonEmpty>
<mt:IfCommentParent>
<span class="fn"><$mt:CommentAuthorLink default_name="Anonymous" show_email="0" spam_protect="1"$></span> replied to <a href="<mt:CommentParent><$mt:CommentLink$></mt:CommentParent>">comment from <mt:CommentParent><$mt:CommentAuthor$></mt:CommentParent></a>
<mt:Else><span class="fn"><$mt:CommentAuthorLink$></span>
</mt:IfCommentParent>
| <span class="date"><a href="<$mt:CommentLink$>"><$mt:CommentDate$></a></span>
<mt:IfCommentsAccepted>
| <$mt:CommentReplyToLink$>
</mt:IfCommentsAccepted>
</span>
</dt>

class="url fn"としたいところなのですが、MTCommentAuthorLinkの出力が、コメントフォームでURL・メールアドレス共に記載されなかった場合、リンクはつかないという動作のために「コメント投稿者のリンクがあるかないか」の判断をおこなう処理が必要になってくるようなのでfnのみにしてあります。

InstaMTで編集したテンプレートを任意のフォルダに

  • Posted by: maRk
  • MovableType | mt4
  • はてなブックマークに追加

InstaMTで編集しているテンプレートを特定のフォルダ内に収めて同期させるといった使い方についてです。

検索語から何かを勝手に読み取って答えるようなエントリ、みたいな企画を考えてまして。今回はその予行練習とでもいいましょうか、まぁそんな感じです。

検索されたワードは特に公開しないというお約束ですすめていこうと思います。

InstaMTに「このテンプレートにリンクするファイル」を設定してみる

さて、「あらかじめローカルで編集しテストをおこなったのち本番環境で使ってみる」、というようなとき一寸したものでしたら、InstaMTでも実現は可能です。

で、編集したテンプレートをバックアップ目的等でフォルダにまとめてローカルに保存したい、というようなときは「このテンプレートにリンクするファイル」(以下この記述を、「Link to File」とします)という機能をつかってみる、というのはどうでしょうか。

Link to Fileについては、「小粋空間」さまの以下の記事にて、その機能の詳細が説明されています。

こちらが特に説明することはないのですが、InstaMTにおいての設定は以下のようになります。

ローカルディスク(C:)直下にInstaMTをインストールしたとして、mtVicunaというフォルダにStylesheetテンプレートを「styles.mtml」というファイル名にて任意フォルダにリンクさせるという場合です。

Link to Fileの項目には以下のように記述して保存または再構築します。

C:\instamt\www\mtVicuna\styles.mtml
instamt-linkfile.png

*パスが適正でないと、保存のときにエラー表示がでますのでご注意。保存がうまくいっているようならば、実際のフォルダを確認します。上の例ではmtVicunaフォルダ内にstyles.mtmlが入っているはずです。このファイルをテキストエディタ開いて直接編集してみます。そして、InstaMTを起動してテンプレートを見にいけばそのファイルを変更したテンプレートはその変更が反映されます。

ワタくシの環境で可能であったというものですので、その点はご承知おきください。あとInstaMTをUSBで使う場合は想定してません。

なお、InstaMTについては以下のページを参照します。

今月のいらんことしい(2008年10月)

今月(2008年10月)サイト内でカスタマイズした箇所を中心にまとめたページです。

  1. MovableTypeのアップデート 4.21>4.22
  2. blog chart貼ってみた
  3. FOAFのページのフッター部分、(c)の表示を特殊文字[©]で表示するようにしてみた。
  4. jQuery Feed Menusをサイトトップ等に設置

MTのアップデートはいらんことでないだろう、というツッコミplz(意味不明)なんですけど、 今月は特筆するほどの内容があまりないので一応いれときます(謎) 重要なセキュリティアップデートということで気づき次第おこないました。

参考

ブログチャートですけど、ただ何となくいれてみたくなったので入れてみました。個人的にランキングとか興味ないんですけどね。日本人特有の同調性とか(これまた謎)いうやつですかねぇ#飽きたらすぐ外すかも

どうでもいいことでなんですが、FOAFのページはXSLT使ってたんですけど、コピーライトのところの表示が面倒だったので(c)と書いていて、©になるようにしてみました。

「水無月ばけらのえび日記」の以下のページによりますと、数値文字参照を書くと定義しなくても使えるそうでして、

Character entity references in HTML 4を参照しましたところ、

<!ENTITY copy   CDATA "&#169;"

とありましたんで、その場所に&#169;といれてみたら©が表示されるようになりました。でもって、現在は面倒なほうで表示させてたりします。

jQuery Feed Menus は以下のページからダウンロードできます。解説もありますし(英文だけど)、ダウンロードファイルにサンプルのHTMLファイルも同梱されてます。

フィードが複数あるページで、link要素によるオートディスカバリーの記述を元にプルダウンメニューを描画してくれるものです。

複数のフィード登録のためのリンクボタンをひとつにまとめるとこができるのでいいでないかと思いました。

ここのブログではやってませんが(先般、オートディスカバリーをAtomフィードのみにすることにしたのでやってもいいけど意味がない)、当サイト内ですと、トップページ(www.markdiary.com) とその周りのページあたりで埋め込むことにしました。

MTIf var=て何?

条件文を作成するときにつかうMTIfタグですが、var=fooといった使い方もあるみたいです。

MTIfを使うときは、MTSetVarに設定した変数あるいはMTSetVarBlockMTSetVarTemplateの変数を利用して条件分岐をさせることになります。

テンプレートタグリファレンスに記載されていますようにモディファイア、name="foo"必須ということになっています。

そこまでは、テンプレートタグの説明の復唱でしかないんですが、<MTIf var="foo">といった書き方があることにこの前気づきました。

これ以降示す内容はどうでもよさげな話になります。自分でもやっているうちにどうでもよくなってきましたし。興味がありましたらお付き合いいただけたら幸いです

ActionStreamsプラグインのexample_templatesのなかにMTIf var=といった書き方がなされている箇所があります。その後の変更がなければ、code.sixapart.comの以下のページで確認できます。

ソースを見てみると、以下のようになっています。

<mt:setvarblock name="this_date"><mt:StreamActionDate format="%A"></mt:setvarblock>
<h2 class="action-stream-header asset-name">
<mt:if var="this_date" eq="$today_date">
Today
<mt:else>
<mt:var name="this_date">
</mt:if>

で、このIf var=って何?ということになったわけです。これがActionStreamsのテンプレートセットのメインインデックステンプレートだと、以下のようになってました。

MTIfの箇所のみ抜きだしてみます。*インデントのための空白は当方で削除

<mt:if name="$today_date" eq="$this_date">
Today
<mt:else>
<mt:var name="this_date">
</mt:if>

この場合だと、today_dateという変数の結果を比較対象にしてるといった感じでしょうか。このコードの前に<mt:setvarblock name="today_date"><mt:Date format="%B %e"></mt:setvarblock>というのがあって、today_dateという変数へテンプレートが再構築された日付を入れるといったことがおこなわれてます。

ここのとこでしばらくハマっていたのですけど、4.21にしてから(なのか前からかわからないけど)自分の環境で「Today」という表示が出なかったのです。そこで、サンプルのテンプレートを見たところIf var=となっていましたので書き直ししたら、Todayが表示されるようになってました。

で、以下に一連の動作確認のためだけに作ったテンプレートを置いておきます。確認はMTOS4.21+InstaMTなんかでやってました。と、ここまでやってきたものの、なんだかやってるうちにわからなくなってきたのと、そもそもActionStreamは気が向いたときにしか更新しないようにしちゃいましたので、Todayが表示される確率を考えると、条件分岐の意味がないことに気づき、結局対象となるMTIfタグは撤去してしまいました。

<html><head><title></title></head>
<body>

<mt:ignore>###### 再構築時刻を「date1」と「date2」へ ###########</mt:ignore>
<mt:setvarblock name="date1"><MTDate language="en"></mt:setvarblock>
<mt:setvarblock name="date2"><MTDate language="en"></mt:setvarblock>

<mt:ignore>###### if name="foo" の場合 ######</mt:ignore>
<p style="color:red"><mt:if name="$date2" eq="$date1">today<mt:else><mt:var name="date2"></mt:if></p>
<p style="color:green"><mt:if name="date2" eq="$date1">today<mt:else><mt:var name="date2"></mt:if></p>

<mt:ignore>###### if var="foo" の場合 ######</mt:ignore>
<p style="color:blue"><mt:if var="date2" eq="$date1">today<mt:else><mt:var name="date2" /></mt:if></p>

<mt:ignore>###### モディファイアがきいているかちょっとテスト ######</mt:ignore>
<p><mt:if var="date2" ne="$date1"><mt:var name="date2" /><mt:else>(&gt;_&lt;)</mt:if></p>

</body>
</html>

[追記]nameのエイリアスのようでした。参考

記事投稿者によるコメントのときおよび返信コメントにclass属性

コメンテーターが記事投稿者である場合や記事投稿者が返信コメントしたときならびにゲスト投稿者が返信コメントをしたときclass属性を付与するというのを試してみました

コメントの種類を分ける

Movable Typeのシステムが受けとったコメントの種類を分類してみます。色々なわけ方があるかと思うのですが、ここでは、コメンターが記事作成者なのかそうではないのか、というところに重点を置いて、起こり得る事象で分けてみます。

*記事作成者以外のコメンテーターをここでは便宜上「ゲスト」としておきます

コメントの返信機能を利用していない場合

  • ゲストによるコメント
  • 記事作成者によるコメント

これに対して、コメントの返信機能を利用した場合、コメントの種類が少し増えて以下のようになります

コメントの返信機能を利用している場合

  • ゲストによるコメント
  • ゲストが誰かのコメントに返信したコメント
  • 記事作成者によるコメント
  • 記事作成者が誰かのコメントに返信したコメント

コメントの種類によってclass属性を与えることを具体的にまとめると以下のようなものです。

クラス名などはこちらで適当につけたものなので適宜かえたらよいかと。

  • 返信コメントには、class="comment-reply"
  • 記事投稿者がコメントしたとき、class="entry-author"
  • 記事投稿者が返信コメントした場合はclass="comment-reply entry-author"

コメントのテンプレートの書き換え

MT4.2のデフォルトテンプレートの例で説明します。コメント返信の機能を利用しているものとして

コメントのテンプレートモジュール(comments.mtml)から以下のようなコードの行を探します。

<div id="comment-<$mt:CommentID$>" class="comment<mt:IfCommentParent> comment-reply</mt:IfCommentParent>">

コメントが記事投稿者である場合は、MTIfCommenterIsEntryAuthorというテンプレートタグを使ってclass属性を付与してみます。

<div id="comment-<$mt:CommentID$>" class="comment<mt:IfCommentParent> comment-reply</mt:IfCommentParent>
<MTIfCommenterIsEntryAuthor> entry-author</MTIfCommenterIsEntryAuthor>">

*横に長くなるため途中改行しています。

あとはスタイルシートでお好みのスタイル指定でカスタマイズすれば、コメントの状態の表現が可能ということになります。

実際におこなってコメント欄にも付与されたクラス名を出力させてみた結果を以下のキャプチャにて示します。

comments-authorreply.gif

ここでのカスタマイズでは、単にclass属性の属性値を複数与えることでスタイル分けしようとする(#なんちゃってスレッド風みたいな)ものですが、構造的にコメントを階層化したいときはMovableType.jp の以下の記事が参考になります。

テンプレート入れ替えとその顛末

  • Posted by: maRk
  • mt4 | plugins
  • はてなブックマークに追加

Vicunaのテンプレートを、MT4.2(4.21)に対応すべく、既存のものに追加する形で入れ替えしました。結果とそのなかでおこったことなどを

カスタマイズが多いということ

MTのバージョンも4.2になったことなので、テンプレートもmt.VIcunaにかえてみようとおもいました。で見た感じだとわかりにくいのかもしれないけど、ここではわりとテンプレート弄ってるものだから、元の姿とだいぶ変わってる箇所があります。

手順どおりでmt.Vicunaのテンプレートセットを入れ替え作業をするときにこちらが困る点はというとこれ。

  • 手順どおりにテンプレートセットを丸ごと変えてしまうと、これまでに作ったカスタムテンプレートが消えてしてしまう

テンプレートセットでの入れ替えは、手軽で簡単におこなえるし、クリーンインストールという意味ではいいのかも知れないんですけど、カスタムテンプレートが多いとそこからもとの状態に近づける作業時間が追加されることになるです。

そのために、一部テンプレートだけ差し替えをおこなってテンプレートの初期化をするという方法もあるわけですが、これもカスタマイズの箇所が多いと差分をとったりするのも結構手間だったり。でもまあ手間かけずに済まそうというならデフォルトのまま使えよ、とかいわれそうなんですけど。

テンプレッツプラグイン使ってみる

このようなときに、もしかして救世主?とおもったのが、Templetsプラグインなんであります。なお、プラグインについてはOgawa::Memorandaさまの以下のページを参照します。

このプラグインを使うことで、必要なものを既存のものに追加という形がとれますから、自分がカスタマイズして追加したテンプレートを残したまま、新しいテンプレートを追加することも可能となります。

入れ替え作業は難航?

それで、アーカイブリストのテンプレートとウィジェットを追加することをまずはやってみました。

おこなう前にcofig.yamlファイルの書式を理解する必要があって、これを理解するのに少し時間かかってしまいました。ローカルでテストしてたら、YAMLファイルが正しくないためにシステムがエラー返してましたし。(汗

あと、いきなり表示崩れとかやってしまいました。それは前のテンプレートでDIV要素が途中で切れる形になってモジュール化されてた箇所が原因で、当方がその部分すっかり忘れてたんですね。

結果として、テンプレッツの追加そのものはうまいことできました。ただ部分的なテンプレートの構造がわかってなかったためにヘマしてただけでした。

おわりに

教訓として、テンプレートを差し替えるときは、中身をそっくり替えてから、バックアップされたファイルなどを戻すほうが無難そう。あと、自分が弄った箇所が後からわかるようにメモに控えておくか、差分が取り易いようにカスタマイズをおこなったあとでローカルにファイルとしてとっておくのもいいかも。それと、テンプレートのコピー機能とかもうまく使いたいかな。

EntryCategoriesタグを改良するプラグインを使ってフォルダ一覧のリストを表示

  • Posted by: maRk
  • mt4
  • はてなブックマークに追加

The blog of H.Fujimotoさまにて公開されている、EntryCategoriesタグを改良するプラグインを使って、ウェブページが属しているフォルダの一覧を表示させるためのウィジェットを試してみました。

プラグインの入手とインストール

The blog of H.Fujimoto の壱さま提供のプラグインです。以下ページにダウンロードならびにインストールの説明があります。

ダウンロードしたファイルを解凍してできた、「EntryCategoriesEx」フォルダをフォルダごとMTシステムのディレクトリのpluginsディレクトリにアップロードでインストールは完了です。

ウィジェットの作成

ウィジェットテンプレートを新規に作成します。テンプレート名はFolder Linkとしました。これは任意で自分がわかる名前でよろしいかと。

ウィジェットの本体はVicunaテンプレートにあわせた形で以下のようなものです。ulエレメントにはclass名は適当なものです。


<mt:If tag="FolderLabel">
<MTPageFolderEx>
<dt class="widget-header">List of <$MTFolderLabel$> folder</dt>
<dd>
<MTPages>
<MTPagesHeader><ul class="folderList"></MTPagesHeader>
<li><a href="<$MTPagePermalink$>"><$MTPageTitle$></a></li>
<MTPagesFooter></ul></MTPagesFooter>
</MTPages></dd>
</MTPageFolderEx>
</mt:If> 

ウィジェットの設定とインクルード

ウィジェットのキャッシュ設定

説明によりますと、MT4.2において、上記ウィジェットには以下のような設定をしておくとのことです。

参考

テンプレートの設定を展開させて、「作成または更新後に無効にする」を選択して「ウェブページ」と「フォルダ」にチェックを入れます。

ウィジェットをインクルード

インクルードさせたいところに、ウィジェットをインクルードさせるコードを挿入します。Vicunaテンプレートだと、ユーティリティの<dl class="navi">のあたりに。

インクルードするためのコードは壱さんのページに書かれていますが、以下のようなコードです。

<MTIfArchiveType archive_type="Page">
<MTPageIfFolder>
<MTSetVarBlock name="page_folder_id"><MTPageFolderEx>page_folder_<$MTFolderID$></MTPageFolderEx></MTSetVarBlock>
<$MTInclude widget="Folder List" key="$page_folder_id"$>
</MTPageIfFolder>
</MTIfArchiveType>

ページ自体が少なくてアレですが、このような結果になりました。

このエントリは以下のページを参照しました。

4.2のコメント・リプライお試し

Movable Type4.2でデフォルトテンプレートのコメントについてきている、コメントへの返信の機能ですが、現在製作中のmt.Vicuna 2.2.0のテンプレートをお借りしてためしてみました。

製作中のテンプレートは以下よりダウンロードさせていただきました。尚、最新版はスレッドの新しいポストのほうにあるようです。あとテスト版とのことですので、導入についてはよく検討したうえでつかわれたほうがよいかと。

詳細は割愛しまして、本題のコメントの部分ですが、4.2のデフォルトテンプレート(comments.mtml)にはコメントされた方に対してリプライするためのコードが記述されています。で、それにあわせて改造してみた次第。#気早?なもので

以下のようなコードを該当箇所に差し替えてみました。テスト環境で動いていたというだけで実際の動作に自信はないんですが。

<MTIgnore>### Comment Logs ###########################################</MTIgnore>
<MTIfNonZero tag="MTEntryCommentCount">
<dl class="log">
<MTComments>
<dt <MTIfArchiveTypeEnabled archive_type="Individual">id="comment-<$MTCommentID$>"</MTIfArchiveTypeEnabled>>
<span class="name">
<MTIfNonEmpty tag="CommentAuthorIdentity">
<$mt:CommentAuthorIdentity$>
</MTIfNonEmpty>
<mt:IfCommentParent>
<span class="vcard author"><$mt:CommentAuthorLink default_name="Anonymous" show_email="0" spam_protect="1"$></span> replied to <a href="<mt:CommentParent><$mt:CommentLink$></mt:CommentParent>">comment from <mt:CommentParent><$mt:CommentAuthor$></mt:CommentParent></a>
<mt:Else><span class="vcard author"><$mt:CommentAuthorLink$></span>
</mt:IfCommentParent>
| <span class="date"><a href="<$mt:CommentLink$>"><$mt:CommentDate$></a></span>
<mt:IfCommentsAccepted>
| <$mt:CommentReplyToLink$>
</mt:IfCommentsAccepted>
</span>
</dt>
<dd<MTIfCommentParent> class="reply"</MTIfCommentParent>><$MTCommentBody$></dd>
</MTComments>
</dl>
</MTIfNonZero>

以下のような表示になりました。

comments-reply.gif

Click to Enlarge

MT4.1xからMT4.21にアップグレード完了

  • Posted by: maRk
  • MovableType | mt4
  • はてなブックマークに追加

使っているMovable TypeのバージョンをMT4.21にアップグレードしました。

シックスアパート(SixApart)よりMovable Type4.21出荷とのアナウンスがありました。

というわけで、バージョンを4.21にすることにしました。ダウンロードはECバイヤーズにて、コミュニティ管理機能を持たない、Movable Type Commercial 4.21のほうでダウンロードしました。

購入等についてはシックスアパートの以下のページを参照

メモのようなもの

データバックアップ等済ませたあとに、MT4.21をアップロード。アップロードには、zipファイルをサーバ上で解凍する- あにめはっく.jpにて、zipファイルでサーバ側で解凍できるとのことなので参考にしましてSSH接続を使ってやってみましたらうまくできてアップロードの時間は短縮することが出来ました。#情報thanks

解凍後、これまでのプラグインの引継ぎ作業、今までのmtconfig.cgiをアップ。準備が整ったら、旧バージョンのディレクトリ名を変更しておき、新しいほうのディレクトリをこれまでのものに変えるとここまでは解説どおりに。あとは、MTシステムにログインしてみるとアップグレード作業が進むという感じです。

ActionStreams入れてる人は、プラグインのアップのとき、extlibのフォルダのアップを忘れてると、アップグレードの作業の開始早々に止るのでご注意。

このおかげでいきなりやっちまっただー><になってしまいました。単にプラグインを入れたときの事思い出したらなんでもないことなんですけどね。

あと、感想として、カスタムフィールド使ってるためなのかわからないけど、データベースの更新のあたりが4.1にあげたときよりちょっと長い感じはしました。

#アップグレード完了とはいえ、あちこち微調整が残っていたりというのが現在の状況です。テンプレートの修正などは日を改めて。

InstaMTで4.2使ってみた

  • Posted by: maRk
  • MovableType | mt4
  • はてなブックマークに追加

ローカルで簡単にMovable Typeが動作するデモ環境を構築する、InstaMTでバージョン4.2を動かしてみました

ダウンロードとインストール

InstaMTのダウンロード・インストールの説明はwww.movabletype.jpの以下のページに記載されています。

MTOS4.2をwww.movabletype.orgからダウンロードします。

4.2へのアップグレード

MT4.2へのアップグレードの具体的な方法が、The blog of H.Fujimotoさまにて紹介されています。

手順のとおり、必要なフォルダを上書きし、[ mt-static ]フォルダは、[ www ]フォルダ内のmt-staticに上書しました。

ログインすると、ウィザードが起動してアップグレードがおこなわれました。

尚、当方アップグレード前にログインしてInstaMT同梱のMTOS4.1テンプレートでブログを構築していましたので、テンプレートの編集のところでRefresh Blog Templateをおこないリビルドしたら、MT4.2のほうのテンプレートが反映されました。

mt.Vicunaとか

あと、mt.VicunaのテンプレートセットもInstaMT環境で使えるようでした。

MTOS4.2ですと、デフォルトでウィジェットセットがセットされてないようなので、空のwidgets.cfgを作らなくてもそのままRefresh Blog Templatesからインストールできました。フォルダを入れる場所は、Vicunaの説明のとおりで、pluginsフォルダはinstamt/cgi-bin/mt/plugins/に、Vicunaのテーマは、instamt/www/mt-static/themesに入れました。

【追記:2009/1/22】 movabletype.orgのほうで4.23をダウンロードできるようになってましたので書いておきます。4.23の場合でも先述の方法と同様でフォルダの差し替えをするだけです。ログインしようとしたときに、アップデートが開始されます。4.23よりプラグインとしてTypePad AntiSpamが同梱されてますが、使うことのなさそうなプラグインを無効にしておきます。

テキストエリアのAYCの件

mt.VIcunaテンプレートで、textareaの初期値にAdd Your Commentを書いてフォーカス時に初期値がクリアされるという動作についてです。

ネタ元は、mt.Vicuna フォーラムのトピック、「コメントプレビュー表示時の Add Your Comment 表示について」です。

コメントを入力して -> プレビュー すると、プレビュー画面下のコメント欄には、自分で入力したコメントではなく Add Your Comment が表示されてしまい、そのままPOSTすると Add Your Comment がコメント投稿されてしまいます。

動作としては、textarea要素の初期値は、「Add Your Comment」として、フォーカスされたとき(onfocus)に初期値が消えるというものです。キーワード検索のテンプレートにおける動作と同じようなもので、基本は以下のような形となります。

*見やすくするために適当な箇所で改行してます

<textarea id="comment-text" class="inputField" name="text" rows="8" cols="50"
 onfocus="if (this.value == 'Add Your Comment') this.value = '';"
 onblur="if (this.value == '')
 this.value = 'Add Your Comment';">
Add Your Comment
</textarea>

で、自分のところでは、上のような処理をいれているのですが、コメントフォームのテンプレートモジュールがシステムテンプレートの場合も兼ねているために、システムテンプレートであったときの処理も併記する必要があるために、以下のような形で使っています。

*実際は改行せずに一行です。

<textarea id="comment-text" class="inputField" name="text" rows="8" cols="50"
<MTIf name="tempName" like="individual"> onfocus="if (this.value == 'Add Your Comment') this.value = '';" onblur="if (this.value == '') this.value = 'Add Your Comment';"</MTIf>>
<MTIf name="tempName" eq="system_comment_preview">
<$MTCommentBody autolink="0" sanitize="0" convert_breaks="0" encode_html="1"$>
<MTElseIf like="individual">Add Your Comment</MTIf>
</textarea>

MTIf name="tempName" eq="system_comment_preview以降の処理がコメントプレビューだったときに、テキストエリアに書き込まれた内容を表示させるためのものです。

MTCommentBodyタグで、コメントの内容をテキストエリアに表示させます。この処理にもちょっと不満なところもあって、コメントに何もかかれない状態でプレビューしますと、Add Your Commentになっちゃいます。ま、あまりありえないんですけど。

<MTElseIf like="individual">Add Your Commentと書いた部分についてですが、「コメントプレビューテンプレート」以外のときに初期値を書くためのものです。もともとは、MTElseIfのところは、MTElseだけで書いていたような気がしたのですが、多分MTElseだけで処理してよさそう(のはず)。

メモ:記事ごとに違う処理したいときのカスタムフィールド

特定記事のみで読み込むコードとかがある場合に、条件処理させたいと思い、カスタムフィールドを使ってやってみました。

1.カスタムフィールドの設定

カスタムフィールドを新規作成します。以下のような感じで、Yes,Noをラベルに使ったラジオボタンを作成します。

  • 名前: 任意
  • 説明: 任意
  • 種類: ラジオボタン
  • オプション: Yes,No
  • 必須?: チェック(チェックにすることで、記事作成画面に常に表示されます)
  • 規定値: NoまたはYesのラジオボタンにチェック

ここで作成されたタグの出力結果は、ラジオボタンにチェックを入れたほうの値となります。

Yes,Noでなくても自分でわかりやすい変数っぽいものでもいいでしょう。

2.ブログ記事テンプレートに変数を定義

Checkboxという名前でできたカスタムフィールドですと以下のような形となります。

場所は、ブログ記事テンプレートの上の辺りにでも

<MTIfNonEmpty tag="Checkbox">
<MTSetVarBlock name="check"><MTCheckbox></MTSetVarBlock>
</MTIfNonEmpty>

MTIfNonEmptyタグは念のため記述してありますが、「必須」にしてあるのでもしかしたら要らないかもしれません。

3.処理を行いたい箇所のコード

条件分岐したい場所に以下のようにeq=...にて判断をおこないます。この場合は、Yesにチェックが入っていた場合の条件での処理になります。MTElseなどを入れることも考えられるでしょう。

<MTIf name="check" eq="Yes">
do something...
</MTIf>

カスタムフィールドと条件分岐についてはだいたいこのような感じです。

Custom Editor Buttonで記事作成の効率アップ

  • Posted by: maRk
  • mt4 | plugins
  • はてなブックマークに追加

MovableTypeの記事作成画面に、任意の機能を持つボタンを追加させるプラグイン、「Custom Editor Button」がなかなか便利です。

Movable Type 5.2以降を利用している場合は、Tiny MCE プラグインを無効にします。

MT4ではさまざまなフォーマットに対応して記事を作成することができますが、使っていてこんな操作が欲しい、というのがあります。そんなときに、Custom Editor Buttonは、自分の欲しい操作を追加することができるので便利ではないでしょうか。

CustomEditorButton2 より

管理画面のブログ記事投稿画面に、任意の機能を持ったボタンを追加できるプラグインです。

関連ページは以下のとおりです

投稿時間に置き換えるボタンなど欲しい動作なので重宝します。自分が記事を書くスタイルにあわせて利用できるのがいいですね。ちょっと真似してタブ文字追加するのと、タブインデントつきliタグをつけるというのを作ってみました。配布するほどのものでないんでソースだけ紹介します。ボタン用の画像は、プラグインの中にプレーンなボタンが同梱されてましたので、それを使ったら簡単に作成できました。


    tabindentlist:
        image: <ボタン画像へのパス>
        title: tabindent-li
        code: |
            function ceb_tabindentlist ( text ) {
                return '\t<li>' + text + '</li>\n';
            }

追記:一応使っているボタン画像を置いておきます。画像のファイルはtablist_button.pngとなります。ボタンの使い方としては、自分が前に記述してあったリスト要素に後から追加するということを想定しています。終了タグ・</ul>または</ol>の前にカーソルを置いてからボタンを押下するとちょうどいい感じになるとおもいます。

MT:コメントの一覧表示のクイックフィルタのところ

  • Posted by: maRk
  • mt4
  • はてなブックマークに追加

MT4.1コメントの一覧の「クイックフィルタ」に「スパムでないコメント」というのがあるのですが、どうもこの表現がしっくりとこないのです。

コメントの管理では、ブログへのコメントの一覧(もしくはシステム全体へのコメント一覧)が、表示されます。

右側にあるフィルターにて、いろいろと絞り込むことができるようになっています。

参考: 

このドキュメントで、「スパムでないコメント」という説明は、「ブログに投稿されたスパムではないコメントのみを一覧します。(一覧する内容の絞り込みより)」とあるように、読んで字の如くなんですけど、どうもこの「スパムではない」という表現がしっくりときません。

URLのパラメータのとこみると、key=defaultとあることから、コメント一覧の基準となる一覧のことが、「スパムでないコメント」なのかと。

おそらく、「スパムコメント」を絞りこんだあとに、「スパムコメントでない」という条件にもどすという操作に移るためのものかと勝手に解釈しています。でも例えば、メーラーなどは、「Inbox」、「受信箱」というのがデフォルトの位置だったりしますので。「スパムメールではないメール」というフォルダなんてわざわざ作らないですよね。
#フォルダ違うし、てのはあるけど。(汗;

・・・・・・と揚げ足取りでもうしわけない。でもなんだかモヤッとしたのでした。おわり。

MT:トップページのパンくずリストについて

MT4でパンくずリストをMTIfタグで分岐させていることかと思いますが、トップページについての条件式をはずすというのをやってみました。

以下の方法は好みの問題でもありますので、自分はこうやるということで紹介しておきます。

1. トップページのパンくずは直書きに

たいていは、パンくずリストを一元管理するため、共通のテンプレートとしてインクルードさせることが多いようです。

ブログのトップページのパンくずリストは、プログのトップページへのリンクのみとなっていますから相対パスを利用すれば、トップページ(メインインデックス)ではパンくずリストのテンプレートはインクルードせずに、以下のようなものを直接埋め込むことで済むのではないでしょうか

<p class="topicPath><a href="./">HOME</a></p>

パンくずリストのテンプレートからトップページかどうかの条件式をはずす

<MTUnless name="main_index">
<p class="topicPath"><a href="">HOME</a>
do something...
</MTUnless>

のような形であったとしますと、先述したとおりメインインデックスページで直接かいてあれば、name="main_index"のようにメインインデックスかどうかを判断する条件式をはずすということができるというわけです。

ウェブページのdescriptionをMTPageExcerptで

Movable Type 4.1のテンプレートで、ウェブページにおいて、概要の記述のないページについては meta description= を出力させないようにしてみました

MTPageExcerptについて

MTのウェブページで、meta要素のdescriptionのcontent属性の値を自動で出力するひとつの方法として、MTPageExcerpt(以下「PageExcerpt」と表記します)という、テンプレートタグを用いる方法があります。

参考:

ウェブページにおいては以下のような、metaタグを記述するようです。

<meta name="description" content="<$MTPageExcerpt remove_html="1"$>" />

参考:

PageExcerptの仕様

さて、 PageExcerpt の仕様ですが、概要記述(記事作成画面の「概要」のフィールドに書かれた内容のこと)がない場合に、ウェブページの先頭からブログ記事の設定で概要の文字数指定をした分だけを出力するという、 つまり、 MTEntryExcerpt と同じ動作ということになります。

このサイトでのウェブページの一覧から、詳細設定表示にしたときのキャプチャを示します

webpage-kanri.gif

例として、以下の2つのページをみていくとします

なんかへたくそな英語がでてきましたけど、Testpageでの概要は、TestPageに書いてある内容となっており、SiteMapでは概要を手入力にておこなっています。

2つのページのソースでhead要素の内容をみていただいたらわかるかとおもうんですが、SiteMapではmeta description=・・・があり、TestPageではmetaタグがでないようになっています。

ところで、PageExcerptの仕様ですとMTIfNonEmptyによる条件分岐では、内容の有無で条件判断できないようであります。

参考:

EntryExcerptでの動作についての質問ではありますが、PageExcerptでも同様にして、IfNonEmptyではタグの中身があることとなっています。。

そこで、一旦変数に概要をいれることで判断をおこなうことにしました。

概要記述の有無で条件分岐(?)

あっているかどうか不明ですけど、このような形で条件分岐させてみました。

先ず変数に概要をいれる

ここでは、pageExcerptという変数にウェブページの概要をいれることにします。

#ネーミングのセンスがないというのはおいといて (汗;

ウェブページアーカイブテンプレートのMTSetVarタグ群の箇所に以下のコードを。

<MTSetVarBlock name="pageExcerpt"><$MTPageExcerpt no_generate="1"$></MTSetVarBlock>

remove_htmlがないのは、手入力の概要にHTMLタグを書く場合が少ないことからです。

次に変数html_headにmetaタグ

ウェブページアーカイブテンプレートから、<MTSetVarBlock name="html_head">を探して、タグ内に追記します

<MTSetVarBlock name="html_head">
<MTIf name="pageExcerpt">
<meta name="description" content="<$MTGetVar name="pageExcerpt">" />
</MTIf>
    :    :    :
</MTSetVarBlock>

ウェブページアーカイブのみリビルドして、概要のないページでmeta desciption=が出ていなければ成功です。

グローバルナビでCurrentページのスタイル(その2)

グローバルナビゲーションリンクのCurrent表示のためスタイル属性を振るというもの。MTIfをつかわないやつ。

今回はさっと簡単にいきます。MTSetVarとMTVarを使ってやってみます。

アーカイブリストテンプレートに変数を定義

<MTSetVar name='current-archive' value=' class="current"'>

仮に「current-archive」という変数名を定義しておきます。

グローバルナビで変数を呼び出す

li要素にclass属性を付与するといった場合です。

<li<$MTVar name="current-archive"$>>・・・

同様にして、メインインデックスの場合は、「current-mainIndex」というようになります。テンプレートごとにユニークな変数をつけておくという作戦でした。おわり。

テンプレートタグ:(Movable Type テンプレートタグリファレンス)

MTからVoxへクロスポスト

  • Posted by: maRk
  • mt4 | plugins
  • はてなブックマークに追加

Movable TypeからVoxへ同時投稿させるプラグイン、PostVoxを試してみました。

(2010年9月):Voxサービス停止(2010年10月1日)につきPostVoxプラグインの利用を中止しました。

PostVoxプラグインについて

PostVoxは、Yuji Takayama氏が提供されている、Movable Typeのプラグインです。

このプラグインを使用することで、Movable Typeで作成した記事を公開と同時にVoxブログへ投稿(クロスポスト)するというものです。

プラグインの情報なのですが、ネットで調べましたところ、MT4が登場する前の情報と混在しているようです。ということで、このエントリではMT4.1でPostVoxを利用する場合ということに限定した話ということにさせていただきます。

因みにPostVoxは以下のSixApartの記事にて紹介されています。

プラグインを入手して設定する

プラグインの入手は以下のページから。なお、当方が動作確認しているのはMT4.1です。4.01などで動作するかはまではわかりません。

上記ページから直接ファイルをダウンロードできるようです。ダウンロードしたら、解凍して、pluginsディレクトリにフォルダごとアップします。

設定等は見れば大体わかるようになっています。

以下、へたな説明ですみませんがこのような流れです。

  1. ブログのプラグイン設定(システムメニューのほうではない)からPostVoxプラグインのところをクリックして展開。設定タブをクリックする。
  2. ユーザー名・パスワードを設定。投稿させたいVoxブログに入るときのユーザ名・パスワード
  3. URL:は投稿させたいVoxブログのURL
  4. Crosspost by defaultのチェックをいれると、常に新規記事投稿のときクロスポストになり、チェックしなければ、新規記事投稿のときにクロスポストさせたい場合、チェックを入れるような形になる
  5. Cross-posting only excerptのチェックは、記事の概要をVoxにポストする場合にチェック、チェックしないと書いた記事をそのままVoxに投稿となる
  6. 「変更を保存」ボタンクリックで設定完了

記事を書いてクロスポストさせてみる

設定に間違いがなければ、新規記事作成の画面の右ペイン上部に、Cross Postingと書かれた項目が追加されています。

crosspost-vox01.gif

Cross post to Voxのところにチェックが入っている場合、記事投稿と同時にVoxに投稿されます。

あとは記事を書くだけです。参考までにplugin作者さまのVoxブログにて、以下のようなエントリがあがっています。

コメント欄によりますと、perlモジュールの関係からか動作できない場合があるもようです。ワタくシの環境では問題なく投稿できていました。

記事投稿後なのですが、以下のようにクロスポストされた状態としてリンクが挿入されています。

postvox.gif

リンクをクリックしますと、その投稿されたページの編集画面にいきます。ただし、Voxにログインされている状態でクリックしないと、Voxのログイン画面になってしまいます。

投稿に成功していると、Voxブログ側で以下のようになります。設定は、概要を投稿した場合です。この場合は、「read more...」というリンクが挿入されます。

crosspost-vox02.gif

余談なのですが、外部サービスのリンク(twitterプロフィールとか、technoratiプロフィールとか)をがんがん追加できるようなんですね、Vox。クロスポストばかりしてないで、ちょこちょこ弄っていないと進化についていけなくなるかも。

MT本?それともネットから情報?

  • Posted by: maRk
  • mt4 | net
  • はてなブックマークに追加

Movable Type 4関連の書籍が出揃ってきました。さて、MovableTypeのカスタマイズで参考にするのは、ネットの情報を参考にするか、書籍を購入して参照するのとでどちらが効果的なのかと考えてみました。

MT4関連の書籍について

MovableType.jpで以下のようにMT4関連書籍について紹介されていました。

Movable Type 4 の関連書籍が充実より

Movable Type 4 の出荷から7ヶ月、少しずつ関連書籍が充実してきました。今月だけでも2冊以上の発表があり、どれも Movable Type 4.1 に対応しています。

MT4関連書籍の一覧ページも特設されたようですね。

Movable Type 4 関連書籍

また、小粋空間さまにて、Movable Type 4.1 書籍のまとめで関連書籍についてまとめられていますので参考になります。

書籍かネットか

ところで、MTの情報を得たり、カスタマイズしたりするのに書籍からの場合と、ネットでの場合とで、それぞれの特徴などを考えてみました(MTに限定したものでないような気がしますが)。

以下、自分がこう思っている、という部分がすべてなんですが列挙してみます。

書籍を利用する利点

  • パソコンのない環境・ネットに繋いでいない状態で読むことができる
  • カスタマイズするとき、手元に置きながら作業できる
  • ネットは、必要な情報を検索し、自分の欲しい情報をふるいにかけていく必要があるが、書籍では自分が必要な情報があるという前提で購入したのであれば、そのようなことはない

書籍を利用する時の問題点

  • 情報が執筆時点での情報になるので、執筆後の新たな情報については対応できない
  • 出版後に書籍の内容に変更が出てきた場合、ネットから情報を得る必要が出てくる
  • 書籍で紹介したコードの配布をネットでおこなっている、などのサポートがない場合、サンプルコードを直打ちしないといけなくなる。
  • 地方の書店では取り扱っていない場合があって、書店で注文やネットから購入することになる。またネット販売だと書籍の内容を実際に確認できないために、購入後自分の期待している内容とあわずに終わってしまうケースもありうる

ネットからの情報を利用する利点

  • 最新の情報に対応
  • 得る情報量が多い
  • サンプルのソースコードの利用が容易

ネットからの情報を利用する時の問題点

  • 検索がメインになるので、情報を得るまで、検索に費やす時間が増える
  • カスタマイズ作業のとき、MTの管理画面とサイトの画面とを切り替えながら作業しないといけなくなる(パソコン2つでみるとか、画面に2つ並べて表示とか方法はあるけど)
  • 必要でない情報が混在しているページを読まされることになる(アフィリエイトバナーとか)

問題点については、それ程深刻には感じていなんですが。。書籍については、読者へのフォローが出来ているかというのはあると思います。どちらにせよ、効率よく情報を得て活用したいなと考えています。

ウェブページで特定のフォルダのトップページを作成してみる

MT4では、ウェブページを管理することができるようになりましたが、作成したウェブページを特定のフォルダで管理する場合に、そのフォルダのトップページとして、フォルダ一覧のページがあればいいかなと思い作成してみることにしました

追記: このページでは、Movable Type バージョン 4.x においてのフォルダ管理に関してを記しているものです。

MT4で、ウェブページは、特にアーカイブマッピングで指定しない場合、ブログトップページのディレクトリ配下にウェブページが出来ます。

MT4では、フォルダ管理機能があります。フォルダを作成してウェブページを整理していくことも可能なわけです。

このように、フォルダごとでウェブページを管理していく場合に、作成したフォルダのトップページ(例えばindex.html)があって、フォルダ内の一覧を出力してあるようなものがあったらいいかと考えました。

おおまかな手順メモとして示します

フォルダを管理してみる

メニューの [一覧] > [フォルダ] で、フォルダ管理画面になります

例えば、「web」という名前のフォルダを作成したいとき、「トップレベルフォルダを作成」をクリックします。 表示する名前にwebと入力して、「新規作成」をクリックで、<$MTBlogURL$>配下にwebディレクトリが作成されます。

フォルダの編集については以下のドキュメントを参照します。

Movable Type 4 ドキュメント フォルダの編集

*フォルダ名は「英語で表記することをお奨めします」とのことなので、この点に注意する必要があります

実際にウェブページでフォルダを指定して使うには、ブログ公開の[フォルダの変更](MT4.1で右ペインにあります)をクリックして表示されている任意のフォルダ名のラジオボタンをチェックします

フォルダトップページをインデックステンプレートで作る

ここでは、webという名のフォルダを作ってあるという例で/web/index.htmlというインデックステンプレートを作成することを説明していきます

インデックステンプレートを新規作成します。設定等はこのような感じです

テンプレート名
webのインデックス*1
テンプレートの種類
カスタムインデックステンプレート
再構築オプション
任意で設定*2

*1 何でもいいです。 *2 ワタくシはウェブページを作成後に手動でこのテンプレートを再構築するようにするので、インデックステンプレート再構築と同時に再構築しないようにしています。この辺はサイトの運営方法など絡んでくるかと思います

テンプレートの中身をつくる

基本的に、ウェブページアーカイブのテンプレートを丸ごとコピーして貼り付けです。

部分的な修正箇所は、ページタイトルなど、SetVarにタイトル名など指定してあるものを適切な値が得られるように変更します。

ページのコンテンツには、webフォルダ内のウェブページ一覧を示すための記述をいれておきます。例として、以下のようなものです

<MTPages folder="web" lastn="99">
<h2><a href="<$MTPagePermalink$>"><$MTPageTitle$></a></h2>
</MTPages>

folderモディファイアで任意のフォルダを指定します(ここではweb)。 lastn="n" は少なくとも、現在作成してあるウェブページの総ページ数以上は指定することになります。

<MTPages folder="web" lastn="99">
<MTPagesHeader><ul></MTPagesHeader>
<li><a href="<$MTPagePermalink$>"><$MTPageTitle$></a></li>

<MTPagesFooter></ul></MTPagesFooter>
</MTPages>

MTPagesHeader、MTPagesFooterが最初と最後に実行させるためのテンプレートタグです。

作成できたら、リビルドして作業完了です。

作成したページの例

[ 追記:2008年9月15日 ] The blog of H.Fujimotoさまにて、WriteToFileプラグインを利用したフォルダアーカイブページの作成方法が紹介されています。興味のある方は参考にされるとよいでしょう。

今回利用したテンプレートタグ

Index of all entries

BlogTop > MovableType > mt4 Archive

Return to page top