Top > December 2007 [全て開く]

2007年ブログ総括

December 31,2007 12:38 AM
Category:[blog]
Tag:[]
Permalink

今年も無事に1年が過ぎようとしています。このブログも多くの方々に暖かく見守っていただき、感謝しております。

毎年恒例の振り返りです。

書籍

当ブログにおける今年一番のトピックスは、なんといっても Movable Type の書籍「Movable Type WEBデザインの新しいルール」を執筆させて頂けたことです。4月頃から8月末まで執筆にかなりの時間を要し、途中で Movable Type 4 がリリースされて、多くの部分を書き直すというハプニングもありましたが、無事出版にこぎつけ、おかげさまでかなり好調な売れ行きです。

また、執筆中にひとつ目標がありました。それは「ブログの更新を決して滞らせず、1日1エントリーを継続する」ということでした。さらに執筆内容はブログの記事としてほとんど使いまわしをせず、書籍のサンプルデータを掲載したサポートサイトも立ち上げるという、かなり辛い時期が続いていましたが、目標が達成できたことは大きな力になった気がします。

個人的にはこの1冊で終わりだろうと思っていたのですが、実はその後、Movable Type 本の執筆依頼を頂きまして、現在執筆中の案件があります。そういう訳で詳細についてはまた折をみてご報告したいと思います。
1冊目では書ききれなかったことをできるだけ掲載し、「かゆいところに手が届く1冊」にしたいと思ってますので、ご期待ください。

アクセスの多かったエントリーベスト20

Google Analytics の「タイトル別のコンテンツ」より、2007年1月1日から本日までの期間で、アクセスの多かった(トップページ等を除いた)エントリーの上位20エントリーを発表します。

1.Movable Type テンプレート
2.Internet Explorer 6 と Internet Explorer 7 を共存させる
3.Movable Type プラグイン一覧
4.Lightbox JS で画像を表示する
5.Highslide JS でサムネイル画像を拡大表示する
6.WordPress テーマ(テンプレート)・3カラム版
7.CSSで画像に影をつける(ドロップシャドウ)
8.Movable Type を始める前に設定しておきたい 10 の項目
9.RSS Feed(フィード)を表示する
10.Movable Type が WordPress に負けた本当の理由
11.Movable Type 4 テンプレート配布再開
12.Ajax 月送りカレンダー
13.Movable Type の PHP化(その1)
14.Movable Type プラグイン一覧(MT4対応)
15.Litebox 1.0 をブログに適用する
16.JavaScript カレンダー(休日表示付き)
17.IE7 の CSS ハック
18.MySQL + phpMyAdmin によるバックアップ
19.JavaScript エラーを解消する
20.Seesaaブログテンプレート

このランキングは最近1ヶ月のものと比較しましたが、ほとんど入れ替わりはありませんでした。つまりこれらが当ブログのアクセスを支えていることになります。

ちなみに1年間のPVは約305万でした。また上位20エントリーの1年間のPVは約55万で、全てのアクセスがあったページは約7300ページなので、PVについてもロングテール現象が起こっているといえるでしょう。

Amazon の売れ筋商品

2007年1月1日から本日までの注文ベスト20です(同数があったので厳密には21です)。

1位

Movable Type WEBデザインの新しいルール
Movable Type WEBデザインの新しいルール

2位

Movable Type 3.3 でつくる!最強のブログサイト
Movable Type 3.3 でつくる!最強のブログサイト

3位

Movable Typeでつくる!最強のブログサイト プラグイン&カスタマイズ編
Movable Typeでつくる!最強のブログサイト プラグイン&カスタマイズ編

4位

GriffinTechnology iTalk Pro GRI-IP-000063
GriffinTechnology iTalk Pro GRI-IP-000063

Movable Type公式タグリファレンス 第2版
Movable Type公式タグリファレンス 第2版

6位

Movable Typeで今日から始めるカスタムブログ―4.0完全対応
Movable Typeで今日から始めるカスタムブログ―4.0完全対応

AjaxとPHPによる MovableType高速&最強システム構築法
AjaxとPHPによる MovableType高速&最強システム構築法

8位

WebクリエイティブのためのCMSテンプレートデザイン (Web Designing BOOKS)
WebクリエイティブのためのCMSテンプレートデザイン (Web Designing BOOKS)

9位

ブログ簡単パワーアップ Movable Type スーパーカスタマイズテクニック
ブログ簡単パワーアップ Movable Type スーパーカスタマイズテクニック

Qステア QSS02B ハマーH2ブラック (C/D)
Qステア QSS02B ハマーH2ブラック (C/D)

11位

Dr.Blogの実例から学ぶ Movable Type オリジナルブログデザイン 3.2/3.3対応
Dr.Blogの実例から学ぶ Movable Type オリジナルブログデザイン  3.2/3.3対応

Movable Typeではじめる ビジネスブログ・テンプレートブック
Movable Typeではじめる ビジネスブログ・テンプレートブック

MOVABLETYPE PLUGINS DIRECTORY
MOVABLETYPE PLUGINS DIRECTORY

14位

エアーパッドプロIII(マットブラック) 大サイズ PAG-81
エアーパッドプロIII(マットブラック) 大サイズ PAG-81

Web標準XHTML+CSSデザイン クリエイターが身につけておくべき新・100の法則。
Web標準XHTML+CSSデザイン  クリエイターが身につけておくべき新・100の法則。

WordPress標準ガイドブック―導入&基本操作からフルチューンまで
WordPress標準ガイドブック―導入&基本操作からフルチューンまで

17位

ブログに挑戦してみよう! (NHK趣味悠々―中高年のためのパソコン講座)
ブログに挑戦してみよう! (NHK趣味悠々―中高年のためのパソコン講座)

Webユーザビリティ・デザイン Web制作者が身につけておくべき新・100の法則。
Webユーザビリティ・デザイン  Web制作者が身につけておくべき新・100の法則。

Web Site Expert #14
Web Site Expert #14

Web Designing (ウェブデザイニング) 2007年 05月号 [雑誌]
Web Designing (ウェブデザイニング) 2007年 05月号 [雑誌]

Movable Typeで今日から始めるカスタムブログ―3.3完全対応
Movable Typeで今日から始めるカスタムブログ―3.3完全対応

ダントツ1位が拙著で、このブログでの宣伝で購入してくださった方が大勢いらっしゃたこと、感謝しています。またエントリーで紹介していない商品も意外に売れています。

まとめ

昨年と同じコメントですが、とにかく無事に1年を終えることができたことが何よりの喜びです。皆様には大変お世話になりました。来年もテンプレート・カスタマイズ記事にダジャレ、さらに新たな書籍の出版に向けてブログを書き続ける所存ですので、ご指導・ご鞭撻の程、どうぞよろしくお願い致します。

それでは2008年もどうぞよろしくお願い致します。そして良いお年をお迎えください。

Comments [0] | Trackbacks [0]

著作権表示の年号を自動更新するプラグイン V1.1 for WordPress

December 30,2007 1:50 AM
Category:[その他]
Tag:[, , ]
Permalink

先日公開した、WordPress で著作権表示の年号(西暦表示)を自動更新するプラグイン wp-copyright を、リアルタイム版に変更しました。

著作権表示の年号を自動更新するプラグイン

変更箇所は、著作権表示の年号の最終年を、最新の公開記事の投稿年ではなく、ページ表示時のタイムスタンプから取得するようにしました。ご利用のサーバのタイムスタンプに狂いがなければ年が明けたと同時に著作権表示の年号が切り替わります。

プラグインのダウンロードは下記のリンクからどうぞ。

著作権表示の年号を自動更新するプラグイン for WordPress
Comments [0] | Trackbacks [1]

冬に食べても

December 29,2007 12:38 AM
Category:[ダジャレ]
Tag:[]
Permalink
Comments [0] | Trackbacks [0]

dtree のサブカテゴリーリストにブログ記事タイトルを表示する for Movable Type

以前ご紹介した、「dTree によるサブカテゴリーリスト for Movable Type」で、ブログ記事タイトルを表示するカスタマイズをご紹介します。

dTree とは、エクスプローラー風のツリー表示用スクリプトです。下記のサンプルで動作をご確認ください。

サンプル

本エントリーのカスタマイズを行うことで、下のスクリーンショットのように、各カテゴリー配下に属するブログ記事タイトルを表示させることができます。

dTreeにブログ記事タイトルを表示

以下、サブカテゴリーリストにブログ記事タイトルを表示するカスタマイズです。なお、この記事の5項の設定を行う前に、「dTree によるサブカテゴリーリスト for Movable Type」の4項までを設定しておいてください。

5.dTree サブカテゴリーリスト表示用タグ設定

テンプレートで、サブカテゴリーリストを表示したい位置に下記のタグを設定してください。

表示用タグは PHP 版と JavaScript 版、MTタグ版を用意しました。表示される結果はどれも同じです。

5.1 PHP版

このタグを設定する場合、PHP化を行っていることが前提です。

<script type="text/javascript">
d = new dTree('d');
d.config.useCookies=false;
d.add(0, -1,'SubCategories','javascript: void(0);');
<?php $cat_number = 0; $level = 0; $tree = array(); ?>
<MTTopLevelCategories>
<?php $tree[$level] = ++$cat_number; if(!$level) { ?>
    d.add(<?php echo $cat_number ?>, 0,'<$MTCategoryLabel encode_php="1"$>','<MTIfNonZero tag="MTCategoryCount"><$MTCategoryArchiveLink$><MTElse>javascript: void(0);</MTElse></MTIfNonZero>');
<?php } else { if(!$tree[$level - 1]) { ?>
    d.add(<?php echo $cat_number ?>, 1,'<$MTCategoryLabel encode_php="1"$>','<MTIfNonZero tag="MTCategoryCount"><$MTCategoryArchiveLink$><MTElse>javascript: void(0);</MTElse></MTIfNonZero>');
<?php } else { ?>
    d.add(<?php echo $cat_number ?>, <?php echo $tree[$level - 1] ?>,'<$MTCategoryLabel encode_php="1"$>','<MTIfNonZero tag="MTCategoryCount"><$MTCategoryArchiveLink$><MTElse>javascript: void(0);</MTElse></MTIfNonZero>');
<?php }} ?>
<MTEntries>
<MTEntriesHeader>
<?php $level++; ?>
</MTEntriesHeader>
<?php $cat_number++; ?>
  d.add(<?php echo $cat_number ?>, <?php echo $tree[$level - 1] ?>,'<$MTEntryTitle encode_php="1"$>','<$MTEntryPermalink$>');
<MTEntriesFooter>
<?php $level--; ?>
</MTEntriesFooter>
</MTEntries>
<?php $level++; ?>
<MTSubCatsRecurse>
<?php $level--; ?>
</MTTopLevelCategories>
document.write(d);
</script>
<p style="text-align:center"><a href="javascript: d.openAll();">open all</a> | <a href="javascript: d.closeAll();">close all</a></p>

5.2 JavaScript 版

<script type="text/javascript">
d = new dTree('d');
d.config.useCookies=false;
d.add(0, -1, 'SubCategories','javascript: void(0);');
var cat_number = 0;
var level = 0;
var link = new Array();
<MTTopLevelCategories>
link[level] = ++cat_number;
if(!level) {
    d.add(cat_number, 0,'<$MTCategoryLabel encode_js="1"$>','<MTIfNonZero tag="MTCategoryCount"><$MTCategoryArchiveLink$><MTElse>javascript: void(0);</MTElse></MTIfNonZero>');
} else {
    if(!link[level - 1]) {
        d.add(cat_number, 1,'<$MTCategoryLabel encode_js="1"$>','<MTIfNonZero tag="MTCategoryCount"><$MTCategoryArchiveLink$><MTElse>javascript: void(0);</MTElse></MTIfNonZero>');
    } else {
        d.add(cat_number, link[level - 1],'<$MTCategoryLabel encode_js="1"$>','<MTIfNonZero tag="MTCategoryCount"><$MTCategoryArchiveLink$><MTElse>javascript: void(0);</MTElse></MTIfNonZero>');
    }
}
<MTEntries>
<MTEntriesHeader>
level++;
</MTEntriesHeader>
cat_number++;
  d.add(cat_number, link[level - 1],'<$MTEntryTitle encode_js="1"$>','<$MTEntryPermalink$>');
<MTEntriesFooter>
level--;
</MTEntriesFooter>
</MTEntries>
level++;
<MTSubCatsRecurse>
level--;
</MTTopLevelCategories>
document.write(d);
</script>
<p style="text-align:center"><a href="javascript: d.openAll();">open all</a> | <a href="javascript: d.closeAll();">close all</a></p>

5.3 テンプレートタグ版(MT4.1 以上のみ対応)

<script type="text/javascript">
d = new dTree('d');
d.config.useCookies=false;
d.add(0, -1,'Categories','javascript: void(0);');
<$mt:setvar name="cat_number" value="1"$>
<$mt:setvar name="level" value="1"$>
<MTTopLevelCategories>
<$mt:setvar name="cat_number" op="++"$>
<$mt:setvar name="tree[$level]" value="$cat_number"$>
<mt:if name="level" eq="1">
  d.add(<$mt:getvar name="cat_number" op="--"$>, 0,'<$MTCategoryLabel escape="html"$>','<MTIfNonZero tag="MTCategoryCount"><$MTCategoryArchiveLink$><MTElse>javascript: void(0);</MTElse></MTIfNonZero>');
<mt:else>
  d.add(<$mt:getvar name="cat_number" op="--"$>, <$mt:setvar name="tmp" value="$level"$><$mt:setvar name="tmp" op="--"$><$mt:getvar name="tree[$tmp]" op="--"$>,'<$MTCategoryLabel escape="html"$>','<MTIfNonZero tag="MTCategoryCount"><$MTCategoryArchiveLink$><MTElse>javascript: void(0);</MTElse></MTIfNonZero>');
</mt:if>
<MTEntries>
<MTEntriesHeader>
<$mt:setvar name="level" op="++"$>
</MTEntriesHeader>
<$mt:setvar name="cat_number" op="++"$>
  d.add(<$mt:getvar name="cat_number" op="--"$>, <$mt:setvar name="tmp" value="$level"$><$mt:setvar name="tmp" op="--"$><$mt:getvar name="tree[$tmp]" op="--"$>,'<$MTEntryTitle escape="html"$>','<$MTEntryPermalink$>');
<MTEntriesFooter>
<$mt:setvar name="level" op="--"$>
</MTEntriesFooter>
</MTEntries>
<$mt:setvar name="level" op="++"$>
<$MTSubCatsRecurse$>
<$mt:setvar name="level" op="--"$>
</MTTopLevelCategories>
document.write(d);
</script>
<p style="text-align:center"><a href="javascript: d.openAll();">open all</a> | <a href="javascript: d.closeAll();">close all</a></p>

以上です。

2007.12.28
MT3.x でパーマリンクが正常に生成されない不具合を修正しました(MTEntryPermaLink を MTEntryPermalink に修正)。

Comments [5] | Trackbacks [0]

MTLoop タグによる配列変数・ハッシュ変数の制御

December 27,2007 1:35 AM
Category:[4.1, テンプレートタグ]
Tag:[, ]
Permalink

Movable Type 4.0 では管理画面用だった MTLoop タグが、Movable Type 4.1 ではテンプレート上で利用できるようになりました。これにより配列やハッシュの取得が MTLoop タグで実現できるようになります。

以下、MTLoop での配列とハッシュの利用方法を紹介します。

1.配列を取得する

MTFor タグで設定し、MTLoop タグで取得するサンプルを示します。

<mt:for var="i" from="0" to="9">
    <mt:setvar name="foo[$i]" value="$i">
</mt:for>
 
<mt:loop name="foo">
    <mt:getvar name="__value__">
</mt:loop>

MTLoop タグの使い方は、name モディファイアに配列変数名を設定するだけで、ここでは foo を設定しています。

配列変数 foo の値は予約変数 __value__ に自動的に設定されるので、あとは MTGetVar タグの name モディファイアに指定するだけです。

MTLoop タグの部分を MTFor タグで書くと

<mt:for var="i" from="0" to="9">
    <mt:setvar name="foo[$i]" value="$i">
</mt:for>

となるので、MTLoop タグの方が簡単に書けることがお分かりになると思います。

なお、MTLoopタグでは配列のインデックスが0から処理が開始されるため、設定側の MTFor タグの from モディファイアは「0」、to モディファイアは「9」を設定しています。

2.ハッシュを取得する

4.1 ベータ 2 から新しく追加された sethashvar タグ(ハッシュをまとめて定義できるタグ)を用いて、ハッシュを作成し、MTLoop タグで取得するサンプルを示します。

<mt:sethashvar name="week">
<mt:setvar name="mon" value="Monday">
<mt:setvar name="tue" value="Tuesday">
<mt:setvar name="wed" value="Wednesday">
<mt:setvar name="thu" value="Thursday">
<mt:setvar name="fri" value="Friday">
<mt:setvar name="sat" value="Saturday">
<mt:setvar name="sun" value="Sunday">
</mt:sethashvar>
 
<mt:loop name="week">
    <$mt:getvar name="__key__"$> <$mt:getvar name="__value__"$>
</mt:loop>

テンプレートを再構築すると、下のように出力されます。

sun Sunday
fri Friday
tue Tuesday
sat Saturday
mon Monday
wed Wednesday
thu Thursday

配列変数の時と同様、name モディファイアに配列変数名を設定します。ここでは week を設定します。

配列変数 week のキーの値は予約変数 __key__ に、キーに対応する値は予約変数 __value__ に自動的に設定されるので、それぞれ MTGetVar タグの name モディファイアに指定します。

ハッシュは配列のような順序性がありませんが、sort_by モディファイアを設定することで、一定の規則にしたがって出力されます。

キーの文字列順で並べ替え

<mt:loop name="[変数名]" sort_by="key">

キーの文字列順(逆順)で並べ替え

<mt:loop name="[変数名]" sort_by="key reverse">

キーに対応する値の文字列順で並べ替え

<mt:loop name="[変数名]" sort_by="value">

キーに対応する値の文字列順(逆順)で並べ替え

<mt:loop name="[変数名]" sort_by="value reverse">

キーに対応する値の文字を数値として比較・並べ替え

<mt:loop name="[変数名]" sort_by="value numeric">

キーに対応する値の文字を数値として比較・並べ替え(逆順)

<mt:loop name="[変数名]" sort_by="value numeric reverse">
Comments [5] | Trackbacks [0]

404 Blog Not Found の Amazon アソシエイト収入を探る

December 26,2007 1:00 AM
Category:[小品文]
Tag:[]
Permalink

ブロガー・小飼さんが「Amazon総決算2007」という記事を書かれていたので、記事中の文言から Amazon アソシエイトの収入がどの位あるのか計算してみました。

404 Blog Not Found

たいした計算でもなく、激しく誤差があるように思いますが、推測して楽しむというレベルなので、予めご容赦ください。

まず、売れ筋の中心は書籍(のはず)なので、とりあえず元記事の年間ベスト100から1~10位の書籍の価格を合計したところ約10000円だったので、かなりおおざっぱに1点につき1000円と仮定しました。

次に、

ここ半年ほどは点数で一日3桁が常態になってきた

と書かれているので、最低でも毎日100点の注文があるものと、これもおおざっぱに仮定してみました。

Amazon アソシエイトの紹介料は、「パフォーマンスプラン」でかつ、発送済み商品合計が約3000点(100点 * 1ヶ月)とすれば、6.50%になるので、1冊の注文につき65円の紹介料があります。

つまり、月平均で 3000点 * 65円 = 195,000円の収入があることになります。

ただ、当ブログのはるかに少ない Amazon 収入にこの計算式をあてはめると誤差がある(実際はもっとあるように思われる)ので、これは少なく見積もっていると思ってください。

ということで、Amazon アソシエイトの収入のみだけでも、

ブロガーは副業として紹介しても恥ずかしくないだけの収益

がある、ということになりますが、実際にはこれに AMN の広告料が加わります。

ますますのご活躍を。

Comments [0] | Trackbacks [0]

CORESERVER / XREA にcron ジョブ(Movable Type 4 の run-periodic-tasks)を設定する

December 25,2007 12:03 AM
Category:[管理画面]
Tag:[, , , ]
Permalink

CORESERVER や XREA では crontab コマンドでは cron を設定できない(一瞬できますが削除されます)ので、管理画面より設定します。

ここではMovable Type 4 の run-periodic-tasks を例に手順を紹介します。

1.シェルスクリプトの作成

「シェルスクリプト」とは、Linux上のコマンドを制御するプログラミング言語が記述されたファイルを指します。
まず、以下のような内容のシェルスクリプトを任意のテキストエディタで作成します。

#!/bin/sh
cd /virtual/***/public_html/mt
/usr/bin/perl ./tools/run-periodic-tasks
exit

2行目の赤色の部分、*** はユーザによって異なります。また、「mt」は Movable Type のアプリケーションディレクトリ(mt.cgi があるところ)を指定してください。
1行目と3行目、4行目の記述内容は固定です。

この内容を cron.sh というファイル名で保存します。ファイルの名前は任意ですが、拡張子は必ず .sh にしてください。
なお改行コードは必ずLFで保存してください。Windows のメモ帳では改行コードは CR+LF になってしまうので、他のフリーのエディタを使いましょう。

2.ファイルのアップロード

FTPツールで cron.sh をアップロードします。ここではユーザディレクトリ(public_html のひとつ上の階層)にアップロードします。
アップロード後、cron.sh のパーミッションを 705 に変更してください。

3.cron ジョブの設定

CORESERVERの管理画面ログイン

ログイン画面

「CORESERVERアカウントの登録・管理・購入」をクリック

ユーザーコントロールパネル

「サーバー設定」をクリック。

CORESERVERアカウントの登録・管理・購入画面

「入室」をクリック(ブラウザによっては自動で画面遷移します)

入室画面

サイドメニューの「CRONジョブ」をクリック

CORESERVERアカウントの登録・管理・購入画面

アップロードしたファイルをCRON ジョブに登録します(画面から切れてますが、曜日の部分も * を設定)

CRON ジョブに登録

これは毎時0分に cron.sh を実行する設定です。数字は時間、* は全ての期間に対応する意味です。「時」に * をつけると「毎時実行する」という意味になります。

設定後、「保存」をクリックしてください。

4.エラーメールを送信しない

cron ジョブにエラーがあると、登録しているメールアドレスにエラーメールが送信されます。このエラーメールの送信を行いたくない場合は、シェルファイル名の後に「 >/dev/null 2>&1」を付けます。

CRON ジョブに登録

最初はこの設定を行わず、エラーメールが送信されないことを確認してからの方がいいでしょう。

5.その他

CORESERVER での cron ジョブ実行については以下の条件があります。

  • ジョブの最大実行時間は3分です。それを超えるものは強制停止されます
  • CORESERVER でのジョブの実行間隔は最短で1時間に1回です
  • 削除する場合は、「/virtual/***/~」を空にし保存して下さい
  • ジョブの負荷はCGI負荷として加算されます

2008.09.22
XREA を追加しました。

Comments [1] | Trackbacks [1]

CodePress を無効にするプラグイン

December 24,2007 1:11 AM
Category:[管理画面]
Tag:[, , ]
Permalink

Movable Type 4 のテンプレート編集画面のハイライトには、CodePress というツールが利用されています。
この機能を無効にして切り替え用アイコンを非表示にするプラグインを作りました。MT4.01/MT4.1で動作することを確認しています。

適用前

 InvalidateCodePress適用前

適用後

 InvalidateCodePress適用後

このプラグインは下記の記事を元に作成させて頂きました。ありがとうございました。

Movable Type備忘録テンプレート編集画面の CodePress をオフする

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

下記のリンクよりプラグインをダウンロードします。

InvalidateCodePress.zip

2.プラグインのインストール

ダウンロードしたプラグインを解凍し、中にある InvalidateCodePress.pl を plugins フォルダにアップロードしてください。
「システム」→「プラグイン」で InvalidateCodePress が表示されていればインストール完了です。

「システム」→「プラグイン」

3.テンプレート編集画面の確認

任意のテンプレート編集画面を表示し、テンプレート編集画面のハイライトが無効で、切り替え用アイコンが非表示になっていればOKです。

InvalidateCodePress適用後

Comments [0] | Trackbacks [0]

Movable Type 4.1 ベータ 2 リリース

December 23,2007 12:02 AM
Category:[4.1]
Tag:[, ]
Permalink

Movable Type 4.1 ベータ 2 が公開されました。

ベータ1も含め、ファイルのアップロード画面およびアイテム管理画面が変わっていましたので、以下に紹介します。

ベータ2ではファイルのアップロード画面でフォルダの選択画面が追加されました。

ファイルのアップロード画面1

アップロードしたファイルを使ってブログ記事を作成する時の位置指定に「なし」が追加されました。

ファイルのアップロード画面2

ベータ1から、アイテムの一覧画面が変更されています。画像やファイル名をクリックすると情報を編集できるようになりました。

ファイルのアップロード画面2

画像をクリックすると拡大表示される機能はそのままです。

アイテムの編集画面

これがアイテムの編集画面です。アイテムの名前や説明、タグが編集可能です。

アイテムの編集画面

右下にある「アイテムの埋め込み」をクリックすると、

ファイルのアップロード画面2

このようにテキストフィールドにアイテムのURLが表示されます。

ファイルのアップロード画面2

Comments [5] | Trackbacks [1]

Google マップに

December 22,2007 11:36 AM
Category:[ダジャレ]
Tag:[]
Permalink
Comments [2] | Trackbacks [0]

Movable Type 4 で PHP 化する時の注意事項

December 21,2007 1:33 AM
Category:[PHP化]
Tag:[, , ]
Permalink

Movable Type 4.0~4.1 では、「ヘッダー」「フッター」「サイドバー」等、各ページで共通的に使える部分を「テンプレートモジュール」として定義しているので、一ヶ所を修正して再構築すれば全ページに反映されるという、いわゆる「保守性」が向上しました。

しかし、PHP 化を行っている場合、「ヘッダー」テンプレートモジュールに PHP スクリプトが記述されていると、PHP 化の対象とならない「システムテンプレート(コメントプレビュー/コメント完了/検索結果)」にも PHP スクリプトが表示されてしまうため、期待しない表示になるケースがあります。

以下、システムテンプレートで PHP スクリプトを表示しない回避策を示します。

1.基本

PHP スクリプト全体を、下記のように MTUnless タグで括ります。

<MTUnless name="system_template">
    :
  [PHP スクリプト]
    :
</MTUnless>

とする必要があります。name 属性の system_template はお分かりのようにシステムテンプレートであることを示す変数で、この条件を満たさない場合、つまりシステムテンプレートでない場合のみ、MTUnless タグのブロックを実行します。

代表的な例として、ヘッダの先頭(=ページの先頭)に

<? php echo('<?xml version="1.0" encoding="utf-8"?>'); ? >

がある場合は、

<MTUnless name="system_template">
<? php echo('<?xml version="1.0" encoding="utf-8"?>'); ? >
</MTUnless>

としてください。

注:実際に使用する場合は、リストの改行をすべて除去して1行にしてください。

2.応用

PHPスクリプトの内部に、システムテンプレートでも表示させたい内容がある場合は、MTUnless タグを PHP スクリプトに部分的に適用します。

例えば、1項の XML 宣言の対処では、システムテンプレートに XML 宣言が表示されません。これを表示させたい場合は次の2つの方法があります。

2.1 PHP スクリプトを部分的に MTUnless タグで括る

システムテンプレートで実行させたくない部分だけを MTUnless タグで括ります。

<MTUnless name="system_template">
<? php echo('
</MTUnless>
<?xml version="1.0" encoding="utf-8"?>
<MTUnless name="system_template">
'); ? >
</MTUnless>

注:実際に使用する場合は、リストの改行をすべて除去して1行にしてください。

2.2 MTElse タグを利用する

MTElse タグを利用して、MTElse タグブロック内部には、システムテンプレートで表示させたい内容を再掲します。

<MTUnless name="system_template">
<? php echo('<?xml version="1.0" encoding="utf-8"?>'); ? >
<MTElse>
<?xml version="1.0" encoding="utf-8"?>
</MTUnless>

注:実際に使用する場合は、リストの改行をすべて除去して1行にしてください。

3.注意事項

system_template という変数は、各システムテンプレートの先頭に

<MTSetVar name="system_template" value="1">

という形で記述されているものを利用しています。

独自にテンプレートを作成されている場合は、各システムテンプレートの先頭に上記の MTSetVar タグが記述されていることを確認し、記述されていない場合は追加してください。

2008.10.07
バージョンを 4.0~4.1 に限定しました。

Comments [10] | Trackbacks [2]

dTree を Movable Type 4.1/MTOS のネイティブタグで実装する

December 20,2007 1:55 AM
Category:[JavaScript, カテゴリー]
Tag:[, , ]
Permalink

Movable Type 4.1/MTOS で変数の算術演算子と配列およびハッシュが実装されたことで、PHPあるいはJavaScriptとの組み合わせが必要だった処理が、ネイティブなタグのみで実装可能になりました。

全てのコードについて移植が可能であるかどうかは不明ですが、どの程度の威力があるか検証してみたかったので、サンプルとして、以前紹介した dTree のカスタマイズについてテンプレートタグで実装してみました。

1.dTree について

機能や設定方法は下記の記事を参照願います(実際にご利用になる場合、この記事の4項までの設定が必要です)。

dTree によるサブカテゴリーリスト for Movable Type

で、元記事で紹介したPHP版のスクリプトは下記の通りです(若干直しました)。

<script type="text/javascript">
d = new dTree('d');
d.config.useCookies=false;
d.add(0, -1,'Categories','javascript: void(0);');
<?php $cat_number = 0; $level = 0; $tree = array(); ?>
<MTTopLevelCategories>
<?php $tree[$level] = ++$cat_number; if(!$level) { ?>
    d.add(<?php echo $cat_number ?>, 0,'<$MTCategoryLabel encode_php="1"$>','<MTIfNonZero tag="MTCategoryCount"><$MTCategoryArchiveLink$><MTElse>javascript: void(0);</MTElse></MTIfNonZero>');
<?php } else { ?>
    d.add(<?php echo $cat_number ?>, <?php echo $tree[$level - 1] ?>,'<$MTCategoryLabel encode_php="1"$>','<MTIfNonZero tag="MTCategoryCount"><$MTCategoryArchiveLink$><MTElse>javascript: void(0);</MTElse></MTIfNonZero>');
<?php } $level++; ?>
<MTSubCatsRecurse max_depth="3">
<?php $level--; ?>
</MTTopLevelCategories>
document.write(d);
</script>
<p style="text-align:center"><a href="javascript: d.openAll();">open all</a> | <a href="javascript: d.closeAll();">close all</a></p>

再掲になりますが、dTree によるサブカテゴリーリストの完成イメージは次の通りです。

dTree によるサブカテゴリーリスト

この表示を行うための JavaScript は次の内容になっています(上記のPHPスクリプトから生成されたものです)。

<script type="text/javascript">
d = new dTree('d');
d.config.useCookies=false;
d.add(0, -1,'Categories','javascript: void(0);');
d.add(1, 0,'test1','http://.../test/');
d.add(2, 1,'test1-1','http://.../test/test11/');
d.add(3, 2,'test1-1-1','http://.../test/test11/test111/');
d.add(4, 2,'test1-1-2','http://.../test/test11/test112/');
d.add(5, 1,'test1-2','http://.../test/test12/');
d.add(6, 5,'test1-2-1','http://.../test/test12/test121/');
d.add(7, 5,'test1-2-2','http://.../test/test12/test122/');
d.add(8, 0,'test2','http://.../test2/');
d.add(9, 8,'test2-1','http://.../test2/test21/');
document.write(d);
</script>
<p style="text-align:center"><a href="javascript: d.openAll();">open all</a> | <a href="javascript: d.closeAll();">close all</a></p>

スクリーンショットと JavaScript(のカテゴリー)の対応はなんとなくお分かりになると思いますが、

d.add(...) 

の行で、カテゴリー部分を表示させています。

本エントリーでは、Movable Type のネイティブタグのみで、このカテゴリーを表示する部分の JavaScript を生成します。

2.dTree のカテゴリー表示部分のフォーマット

先程も簡単に紹介しましたが、JavaScript でカテゴリーを表示する部分は add 関数がキモとなっており、関数のパラメータは、

d.add([*1],[*2],[カテゴリー名],[カテゴリーのURL *3]);
*1:カテゴリーに一意に割り当てられたdTree用のカテゴリー番号
*2:そのカテゴリーが属する親カテゴリーの番号
"0"はdTreeのルートに属する場合(=最上位のカテゴリー)
*3:dTreeの生成するa要素のhref属性になります。

となっています。

上記の add 関数部分を、サブカテゴリーリストを出力するサブテンプレートを応用して作成します。以下、add 関数の各パラメータをどのようなロジックで作成するかという解説を交えながら、ネイティブなテンプレートを組み立てていきます。

3.各パラメータ用のデータ生成方法

3.1 第1パラメータ用のデータ生成

第1パラメータはカテゴリーに番号を順に付与していけば良いだけので、リスト1のように、

リスト1

<$mt:setvar name="cat_number" value="1"$>
<MTTopLevelCategories>
  <$mt:setvar name="cat_number" op="++"$>
  d.add(<$mt:getvar name="cat_number"$>,~略~);
  <$MTSubCatsRecurse$>
</MTTopLevelCategories>

とすれば良いことが分かります。

1行目でカテゴリー番号保持用の変数(cat_number)を1で初期化し、MTTopLevelCategories タグのループ内でインクリメントしていきます。
そしてインクリメント後に add 関数の第1パラメータに表示させればOKです。

3.2 第2パラメータ用のデータ生成

第2パラメータの、自カテゴリーの属する親カテゴリー番号を算出する方法は色々なアプローチがあると思いますが、ここでの方法は、まず算出に必要なデータとして、現在処理されているカテゴリーの階層をインデックスとした自カテゴリー番号を、配列の変数として保持します。

「カテゴリーの階層」は、親カテゴリーの階層は0、子カテゴリーの階層は1、孫カテゴリーの階層は2...、という具合に、数値で表すこととします。

「カテゴリーの階層をインデックスとした自カテゴリー番号を、配列の変数として保持」とは、例えば一番最初の「カテゴリー1」を処理している時、このカテゴリーはルート階層(数値で表すと0)に属するので、

tree[0]=1

という変数を作成することを指しています。左辺の変数 tree のインデックス0が階層の番号を示し、右辺の1がカテゴリー番号を示します。

「カテゴリー2」を処理している時、このカテゴリーは親カテゴリー(数値で表すと1)に属するカテゴリーなので、

tree[1]=2

という変数を作成します。

この規則によって、各カテゴリーを処理する時には、刻々と内容が書き換わる、次のような配列が作成されます。

カテゴリー1の処理中:tree[0]=1
カテゴリー2の処理中:tree[1]=2
カテゴリー3の処理中:tree[2]=3
カテゴリー4の処理中:tree[2]=4
カテゴリー5の処理中:tree[1]=5
カテゴリー6の処理中:tree[2]=6
カテゴリー7の処理中:tree[2]=7
カテゴリー8の処理中:tree[0]=8
カテゴリー9の処理中:tree[1]=9

少し話が難しくなりますが、このデータは次回の繰り返し処理で利用するためのものです。つまり、カテゴリー1の処理中に作成された、一番最初の、

tree[0]=1

は(MTTopLevelCategories の)繰り返し処理の中でそのまま保持されており、次のカテゴリー2の処理の時に利用される、ということだけをとりあえず覚えていてください。

前置きが長くなりましたが、上記のデータを作成するサブテンプレートは、リスト2のようになります(青色はリスト1からの追加部分)。

リスト2

<$mt:setvar name="cat_number" value="1"$>
<$mt:setvar name="level" value="1"$>
<MTTopLevelCategories>
  <$mt:setvar name="cat_number" op="++"$>
  <$mt:setvar name="tree[$level]" value="$cat_number"$>
  d.add(<$mt:getvar name="cat_number"$>,~略~);
  <$MTSubCatsRecurse$>
  <$mt:setvar name="level" op="++"$>
  <$MTSubCatsRecurse$>
  <$mt:setvar name="level" op="--"$>
</MTTopLevelCategories>

2行目で配列インデックス用の変数levelを初期化し、5行目で、処理中のカテゴリー番号を、現在の階層をインデックスとした配列データに保持します。

階層の数値の増減は、MTSubCatsRecurse の直前と直後で操作しています。

プログラミングに不慣れな方には分かりにくいのですが、MTSubCatsRecurseはいわゆる再帰処理を行うためのタグで、現在処理しているカテゴリーに子カテゴリーが存在する場合、MTSubCatsRecurse の内容を取り出し、 MTTopLevelCategories の中で処理します。

つまり MTSubCatsRecurse は次の階層を処理するための再帰データとなるので、その直前で変数 level をインクリメントすることで、階層用のデータがインクリメントされます。

また、MTSubCatsRecurse の直後でデクリメントすれば、階層の数値を親カテゴリーの階層に戻せます。
さらに MTSubCatsRecurse の中に孫カテゴリーデータが存在すれば、変数 level はさらにインクリメントされることになります。

これでdTreeに必要なデータが揃いましたので、あとは子カテゴリーが属する親カテゴリーのカテゴリー番号を求めるだけです。
これは、現在処理されているデータの階層からデクリメントした配列の値、つまり自カテゴリーの上位の階層のカテゴリー番号を取得すればいい訳です。

言い換えると、例えば2行目の、

tree[1]=2

の親カテゴリー番号を求める場合、上位の階層は

tree[0]

であり、その中に親のカテゴリー番号が設定されているので、配列のインデックスをデクリメント(-1)、つまり、

tree[1-1]

とすれば、tree[0] が求まります。あとはそこに設定されているカテゴリー番号1を取得すれば良い訳です。

また、4行目の

tree[2]=4

の親カテゴリーを求める場合、上位の階層は

tree[1]

となり、その中にカテゴリー番号が設定されているので、インデックスをデクリメント(-1)、つまり

tree[2-1]

とすれば、tree[1] が求まるので、あとはそこに設定されているカテゴリー番号2を取得すれば良い訳です。

話をまとめると、リスト3のようになります(青色はリスト2からの追加部分)。

リスト3

<$mt:setvar name="cat_number" value="1"$>
<$mt:setvar name="level" value="1"$>
<MTTopLevelCategories>
  <$mt:setvar name="cat_number" op="++"$>
  <$mt:setvar name="tree[$level]" value="$cat_number"$>
  <mt:if name="level" eq="1">
    d.add(<$mt:getvar name="cat_number"$>, 0,'<$MTCategoryLabel escape="js"$>','<MTIfNonZero tag="MTCategoryCount"><$MTCategoryArchiveLink$><MTElse>javascript: void(0);</MTElse></MTIfNonZero>');
  <mt:else>
    d.add(<$mt:getvar name="cat_number"$>, <$mt:setvar name="tmp" value="$level"$><$mt:setvar name="tmp" op="--"$><$mt:getvar name="tree[$tmp]"$>,'<$MTCategoryLabel escape="js"$>','<MTIfNonZero tag="MTCategoryCount"><$MTCategoryArchiveLink$><MTElse>javascript: void(0);</MTElse></MTIfNonZero>');
  </mt:if>
  <$mt:setvar name="level" op="++"$>
  <$MTSubCatsRecurse$>
  <$mt:setvar name="level" op="--"$>
</MTTopLevelCategories>

追加した6~10行目のうち、9行目が該当します。
第2パラメータの値に配列変数treeのデータを表示しています。

6行目の MTIf で処理を振り分けている理由ですが、親カテゴリーを処理している場合、さらに上位の階層(つまり dTree のルート階層)データを取得しようとしますが、これまでの処理では設定されていないデータなので、エラーを避けるため、その場合のみ、7行目で第2パラメータに固定で0を設定するようにしています。

3.3 第3パラメータ用のデータ生成

第3パラメータのカテゴリー名には、<$MTCategoryLabel escape="js"$> を記述するだけです。なお、JavaScript として正常に動作するよう、escape モディファイアに "js" を指定します。

3.4 第4パラメータ用のデータ生成

第4パラメータには、リスト4のようにカテゴリーのリンク、

リスト4

<MTIfNonZero tag="MTCategoryCount">
<$MTCategoryArchiveLink$>
<MTElse>
javascript: void(0);
</MTElse>
</MTIfNonZero>

を設定します。

カテゴリーにブログ記事が1件以上投稿されている場合は、カテゴリーアーカイブへのリンクを設定し、投稿されていなければリンクの代わりに "javascript: void(0);" を設定し、リンクをクリックしてもページ遷移が発生しないようにしています。

最後に、第1パラメータと第2パラメータに表示される値をデクリメントします(青色はリスト3からの追加部分)。

リスト5

<$mt:setvar name="cat_number" value="1"$>
<$mt:setvar name="level" value="1"$>
<MTTopLevelCategories>
  <$mt:setvar name="cat_number" op="++"$>
  <$mt:setvar name="tree[$level]" value="$cat_number"$>
  <mt:if name="level" eq="1">
    d.add(<$mt:getvar name="cat_number" op="--"$>, 0,'<$MTCategoryLabel escape="html"$>','<MTIfNonZero tag="MTCategoryCount"><$MTCategoryArchiveLink$><MTElse>javascript: void(0);</MTElse></MTIfNonZero>');
  <mt:else>
    d.add(<$mt:getvar name="cat_number" op="--"$>, <$mt:setvar name="tmp" value="$level"$><$mt:setvar name="tmp" op="--"$><$mt:getvar name="tree[$tmp]" op="--"$>,'<$MTCategoryLabel escape="html"$>','<MTIfNonZero tag="MTCategoryCount"><$MTCategoryArchiveLink$><MTElse>javascript: void(0);</MTElse></MTIfNonZero>');
  </mt:if>
  <$mt:setvar name="level" op="++"$>
  <$MTSubCatsRecurse$>
  <$mt:setvar name="level" op="--"$>
</MTTopLevelCategories>

これは変数cat_numberと変数levelの初期値を1にしているため、デクリメントしないと下のように、カテゴリー番号が2から開始されるためです。

d.add(2, 0,'test1','http://.../test/');
d.add(3, 2,'test1-1','http://.../test/test11/');
d.add(4, 3,'test1-1-1','http://.../test/test11/test111/');
d.add(5, 3,'test1-1-2','http://.../test/test11/test112/');
d.add(6, 2,'test1-2','http://.../test/test12/');
d.add(7, 6,'test1-2-1','http://.../test/test12/test121/');
d.add(8, 6,'test1-2-2','http://.../test/test12/test122/');
d.add(9, 0,'test2','http://.../test2/');
d.add(10, 9,'test2-1','http://.../test2/test21/');

変数cat_numberと変数levelの初期値を1にしているのは、初期値0の場合にリスト系のテンプレートタグで正常にインクリメントされない不具合を避けるためです。

これにdTree用の前後のスクリプトを加えれば完成です(青色はリスト5からの追加部分)。

リスト6

<script type="text/javascript">
d = new dTree('d');
d.config.useCookies=false;
d.add(0, -1,'Categories','javascript: void(0);');
<$mt:setvar name="cat_number" value="1"$>
<$mt:setvar name="level" value="1"$>
<MTTopLevelCategories>
<$mt:setvar name="cat_number" op="++"$>
<$mt:setvar name="tree[$level]" value="$cat_number"$>
<mt:if name="level" eq="1">
  d.add(<$mt:getvar name="cat_number" op="--"$>, 0,'<$MTCategoryLabel escape="html"$>','<MTIfNonZero tag="MTCategoryCount"><$MTCategoryArchiveLink$><MTElse>javascript: void(0);</MTElse></MTIfNonZero>');
<mt:else>
  d.add(<$mt:getvar name="cat_number" op="--"$>, <$mt:setvar name="tmp" value="$level"$><$mt:setvar name="tmp" op="--"$><$mt:getvar name="tree[$tmp]" op="--"$>,'<$MTCategoryLabel escape="html"$>','<MTIfNonZero tag="MTCategoryCount"><$MTCategoryArchiveLink$><MTElse>javascript: void(0);</MTElse></MTIfNonZero>');
</mt:if>
<$mt:setvar name="level" op="++"$>
<$MTSubCatsRecurse$>
<$mt:setvar name="level" op="--"$>
</MTTopLevelCategories>
document.write(d);
</script>
<p style="text-align:center"><a href="javascript: d.openAll();">open all</a> | <a href="javascript: d.closeAll();">close all</a></p>

よりエレガントな実装があると思いますが、その点はご容赦ください。

関連記事:dtree のサブカテゴリーリストにブログ記事タイトルを表示する for Movable Type

Comments [4] | Trackbacks [0]

Movable Type 4.1 / MTOS における変数での算術演算子の利用方法

December 19,2007 12:10 AM
Category:[4.1, MTOS, テンプレートタグ]
Tag:[]
Permalink

昨日エントリーした「Movable Type 4.1 / MTOS における配列とハッシュの利用方法」に加え、MT4.1/MTOS では算術演算子の利用が可能になりました。

詳細は後述しますが、可能な演算は、

  • 加算(+)
  • 減算(-)
  • 乗算(*)
  • 除算(/)
  • 剰余(%)
  • インクリメント(++)
  • デクリメント(--)

で、変数の演算結果を同一変数に保持したり、MTIf タグ等での判定や、判定と同時に演算すること等が可能です。

ということで、こちらについても以下に利用方法をまとめてみました。なお、利用可能と思われるテンプレートタグは下記の通りです。

MTIf
MTUnless
MTGetVar
MTSetVar
MTSetVarBlock
MTSetVarTemplate

1.加算

フォーマット

op モディファイアに"+"または"add"を設定します。定義済みの変数に加算する場合は value モディファイアを記述し、加算したい値を設定します。

値を加算のみする場合

<$mt:setvar name="[変数名]" op="+" value="[加算値]"$>
または
<$mt:setvar name="[変数名]" op="add" value="[加算値]"$>

加算後に表示する場合

<$mt:getvar name="[変数名]" op="+" value="[加算値]"$>
または
<$mt:getvar name="[変数名]" op="add" value="[加算値]"$>

加算した結果を判定する場合(例は等しい場合を判定)

<mt:if name="[変数名]" op="+" value="[加算値]" eq="[比較値]">
または
<mt:if name="[変数名]" op="add" value="[加算値]" eq="[比較値]">

サンプル

変数hogeに+1した結果を設定

<$mt:setvar name="hoge" value="1"$>
<$mt:setvar name="hoge" op="+" value="1"$>

変数hogeに+1した結果を表示

<$mt:setvar name="hoge" value="1"$>
<$mt:getvar name="hoge" op="+" value="1"$>

変数hogeに+1した結果が2であるかを判定

<$mt:setvar name="hoge" value="1"$>
<mt:if name="hoge" op="+" value="1" eq="2">
OK
<mt:else>
NG
</mt:if>

2.減算

フォーマット

op モディファイアに"-"または"sub"を設定します。定義済みの変数に減算する場合は value モディファイアを記述し、減算したい値を設定します。

値を減算のみする場合

<$mt:setvar name="[変数名]" op="-" value="[減算値]"$>
または
<$mt:setvar name="[変数名]" op="sub" value="[減算値]"$>

減算後に表示する場合

<$mt:getvar name="[変数名]" op="-" value="[減算値]"$>
または
<$mt:getvar name="[変数名]" op="sub" value="[減算値]"$>

減算した結果を判定する場合(例は等しい場合を判定)

<mt:if name="[変数名]" op="-" value="[減算値]" eq="[比較値]">
または
<mt:if name="[変数名]" op="sub" value="[減算値]" eq="[比較値]">

サンプル

変数hogeから-1した結果を設定

<$mt:setvar name="hoge" value="10"$>
<$mt:setvar name="hoge" op="-" value="1"$>

変数hogeから-1した結果を表示

<$mt:setvar name="hoge" value="10"$>
<$mt:getvar name="hoge" op="-" value="1"$>

変数hogeに-1した結果が2であるかを判定

<$mt:setvar name="hoge" value="3"$>
<mt:if name="hoge" op="-" value="1" eq="2">
OK
<mt:else>
NG
</mt:if>

3.乗算

フォーマット

op モディファイアに"*"または"mul"を設定します。定義済みの変数に乗算する場合は value モディファイアを記述し、乗算したい値を設定します。

値を乗算のみする場合

<$mt:setvar name="[変数名]" op="*" value="[乗数値]"$>
または
<$mt:setvar name="[変数名]" op="mul" value="[乗数値]"$>

乗算後に表示する場合

<$mt:getvar name="[変数名]" op="*" value="[乗数値]"$>
または
<$mt:getvar name="[変数名]" op="mul" value="[乗数値]"$>

乗算した結果を判定する場合(例は等しい場合を判定)

<mt:if name="[変数名]" op="*" value="[乗数値]" eq="[比較値]">
または
<mt:if name="[変数名]" op="mul" value="[乗数値]" eq="[比較値]">

サンプル

変数hogeに2倍した結果を変数に設定

<$mt:setvar name="hoge" value="1"$>
<$mt:setvar name="hoge" op="*" value="2"$>

変数hogeを2倍した結果を表示

<$mt:setvar name="hoge" value="1"$>
<$mt:getvar name="hoge" op="*" value="2"$>

変数hogeに2倍した結果が6であるかを判定

<$mt:setvar name="hoge" value="3"$>
<mt:if name="hoge" op="*" value="2" eq="6">
OK
<mt:else>
NG
</mt:if>

4.除算

フォーマット

op モディファイアに"/"または"div"を設定します。定義済みの変数に除算する場合は value モディファイアを記述し、除算したい値を設定します。

値を除算のみする場合

<$mt:setvar name="[変数名]" op="/" value="[除数値]"$>
または
<$mt:setvar name="[変数名]" op="div" value="[除数値]"$>

除算後に表示する場合

<$mt:getvar name="[変数名]" op="/" value="[除数値]"$>
または
<$mt:getvar name="[変数名]" op="div" value="[除数値]"$>

除算した結果を判定する場合(例は等しい場合を判定)

<mt:if name="[変数名]" op="/" value="[除数値]" eq="[比較値]">
または
<mt:if name="[変数名]" op="div" value="[除数値]" eq="[比較値]">

サンプル

変数hogeを2で割った結果を変数に設定

<$mt:setvar name="hoge" value="10"$>
<$mt:setvar name="hoge" op="/" value="2"$>

変数hogeを2で割った結果を表示

<$mt:setvar name="hoge" value="10"$>
<$mt:getvar name="hoge" op="/" value="2"$>

変数hogeを2で割った結果が3であるかを判定

<$mt:setvar name="hoge" value="6"$>
<mt:if name="hoge" op="/" value="2" eq="3">
OK
<mt:else>
NG
</mt:if>

5.剰余

フォーマット

op モディファイアに"%"または"mod"を設定します。定義済みの変数に剰余する場合は value モディファイアを記述し、剰余したい値を設定します。

値を剰余のみする場合

<$mt:setvar name="[変数名]" op="%" value="[剰余値]"$>
または
<$mt:setvar name="[変数名]" op="mod" value="[剰余値]"$>

剰余後に表示する場合

<$mt:getvar name="[変数名]" op="%" value="[剰余値]"$>
または
<$mt:getvar name="[変数名]" op="mod" value="[剰余値]"$>

剰余した結果を判定する場合(例は等しい場合を判定)

<mt:if name="[変数名]" op="%" value="[剰余値]" eq="[比較値]">
または
<mt:if name="[変数名]" op="mod" value="[剰余値]" eq="[比較値]">

サンプル

変数hogeを3で割った余りを変数に設定

<$mt:setvar name="hoge" value="5"$>
<$mt:setvar name="hoge" op="%" value="3"$>

変数hogeを3で割った余りを表示

<$mt:setvar name="hoge" value="5"$>
<$mt:getvar name="hoge" op="%" value="3"$>

変数hogeを3で割った余りが1であるかを判定

<$mt:setvar name="hoge" value="7"$>
<mt:if name="hoge" op="%" value="3" eq="1">
OK
<mt:else>
NG
</mt:if>

6.インクリメント

「インクリメント」とは、値に1を加算することを指します。

フォーマット

op モディファイアに"++"または"inc"を設定します。なお、定義済みの変数にしかインクリメントすることはできません。

値をインクリメントのみする場合

<$mt:setvar name="[変数名]" op="++"$>
または
<$mt:setvar name="[変数名]" op="inc"$>

インクリメント後に表示する場合

<$mt:getvar name="[変数名]" op="++"$>
または
<$mt:getvar name="[変数名]" op="inc"$>

インクリメントした結果を判定する場合(例は等しい場合を判定)

<mt:if name="[変数名]" op="++" eq="[比較値]">
または
<mt:if name="[変数名]" op="inc" eq="[比較値]">

サンプル

変数hogeをインクリメント

<$mt:setvar name="hoge" value="1"$>
<$mt:setvar name="hoge" op="++"$>

変数hogeをインクリメントした結果を表示

<$mt:setvar name="hoge" value="1"$>
<$mt:getvar name="hoge" op="++"$>

変数hogeをインクリメントした結果が2であるかを判定

<$mt:setvar name="hoge" value="1"$>
<mt:if name="hoge" op="++" eq="2">
OK
<mt:else>
NG
</mt:if>

7.デクリメント

「デクリメント」とは、値から1を減算することを指します。

フォーマット

op モディファイアに"--"または"dec"を設定します。なお、定義済みの変数にしかデクリメントすることはできません。

値をデクリメントのみする場合

<$mt:setvar name="[変数名]" op="--"$>
または
<$mt:setvar name="[変数名]" op="dec"$>

デクリメント後に表示する場合

<$mt:getvar name="[変数名]" op="--"$>
または
<$mt:getvar name="[変数名]" op="dec"$>

デクリメントした結果を判定する場合(例は等しい場合を判定)

<mt:if name="[変数名]" op="--" eq="[比較値]">
または
<mt:if name="[変数名]" op="dec" eq="[比較値]">

サンプル

変数hogeをデクリメント

<$mt:setvar name="hoge" value="10"$>
<$mt:setvar name="hoge" op="--"$>

変数hogeをデクリメントした結果を表示

<$mt:setvar name="hoge" value="10"$>
<$mt:getvar name="hoge" op="--"$>

変数hogeをデクリメントした結果が1であるかを判定

<$mt:setvar name="hoge" value="2"$>
<mt:if name="hoge" op="--" eq="1">
OK
<mt:else>
NG
</mt:if>

8.注意事項

文字列や数字を含んだ文字列に演算を行っても何も行われません。また、ベータ1a版の動作確認では、他のリスト系テンプレートタグとの組み合わせでは初期値が1でないと機能しないようです(下記)。

NG(初期値0)

<$mt:setvar name="hoge" value="0"$>
<MTEntries>
<$mt:setvar name="hoge" op="++"$>
</MTEntries>
<$mt:getvar name="hoge">

OK(初期値1)

<$mt:setvar name="hoge" value="1"$>
<MTEntries>
<$mt:setvar name="hoge" op="++"$>
</MTEntries>
<$mt:getvar name="hoge">
Comments [2] | Trackbacks [1]

Movable Type 4.1 / MTOS における配列とハッシュの利用方法

December 18,2007 1:11 AM
Category:[4.1, MTOS, テンプレートタグ]
Tag:[, , ]
Permalink

公にアナウンスされていないようですが、MT4.1/MTOS では変数で配列とハッシュの操作が可能になり、変数処理がよりプログラマブルになりました。

ということで、以下に利用方法をまとめてみました。

1.配列

配列とは、同じ型のデータを連続的に並べた集合を指します。同一の変数名にインデックス(添え字)を付与することでデータを識別することができます。

例えば、week という変数に、Monday から Sunday までの文字列を設定するには、

week[0] = 'Monday'
week[1] = 'Tuesday'
week[2] = 'Wednesday'
week[3] = 'Thursday'
week[4] = 'Friday'
week[5] = 'Saturday'
week[6] = 'Sunday'

という感じになります。

MTSetVar による配列の設定

MTSetVar タグで配列を設定する方法は2通りあります。name モディファイアの変数名に直接インデックスを記述して、value モディファイアに値を設定するか(下)、

<MTSetVar name="week[0]" value="Mon">
<MTSetVar name="week[1]" value="Tue">
<MTSetVar name="week[2]" value="Wed">
     :

index モディファイアを記述し、そこにインデックスを設定します(下)。value モディファイアは同じです。

<MTSetVar name="week" index="0" value="Mon">
<MTSetVar name="week" index="1" value="Tue">
<MTSetVar name="week" index="2" value="Wed">
     :

MTSetVarBlock による配列の設定

MTSetVar タグに配列を設定する方法も、MTSetVar タグと大体同じで、name モディファイアの変数名に直接インデックスを記述し、value モディファイアの代わりにブロック内に値を記述します。

<MTSetVarBlock name="week[0]">
    :
</MTSetVarBlock>
<MTSetVarBlock name="week[1]">
    :
</MTSetVarBlock>
<MTSetVarBlock name="week[2]">
    :
</MTSetVarBlock>
    :

または、index モディファイアを記述し、そこにインデックスを設定します(下)。

<MTSetVarBlock name="week" index="0">
    :
</MTSetVarBlock>
<MTSetVarBlock name="week" index="1">
    :
</MTSetVarBlock>
<MTSetVarBlock name="week" index="2">
    :
</MTSetVarBlock>
    :

MTFor による配列の設定

単純な数値であれば MTFor で設定することも可能です。

下記に、0~6の値を配列に設定するサンプルを示します。MTFor タグの var モディファイアの変数名に配列のインデックスが設定されます。from モディファイアに最小値、to モディファイアに最大値を設定し、MTFor ブロック内に MTSetVar を記述して、配列のインデックスとなる $x を記述します。

<mt:for var="x" from="0" to="6">
    <MTSetVar name="week[$x]" value="$x">
</mt:for>

MTSetVar の name モディファイアと別に、index モディファイアに $x を記述してもOKです。

<mt:for var="x" from="0" to="6">
    <MTSetVar name="week" index="$x" value="$x">
</mt:for>

繰り返し処理による配列の設定

下記に、ブログ記事タイトルを配列の値に設定するサンプルを示します。

<MTEntries>
    <MTSetVarBlock name="counter"><$MTGetVar name="__counter__"$></MTSetVarBlock>
    <MTSetVarBlock name="entrytitle[$counter]"><$MTEntryTitle$></MTSetVarBlock>
</MTEntries>

2行目の counter は、インデックス値となる __counter__ の値を3行目に直接設定できないため、MTSetVarBlock でワンクッションおいてます。3行目でブログ記事タイトルを配列に設定しています。

配列の取得

配列の内容を取得・表示するには、MTGetVar(または MTVar)で name モディファイアにインデックスつきの変数名を指定します。

<MTGetVar name="week[0]">
<MTGetVar name="week[1]">
<MTGetVar name="week[2]">
     :

実行結果

Mon
Tue
Wed
 :

または、MTGetVar(または MTVar)で name モディファイアと別に index モディファイアにインデックス値を指定します。実行結果は同じです。

<MTGetVar name="week" index="0">
<MTGetVar name="week" index="1">
<MTGetVar name="week" index="2">
     :

さらに MTFor タグを使うことで、繰り返しによる取得も可能です。

MTFor タグの var モディファイアの値が配列のインデックス値となります。from モディファイアに最小値、to モディファイアに最大値を設定し、MTFor ブロック内に MTGetVar を記述して配列の値を取得します。MTGetVar の name モディファイアにインデックス値となる $x を記述します。

<mt:for var="x" from="0" to="6">
    <MTGetVar name="week[$x]">
</mt:for>

MTGetVar の name モディファイアと別に、index モディファイアに $x を記述してもOKです。

<mt:for var="x" from="0" to="6">
    <MTGetVar name="week" index="$x">
</mt:for>

配列の要素数を求める

count 関数により、配列を設定した後の要素数を求めます。
フォーマットは、

<MTGetVar name="count(week)">

で、name モディファイアに要素数を求める関数名(count)と、関数のパラメータ(括弧内)に処理の対象となる配列の変数名を記述します。

実行結果

7

または、

<MTGetVar name="week" function="count">

と書いても同じです。function モディファイアに関数名 count を記述します。

配列の最後からデータを取得する

pop 関数により、配列の最後からデータを取得し、配列から取得データを削除します。
フォーマットは、

<MTGetVar name="pop(week)">

で、name モディファイアに関数名(pop)と、関数のパラメータ(括弧内)に処理の対象となる配列の変数名を記述します。

実行結果(結果には表示されませんが配列のインデックスが-1されています)

Sun

または、

<MTGetVar name="week" function="pop">

と書いても同じです。function モディファイアに関数名 pop を記述します。

配列の先頭からデータを取得する

shift 関数により、配列の先頭からデータを取得し、配列から取得データを削除します。

<MTGetVar name="shift(week)">

で、name モディファイアに関数名(shift)と、関数のパラメータ(括弧内)に処理の対象となる配列の変数名を記述します。

実行結果(結果には表示されませんが配列のインデックスが-1されています)

Mon

または、

<MTGetVar name="week" function="shift">

と書iいても同じです。

2.ハッシュ

ハッシュは、配列のインデックスが文字列となったものです。この文字列となったインデックスを「キー」と呼びます。先の1週間の例では、

week[mon] = 'Monday'
week[tue] = 'Tuesday'
week[wed] = 'Wednesday'
week[thu] = 'Thursday'
week[fri] = 'Friday'
week[sat] = 'Saturday'
week[sun] = 'Sunday'

となります。

MTSetVar にハッシュの設定

MTSetVar タグにハッシュを設定する方法は2通りあります。name モディファイアの変数名に直接キー({}で囲まれた部分)を記述するか(下)、

<MTSetVar name="week{mon}" value="Monday">
<MTSetVar name="week{tue}" value="Tuesday">
     :

key モディファイアを記述し、そこにキーを設定します(下)。

<MTSetVar name="week" key="mon" value="Monday">
<MTSetVar name="week" key="tue" value="Tuesday">
     :

MTSetVarBlock にハッシュの設定

MTSetVarBlock タグにハッシュを設定する方法も、MTSetVar タグと大体同じで、name モディファイアの変数名に直接キーを記述し、value 属性の代わりにブロック内に値を記述します。

<MTSetVarBlock name="week{mon}">
     :
</MTSetVarBlock>
<MTSetVarBlock name="week{tue}">
     :
</MTSetVarBlock>
     :

または、key モディファイアを記述し、そこにキーを設定します(下)。

<MTSetVarBlock name="week" key="mon">
     :
</MTSetVarBlock>
<MTSetVarBlock name="week" key="tue">
     :
</MTSetVarBlock>
     :

ハッシュの取得

ハッシュの内容を取得・表示するには、MTGetVar(または MTVar)で name モディファイアにキーつきの変数名を指定します。

<MTGetVar name="week{mon}">
<MTGetVar name="week{tue}">
     :

実行結果

Monday
Tuesday
  :

または、MTGetVar(または MTVar)で name モディファイアと別に key モディファイアにインデックス値を指定します。実行結果は同じです。

<MTGetVar name="week" key="mon">
<MTGetVar name="week" key="tue">
     :

ハッシュの要素数を求める

ハッシュを設定した後の要素数は次の方法で求めます。

<MTGetVar name="count(week)">

name モディファイアに要素数を求める関数名(count)と、関数のパラメータ(括弧内)に処理の対象となる配列の変数名を記述します。

実行結果

7

または、

<MTGetVar name="week" function="count">

と書いても同じです。

ハッシュから要素を削除する

ハッシュから指定したキーの要素を取得し、同時にハッシュから該当要素を削除します。

<MTGetVar name="delete(week)" key="a">

name モディファイアに要素数を求める関数名(delete)と、関数のパラメータ(括弧内)に処理の対象となる配列の変数名を記述します。

実行結果(結果には表示されませんがハッシュのキーが削除されています)

Monday

または、

<MTGetVar name="week" key="a" function="delete">

と書いても同じです。

以上です。
さらに複雑な制御も可能と思われますがとりあえずこの辺で。

Comments [0] | Trackbacks [1]

テンプレートのタグを探す方法

December 17,2007 2:02 AM
Category:[テンプレート, 検索]
Tag:[, , ]
Permalink

最近、「このタグ(例えば body 等)はどのテンプレートありますか?」という質問を時々頂きます。

Movable Type 4 になってから、テンプレートモジュールがデフォルトで利用されるようになったため、バージョン3の時のようにひとつのテンプレートでいわゆるウェブページ全体のマークアップを俯瞰できなくなってしまいました。

保守性は向上した反面、テンプレートの構造に慣れるのが大変かと思われますが、このエントリーでは(X)HTMLやテンプレートタグを探す便利な方法をお伝えします。

1.検索を利用する

あまり知られていないようですが、一番手っ取り早いのはこの方法です。

ブログ管理画面の一番下にある「検索」のリンクをクリック。

「検索」をクリック

検索文字列入力フィールド上にある「テンプレート」をクリック。

「テンプレート」をクリック

検索したいタグ名等(例では body 要素)を入力して「検索」をクリック。

検索文字列入力

これで該当するテンプレートが表示されます。
タグや class 属性等をどこに書いたのか調べる時に、テンプレート編集画面を開いて探し回る必要はありません。

検索結果

上記は body 要素の検索例ですが、単に「body」で検索すると、テンプレートタグの MTEntryBody や MTCommentBody 等が大量にヒットしてしまう(下)ので注意しましょう。

「body」で検索

また、検索フォーム下の「項目を指定する」をチェックすれば、検索範囲を、

  • 出力ファイル名
  • 本文
  • テンプレート名
  • リンクされたファイル名

から選択することができます。

2.TemplateHammer プラグインでひとつのテンプレートにまとめる

TemplateHammer プラグインを導入すれば、あるテンプレートに記述されている MTInclude 先のテンプレートモジュールの内容を、MTInclude 元に展開してくれます。

インストール方法は下記の記事を参考にしてください。

使用方法は、テンプレート一覧より展開したいテンプレートをチェックして、セレクトボックスの「Smash Template」を選択して「Go」をクリック。

下は「Smash Template」実行前の「メインページ」の冒頭部分です。

下は「Smash Template」を実行後の「メインページ」の冒頭部分です。<$MTInclude module="ヘッダー"$> の部分が展開されているのが分かります。

これでテンプレートモジュールによってバラバラになっているテンプレートをひとつのテンプレートで俯瞰することができます。ただし、MTInclude 先の内容は複数のテンプレートに読み込まれることを前提に振り分け処理が多く含まれているので、読みやすくなるかどうかは分かりません(テンプレートを渡り歩く手間はなくなります)。

Comments [0] | Trackbacks [0]

バンダイ ∞(むげん)プチプチ

December 16,2007 12:06 AM
Category:[mono]
Tag:[]
Permalink

注文した覚えのない宅配便が来たと思ったら、以前応募していたフィードパスの「プチプチ・ラッキーキャンペーン」に見事当選したようです。

頂いたのは「∞(むげん)プチプチ」という、梱包材のプチプチ(エアキャップ)をおもちゃとして商品化したものです。

絶妙な感触のエアキャップをいつもの要領でつぶすと、内臓スピーカーから擬似的な破裂音が出ます。100回に1回は異なる音がするらしく、それがまたひとつの楽しみのようです。

2007年9月に発売されたこの商品、12月には100万個を超えるようです。

「∞(むげん)プチプチ」がついに累計販売数100万個突破!!

(株)バンダイが、2007年9月22日に発売した「∞(むげん)プチプチ」(全5色/各819円・税込)は、12月15日に発売する新色「グリーン」「ビビッドピンク」の発売で累計販売数100万個を突破する見込みです。

ということで、しばらく楽しめそうです。

Comments [0] | Trackbacks [0]

Movable Type 4.1 カスタムフィールドの使用方法

December 15,2007 2:02 AM
Category:[4.1, プラグイン]
Tag:[, , ]
Permalink

Movable Type 4.1 で追加された「カスタムフィールド」の利用方法です。

この機能は以前、CustomFields プラグインとして公開されていたものが、MT4.1 で新たにアドオンとして追加されました。カスタムフィールドを利用すれば、ブログ管理ユーザがブログ記事投稿画面等に任意のフィールドを新たに追加することができます(下は追加例)。

この機能はプラグインとして配布されている頃から有名でしたが、当ブログでは一度も紹介したことがなかったので、今回は気合を入れて、設定方法およびサンプルによる使用例を記してみました。

1.設定方法

ブログ管理画面より「設定」→「カスタムフィールド」をクリック。

「フィールドを作成」をクリック。なお、左のメニューにも「カスタムフィールド」が追加されています。

このような画面が表示されます。

以下、ブログ記事に「関連リンク」というフィールドを追加する例で設定内容を紹介します。

1.1 システムオブジェクト

フィールドを追加するオブジェクトを「ブログ記事」「ウェブページ」「カテゴリ」「フォルダ」より選択します。

追加フィールドは選択したオブジェクトでのみ利用可能になります。
例えば「ブログ記事」を選択すると、ブログ記事投稿・編集画面に追加したフィールドが表示されます。「カテゴリ」を選択すると、カテゴリを新規作成した後、カテゴリの編集画面に追加したフィールドが表示されます。

1.2 名前

フィールドの名前を入力します(必須項目)。ここでは「関連リンク」と入力します。

以前作成したフィールドと同じ名前を設定するとエラーになりますが、後述するベースネームを変更すれば同じ名前を使うこともできます。

1.3 説明

フィールドの説明を入力します。任意のテキストを入力します。

1.4 種類

フィールドの種類を選択します。ここでは「テキスト(複数行)」を選択します。

選択する種類によって後方の「規定値」や「オプション」等の入力内容が変化します。以下、各メニュー選択時の表示をまとめて掲載しておきます。

テキスト
テキスト(複数行)
チェックボックス
URL
日付と時刻
ドロップダウン
ラジオボタン
アイテム
オーディオ
ビデオ
画像

1.5 必須

フィールドへの値の入力を必須にするかを決定します。

必須にした場合、入力がない状態で保存すると、エラーになります。また、必須に設定すると、各オブジェクトの編集画面上に常に表示されるようになります。

1.6 既定値

フィールドが表示された時に表示あるいは選択される初期値を入力します。

入力すると、ブログ記事投稿時等、該当フィールドに初期値が表示されます。

1.7 ベースネーム

「ベースネーム」は、ブログ記事・ページの「出力ファイル名」、あるいはカテゴリ・フォルダの「ファイル名」と同じで、このフィールドを特定するためにデータベースで使用するものです。基本的に変更する必要はありません。

もし変更する場合は、インストールした Movable Type 内でユニーク(他のフィールドのベースネームと重複しない)な名称にしてください。

1.8 テンプレートタグ

フィールドの値を出力するテンプレートタグを作成します。入力した後、すぐ下の「テンプレートの例」をクリックすれば、値を表示する際に、テンプレートタグをどのように設定すべきかが分かります。

サンプルでは「RelatedLinks」と入力してみました。

なお、「名前」フィールドに半角文字を入力した後、「テンプレートの例」をクリックすると、「名前」フィールドがこのフィールドに反映されるようですが、任意の名称に変更して構いません。

すべて設定したら一番下の「保存」をクリックします。OKであれば下のように登録されます。

必須項目が設定されていないと警告が表示されます。

正常に追加された後、「設定」→「カスタムフィールド」に一覧として表示されます。

2.追加したフィールドの表示

1項の設定で新しいフィールドが追加されました。

サンプルではブログ記事に追加したのでブログ記事投稿・編集画面に表示される筈ですが、デフォルト状態では表示されないため、デフォルトで表示されるための設定をします。

ブログ記事投稿画面右上にある「表示」をクリック。

表示オプションに追加したフィールド(関連リンク)が表示されているので、チェックして、「OK」をクリック。

これでブログ記事投稿画面に「関連リンク」フィールドが表示されました。なかなかいい感じです。

フィールドの種類で「画像」を追加すると、下記のようなフィールドを表示することができます。「imageを選択」をクリックすると画像の選択またはアップロード画面に遷移します。

フィールドの種類で「ラジオボタン」を追加すると、下記の「おすすめ度」のようなフィールドを表示できます。

フィールドの種類で「チェックボックス」を追加すると、下記の「ランダム表示に追加」のようなフィールドを表示できます。ちなみに、チェックされている場合、このフィールドのテンプレートタグには"1"が設定されますので、MTIfタグ等で表示を制御したい場合に有効でしょう。

3.テンプレートの修正

フィールドの内容を表示するためのテンプレートを設定します。
サンプルはブログ記事に表示させているので、「ブログ記事の詳細」に表示するためのタグを追加してみます。

4.フィールドに入力

ブログ記事投稿をしてみます。新しいフィールドにはとりあえず下のように設定してみました。

5.表示

投稿すると下のように表示されました。なかなかいい感じです。

6.フィールドの表示順序

ひとつのオブジェクトに複数のフィールドを表示させると、右下の「フィールドの順序」をクリックすれば、現在表示されているフィールドの順序を入れ替えることができます。

入れ替えるには、入れ替えたいフィールドをドラッグして「保存」をクリックします。

7.注意事項

  • 異なるオブジェクトで同一名称のタグ名は設定できません
  • 一旦作成したフィールドの種別を変更することはできません

2007.12.15
2項の記述を追加・修正し、6項を新たに追加しました。

Comments [39] | Trackbacks [10]

Movable Type 4.1 追加タグ一覧

December 14,2007 1:01 AM
Category:[4.1]
Tag:[, ]
Permalink

Movable Type 4.1 で新たに追加されるタグ一覧です。公式サイトでもかなり良質なドキュメントがすでに用意されていますが、やや分かりにくい部分について、ドキュメントからの引用で補足してみました。

1.ブロックタグ

MTFor

いわゆる「for ループ」を行うためのブロックタグです。以下のモディファイアで指定された値にもとづいて、ブロック内を繰り返し処理します。
モディファイア(属性)には下記を設定します。

  • from(start)モディファイア:繰り返しの初期値を指定
  • to(end)モディファイア:繰り返しの最終値を指定
  • increment(step)モディファイア:インクリメント(加算)値を指定。省略時は1ずつ増加
  • glue:ループ中の区切り文字を指定

fromが1、toが10、incrementなしであれば、1,2,3,4,5,6,7,8,9,10と、fromの値を1つずつ加算しながら、10になるまで繰り返されます。

JavaScript であれば、

for (i=0; i<10; i++) {
    // 繰り返したい処理
}

という感じでしょうか。

サンプル

<mt:for var="x" from="5" to="10" glue= " | ">
    <mt:if name="__first__"><p>This is my first time through!</p></mt:if>
    <p>now x = <mt:var name="x"></p>
    <mt:if name="__last__"><p>This is my last time through!</p></mt:if>
</mt:for>

実行結果(見やすいように折り返してます)

<p>This is my first time through!</p>
<p>now x = 5</p> | <p>now x = 6</p> | <p>now x = 7</p> | 
<p>now x = 8</p> | <p>now x = 9</p> | <p>now x = 10</p>
<p>This is my last time through!</p>

変数として下記の予約変数を利用することができます。

  • __first__:ループの初回のみ実行
  • __last__:ループの最後のみ実行
  • __odd__:ループの奇数回目に実行
  • __even__:ループの偶数回目に実行
  • __index__:ループのインデックスを格納
  • __counter__:ループ回数を格納

__index__ と __counter__ 変数の違いは、以下のサンプルで確認することができます。

サンプル

<mt:for var="test" from="10" to="20" increment="2">
    <p>now test = 
    <mt:var name="test"> |
    __index__: <MTVar name="__index__"> |
     __counter__: <MTVar name="__counter__">
    </p>
</mt:for>

実行結果

<p>now test = 10 | __index__: 10 | __counter__: 1</p>
<p>now test = 12 | __index__: 12 | __counter__: 2</p>
<p>now test = 14 | __index__: 14 | __counter__: 3</p>
<p>now test = 16 | __index__: 16 | __counter__: 4</p>
<p>now test = 18 | __index__: 18 | __counter__: 5</p>
<p>now test = 20 | __index__: 20 | __counter__: 6</p>

__counter__ は純粋にループ回数のみを格納しますが、__index__ は「開始値+ループ回数」を格納します。

MTIncludeBlock

既存の MTInclude の機能に加え、テンプレートモジュールをインクルードする際、インクルード元のテンプレートからテンプレートモジュールに任意のコンテンツ(変数)を与えるためのタグです。

インクルード元のテンプレート(例えばメインページ)の内容

<MTIncludeBlock module="Some Module" var="contents">
(do something here)
</MTIncludeBlock>

(do something here) の部分に、テンプレートモジュールに渡したいコンテンツを設定します。

テンプレートモジュール Some Moduleの内容

(header stuff)
<MTVar name="contents">
(footer stuff)

<MTVar name="contents"> の部分に、インクルード元から渡されたコンテンツ(この例では「(do something here)という文字列」)を表示します。

メインページでの実行結果

(header stuff)
(do something here)
(footer stuff)

MTSetVars

複数の変数を一括設定するタグです。

記述フォーマットは「変数名=値」で、複数記述することができます。

<MTSetVars>
変数名1=値1
変数名2=値2
変数名3=値3
  :
</MTSetVars>

となります。空行や前後にスペースが含まれていても除去されます。値にファンクションタグも利用可能です。

<MTSetVars>
a=1
b=foo
c=<$MTBlogName$>
</MTSetVars>

下のようにMTIncludeBlockタグと併用することで、テンプレートモジュールとの連携が可能です。

インクルード元のテンプレートのサンプル(テンプレートモジュールに渡すパラメータを設定)

<MTIncludeBlock module="banner">
<MTSetVars>
    banner_link=http://example.com/
    banner_name=advertisement_a
    banner_width=728
    banner_height=90
</MTSetVars>
</MTIncludeBlock>

bannerテンプレートモジュールのサンプル

<img src="<$mt:getvar name="banner_link"$>"
     alt="<$mt:getvar name="banner_name"$>"
     width="<$mt:getvar name="banner_width"$>"
     height="<$mt:getvar name="banner_height"$>" />

実行結果

<img src="http://example.com/"
     alt="advertisement_a"
     width="728"
     height="90" />

MTIncludeBlockでbannerをインクルードする時、MTIncludeBlockブロック内のMTSetVarsに設定された変数が、bannerテンプレートモジュールに渡されます。

bannerテンプレートモジュールでは、MTGetVarによって指定した変数(banner_xxx)をインクルード元から受け取り、値をそれぞれ埋め込み、変数が展開されたものをインクルード元のテンプレートにわたします。

MTAuthorUserpicAsset

登録ユーザのプロフィール画像リストを表示します。
MTAuthorsブロックタグ内で有効のようで、ブロックタグ内でアイテム関連のテンプレートタグを利用することができます。

サンプル

<ul><mt:Authors>
     <mt:AuthorUserpicAsset>
       <li>
         <img src="<mt:AssetThumbnailURL width="20" height="20">" width="20" height="20"  />
         <mt:AuthorName>
       </li>
     </mt:AuthorUserpicAsset>
</mt:Authors></ul>

MTEntryAuthorUserpicAsset

ブログ記事投稿者のプロフィール画像を表示します。
MTEntriesブロックタグ、ブログ記事アーカイブ等で有効で、ブロックタグ内でアイテム関連のテンプレートタグを利用することができます。

サンプル

<ul><mt:Entries>
     <mt:EntryAuthorUserpicAsset>
       <li>
         <img src="<mt:AssetThumbnailURL width="20" height="20">" width="20" height="20"  />
       </li>
     </mt:EntryAuthorUserpicAsset>
</mt:Entries></ul>

MTCommenterUserpicAsset

コメント投稿者のプロフィール画像を表示します。
MTCommentsブロックタグ内で有効のようで、ブロックタグ内でアイテム関連のテンプレートタグを利用することができます。

サンプル

<ul><mt:Comments>
     <mt:CommenterUserpicAsset>
       <li>
         <img src="<mt:AssetThumbnailURL width="20" height="20">" width="20" height="20"  />
       </li>
     </mt:CommenterUserpicAsset>
</mt:Comments></ul>

2.ファンクションタグ

MTNotifyScript

通知スクリプトのファイル名を表示します。

設定例

<mt:CGIPath><mt:NotifyScript>

実行結果

http://・・・/mt-add-notify.cgi 

MTCommenterUsername

コメント投稿者名を表示します。

MTCommenterID

コメント投稿者のIDを表示します。

上記2つのタグのサンプル

<mt:Entries>
    <h1><mt:EntryTitle></h1>
    <mt:Comments>
        <a name="comment-<mt:CommentID>"></a>
        <p><mt:CommentBody></p>
        <cite><a href="/profiles/<mt:CommenterID>"><mt:CommenterUserName></a></cite>
    </mt:Comments>
</mt:Entries>

MTCommenterURL

コメント投稿者のURLを表示します。

MTCommenterUserpic

コメント投稿者のプロフィール画像を表示します。

サンプル

<h2>最近コメントしたユーザー</h2>
<mt:Comments>
    <div class="userpic" style="float: left; padding: 5px;"><mt:CommenterUserpic></div>
</mt:Comments>

実行結果

<h2>最近コメントしたユーザー</h2>
    <div class="userpic" style="float: left; padding: 5px;"><img src="http://yourblog.com/userpics/1.jpg" width="100" height="100" /></div>

MTCommenterUserpicURL

コメント投稿者のプロフィール画像URLを表示します。

サンプル

<img src="<mt:CommenterUserpicURL>" width="100" height="100" />

MTAuthorUserpic

登録ユーザのプロフィール画像を表示を表示します。

サンプル

<ul><mt:Authors>
     <mt:AuthorUserpicAsset>
       <li>
         <mt:AuthorUserpic>
         <mt:AuthorName>
       </li>
     </mt:AuthorUserpicAsset>
</mt:Authors></ul>

MTAuthorUserpicURL

登録ユーザのプロフィール画像URLを表示を表示します。

サンプル

<img alt="" src="<mt:EntryAuthorUserpicURL>" width="100" height="100" />

MTBlogTemplateSetID

ブログで使用しているテンプレートセットを特定するためのIDを出力するファンクションタグです。

サンプル

<body class="<mt:BlogTemplateSetID>">

結果のIDは"mt-blog"等の文字列が表示されます。

MTEntryClassLabel

コンテンツがブログ記事かウェブページかを表示します。

サンプル

<MTSearchResults>
<div class="search-results-container">
    </MTBlogResultHeader>
<mt:SetVarBlock name="type"><mt:EntryClassLabel></mt:SetVarBlock>
<mt:If name="$type" eq="Page">
<$MTInclude module="Page Summary"$>
<mt:Else>
<$MTInclude module="Entry Summary"$>
</mt:If>
    <MTBlogResultFooter>
</div>
    </MTBlogResultFooter>
</MTSearchResults>

上記のサンプルでは"Page"で判定していますが、日本語環境で実行した場合、ブログ記事で実行すると"ブログ記事"、ウェブページで実行すると"ウェブページ"が返却されるようです。

MTEntryAuthorUserpic

ブログ記事投稿者のプロフィール画像を表示します。

実行結果

<img src="http://yourblog.com/userpics/1.jpg" width="100" height="100" />

MTEntryAuthorUserpicURL

ブログ記事投稿者のプロフィール画像URLを表示します。

サンプル

<img src="<mt:EntryAuthorUserpicURL>" width="100" height="100" />

MTCommentLink

投稿されたコメントへのパーマリンク URL を表示を表示します。

同じ結果になるタグ

<$MTEntryPermalink$>#comment-<$MTCommentID$>

と等しい。

MTCategoryCommentCount

カテゴリーへのコメント数を表示します。

サンプル

<ul><mt:Categories>
    <li><mt:CategoryLabel> (<mt:CategoryCommentCount>)</li>
</mt:Categories></ul>

3.MTOSとの差分

以下はMTOSとの差分です。MT4.1のドキュメントには掲載されていませんでした。
以下、推測で書いています。間違っていたらすいません。

MTIfBlog

ブログIDを判定

MTIfAuthor

登録ユーザを判定

MTAuthorHasEntry

ユーザがブログ記事を投稿しているかを判定

MTAuthorHasPage

ユーザがウェブページを作成しているかを判定

モディファイア

wrap_text

4.関連記事

Comments [0] | Trackbacks [0]

Movable Type 4.1 ベータテスト開始

December 13,2007 4:23 PM
Category:[4.1]
Tag:[, ]
Permalink

Movable Type 4.1 ベータテストが12月14日より開始されます。

シックス・アパートが、最新ブログ・ソフトウェア「Movable Type 4.1」を発表

「Movable Type 4.1」での最大の強化点は、CMS機能として高いニーズがある「カスタムフィールド機能」を基本機能として標準搭載することです。カスタムフィールド機能を利用することで、ブログ記事やウェブページ作成時の、管理画面の入力項目を、任意に追加・拡張することができるようになり、ウェブサイトの運用・管理の手間を大幅に削減することが可能です。これまでも同様な機能を持つプラグインがありましたが、「Movable Type 4.1」では、システムの基本機能として統合することで、操作性やカスタマイズ性がさらに向上し、CMSとして様々な種類のウェブサイトの制作に対応することが可能になります。
さらに、デザインのカスタマイズ性も向上しています。「Movable Type 4.1」では、ウェブサイトを作成するテンプレートをまとめてテンプレートセットとして管理・設定する機能を新たに提供するほか、ブログ記事を編集するエディタ機能を任意の外部ソフトウェアに変更する機能も追加し、多様なニーズにあわせた柔軟なサイト管理を実現します。

ということで、個人的に 4.1 の注目機能は、「カスタムフィールド機能」と「テンプレートセット」でしょうか。
「テンプレートセット」とは、4.0まではテンプレートを1つずつ編集する必要がありましたが、「Movable Type 4.1」ではウェブサイトを作成するテンプレートをまとめて管理・設定する機能らしいです。

Movable Type 4.1 ベータ版のサイトは下記です。

Movable Type 4.1 ベータ

Movable Type 4.1 では、多くのバグフィクス、パフォーマンスの改善、セキュリティ強化に加え、以下のような機能を提供します。

  • ブログ記事などの入力フィールドを拡張する、カスタムフィールド機能
  • プラガブルになったテキストエディタで、標準の WYSIWYG エディタ以外のエディタの導入も簡単に
  • テンプレートセット登録・設定機能で、ウェブサイトで利用するテンプレートの導入が簡単に
  • 管理している全てのブログで共通利用できるグローバルテンプレート機能
  • 登録ユーザーのプローフィール画像登録・表示機能
  • アップロードしたアイテムの情報変更機能
  • テンプレートで使用している MT タグの、リファレンスリンク付きリスト表示機能
  • ブログ記事・ウェブページ作成ページのリニューアル
  • テンプレートタグの追加と拡張

なお、カスタムフィールド機能は、MTOS(オープンソース・ライセンス版)には含まれません。

Comments [0] | Trackbacks [0]

MTOS(Movable Type オープンソース版)Nightly Build リリース

December 13,2007 12:00 AM
Category:[MTOS]
Tag:[]
Permalink

MTOSオープンソース版の MTOS(Movable Type Open Source)の Nightly Build がリリースされました。

MTOS

Movable Type Open Source

As of today, and forever forward, Movable Type is open source. This means you can freely modify, redistribute, and use Movable Type for any purpose you choose. Just want the details and downloads? Skip to the bottom. But you might like the story of how we got here.

下記のダウンロードページにある「» Browse the nightly build archive」のリンクより、MTOSのビルドアーカイブをダウンロードできます。URLが変更されていますので、下記のリンクより取得してください。
バージョンは 4.1 となっています。

Downloading MTOS

Downloading MTOS

その他、冒頭の記事中に掲載された、MTOSの特徴等を抜粋でピックアップしておきます。

  • MTOS の機能は MT4.0 と同等です。
  • MT4で動作するプラグイン、テーマ、テンプレート、デザイン、およびAPIはMTOSでも動作します。
  • MTOSは、ブログ数無制限、ユーザ数無制限、およびOpenIDによるサインインがサポートされた唯一のオープンソースの1つです。
  • MTOSはスタンダードなGPLライセンスでリリースされます。
Comments [0] | Trackbacks [0]

著作権表示の年号を自動更新するプラグイン for WordPress

December 12,2007 2:02 AM
Category:[その他]
Tag:[, , ]
Permalink

WordPress で、著作権表示の年号(西暦表示)を自動更新するプラグインです。

著作権表示の年号を自動更新するプラグイン

最初の公開記事の投稿年と最新の公開記事の投稿年(V1.1 はページ表示時刻より年を取得)を取得し、著作権表示の年号として表示します。単一年の時と複数年の時で表示を下記のように切り替えます。

単一年の時:ex. 2007
複数年の時:開始年と最終年をハイフンで表示 ex. 2005-2007

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

下記のリンクよりプラグインアーカイブ wp-copyright.zip をダウンロードしてください。

wp-copyright.zip(V1.0)
wp-copyright.zip(V1.1 最終年をリアルタイムに取得)

プラグイン開発やサポート等にご支援・ご賛同くださる方からの寄付をお待ち申し上げます。下記の「寄付」のリンクをクリックすると Paypal によるお支払いページにジャンプします。

2.プラグインのインストール

プラグインアーカイブを解凍し、中にある wp-copyright.php を wp-content/plugins ディレクトリにアップロードします。
アップロード後、ブログ管理画面の「プラグイン」より「Copyright」の「有効化」をクリックして緑色にしてください。

プラグイン有効化

3.使用方法

このプラグインでは下記のタグで著作権表示用の年号を取得します。

<?php wp_get_copyright_year(); ?>

設定例は、

<p>Copyright &copy; <?php wp_get_copyright_year(); ?> <?php bloginfo('name'); ?> All rights reserved.</p>

で、冒頭のスクリーンショットのような表示にすることができます。

2007.12.30
V1.1を追加しました。

2008.01.01
V1.1のリンクを修正しました。

Comments [8] | Trackbacks [4]

Adobe Illustrator で入力文字が真っ白になる不具合を解消する

December 11,2007 1:03 AM
Category:[PC]
Tag:[, ]
Permalink

久しぶりに Illustrator を起動して資料を作成しようとしたら、入力文字がまったく表示されなくなりました。PC を再起動しても、再インストールしても状況は変わりません。

が、前に作成した資料では表示されているものもあり、簡単に動作を切り分けてみたところ、どうやら MS 系のフォントだけが表示されないことが分かりました。

下は「MS P明朝」で入力した画面です。選択状態にできるので(画面左上)、文字は入力されているようですが何も見えません。

「MS P明朝」で入力

これを他のフォント、ここでは「HG丸ゴシックM-PRO」に切り替えると表示されます。

「HG丸ゴシックM-PRO」で入力

ネットを検索してみたところ、WIndows アップデート(Microsoft アップデート)でインストールされた「Microsoft MS ゴシックおよび MS 明朝 JIS2004 対応フォント(KB927489)」が影響しているようで、これを削除することで解消されました。

以下、「Microsoft MS ゴシックおよび MS 明朝 JIS2004 対応フォント(KB927489)」の削除方法です。なお正規の対策かどうか不明ですので、作業は自己の責任で行ってください。

また、本記事の Illustrator のバージョンは 9.0 です。CS3 等の最新版であれば問題ないかも知れません。

1.削除方法

「スタート」→「コントロールパネル」で、開いたウィンドウにある「プログラムの追加と削除」を選択。

「プログラムの追加と削除」を選択

「プログラムの追加と削除」ウィンドウの上にある「更新プログラムの表示」をチェック。

「プログラムの追加と削除」を選択

一覧より「Microsoft MS ゴシック & MS 明朝 JIS2004 対応フォント(KB927489)」を選択して、「削除」をクリック。

「プログラムの追加と削除」を選択

「次へ」をクリック。

ソフトウェア更新の削除ウィザード

「はい」をクリック。

ソフトウェア更新の削除ウィザード

「完了」をクリック。

ソフトウェア更新の削除ウィザード

PC再起動後、MS系フォントが表示されるようになりました。

「MS P明朝」で入力

Illustrator 起動時にプログラム起動エラーが表示されましたが、特に問題なく動作しています。

2.参考

Comments [4] | Trackbacks [0]

tabAccordion によるサイドメニューの折りたたみ for WordPress

WordPress で tabAccordion によるサイドメニューの折りたたみについて質問を頂きましたので、本エントリーにてカスタマイズを紹介します。

tabAccordion サンプル

このカスタマイズを行うことで、サイドメニューをサンプルの「最近のエントリー」「カテゴリーリスト」「月別アーカイブリスト」のように、アコーディオン風に折りたたむことができます。

サンプル

設定は当ブログでの配布テンプレート「WordPress テーマ(テンプレート)・3カラム版」用に最適化していますが、CSSを変更すれば他のテンプレートでも応用可能です。

注:IE6で正常に動作していないため、別途確認して修正します。修正致しました。対処方法は5項へ。

1.3カラムレイアウトの修正

tabAccordion の表示幅が広いため、左サイドバーを右サイドバーの左側に移動し、サンプルと同じカラムレイアウトに変更します。

まず「アーカイブ」・「インデックス」・「シングルポスト」・「ページ」の各テンプレート編集画面を開き、左サイドバーを中央カラムの右側になる位置に移動(赤色を削除して青色を追加)します。

変更前

<?php get_header(); ?>
<?php include (TEMPLATEPATH . '/sidebar2.php'); ?>
 
<!-- center -->
<div id="content">
<div class="blog">
   :

変更後

   :
<?php include (TEMPLATEPATH . '/sidebar2.php'); ?>
<?php get_sidebar(); ?>
 
<?php get_footer(); ?>

次に「スタイルシート」編集画面を開き、中央カラムの左罫線(赤色部分)を削除します。

/* for 3 columns fixed layout */
.layout-three-column #content {
    float: left;
    width: 478px;
    margin: 0 0 10px 0;
    border-bottom: 1px solid #669;
    border-left: 1px solid #669;
    border-right: 1px solid #669;
}

また、フッタに clear プロパティ(青色部分)を追加します。
これはフッタの内容が短い場合、フッタがサイドバーの真下に表示される不具合を回避するためです。

#footer {
    margin: 10px 0;
    padding: 1px 0;
    clear: both;
}

この段階でブログを表示し、カラムレイアウトが正常に変更されたことを確認してください。

2.スクリプトのダウンロード・アップロード

tabAccordion のサイトより、tabAccordion.zip のリンクをクリックしてダウンロード。

tabAccordion のサイト

解凍した中にある、

scripts/moo.fx.js
scripts/moo.fx.pack.js
scripts/prototype.lite.js

を scripts フォルダごと、WordPress のインストールディレクトリにアップロードしてください。

3.tabAccordion の設定

「スタイルシート」に tabAccordion のスタイル(下記)を追加します。各設定がどの部分に反映されるかは、コメント(/* ~ */)を参考にしてください。

/* タブ全体 */
#wrapper {
    float: left;
    width: 338px;
    margin: 0 auto;
    padding: 20px 0 0 18px;
}
/* リスト表示部分 */
.boxholder{
    clear: both;
}
/* タブ */
.tab{
    float: left;
    width: 110px;
    _width: 106px;
}
/* タブに表示するタイトル */
.tabtxt{
    margin: 0 1px 0 0;
    padding-bottom: 2px;
    border: 1px solid  #666;
    color: #444;
    background: #f6f6f6;
    text-align: center;
    font-size: 75%;
    line-height: 2.0;
}
/* リストのタイトル */
#wrapper .box h2 {
    margin: 3px 0;
    font-size: 83.3%;
    font-weight: bold;
}
/* リストの内容 */
#wrapper .box ul {
    font-size: 83.3%;
}
/* タブのリンク */
.tab a,
.tab a:link,
.tab a:visited {
    color: #444;
    text-decoration: none;
}
.tab a:hover {
    color: #069;
    text-decoration: underline;
}
/* リストの内容(p要素を用いた場合) */
#wrapper p {
    margin: 0;
    padding: 5px 0;
    font-size: 75%;
    line-height: 1.5;
    /*text-align: justify;*/
}
/* リストマーク表示 */
.box ul {
    padding-left: 16px;
}
html > body .box ul {
    padding-left: 14px;
}
.box ul li {
    magin-left: 6px;
}

「ヘッダー」テンプレートの head 終了タグの前に下記を追加します。これは tabAccordion スクリプトを起動するための設定です。

<script type="text/javascript" src="<?php bloginfo('wpurl'); ?>/scripts/prototype.lite.js"></script>
<script type="text/javascript" src="<?php bloginfo('wpurl'); ?>/scripts/moo.fx.js"></script>
<script type="text/javascript" src="<?php bloginfo('wpurl'); ?>/scripts/moo.fx.pack.js"></script>
<script type="text/javascript">
function init(){
  var stretchers = document.getElementsByClassName('box');
  var toggles = document.getElementsByClassName('tab');
  var myAccordion = new fx.Accordion(
  toggles, stretchers, {opacity: false, height: true, duration: 600}
  );
  //hash functions
  var found = false;
  toggles.each(function(h2, i){
    var div = Element.find(h2, 'nextSibling');
    if (window.location.href.indexOf(h2.title) > 0) {
      myAccordion.showThisHideOpen(div);
      found = true;
    }
  });
  if (!found) myAccordion.showThisHideOpen(stretchers[0]);
}
</script>

赤色で示した部分は、次に設定する tabAccordion 本体の中にある (X)HTML 要素あるいは class 属性名と対応しています。(X)HTML マークアップを変更する場合は、上記の赤色部分も併せて変更してください。

最後に tabAccordion で表示される本体(下記)を、「サイドバー2」の先頭に追加します。カラムレイアウトの構造上、先頭に追加しないとレイアウトが崩れますのでご注意ください。

<div id="wrapper">
  <div id="tabcontent">
  <div class="tab"><h2 class="tabtxt" title="first"><a href="javascript:;">Entries</a></h2></div>
  <div class="tab"><h2 class="tabtxt" title="second"><a href="javascript:;">Categories</a></h2></div>
  <div class="tab"><h2 class="tabtxt" title="third"><a href="javascript:;">Archives</a></h2></div>
  <div class="boxholder">
    <div class="box">
      <h2>Recent Entries</h2><ul><?php get_archives('postbypost', '10','custom' ,'<li>' ,'</li>'); ?></ul>
    </div>
    <div class="box">
      <h2>Categories</h2><ul><?php wp_list_cats('sort_column=name&optioncount=1&hide_empty=1'); ?> </ul>
    </div>
    <div class="box">
      <h2>Archives</h2><ul><?php wp_get_archives('show_post_count=true'); ?></ul>
    </div>
  </div>
</div>
</div>
<script type="text/javascript">
Element.cleanWhitespace('tabcontent');
init();
</script>

赤色で示した部分は必ず同じ名称にしてください。

なお、表示内容はお好みにカスタマイズしたいと思いますので、タグの構造を簡単に説明しておきます。

<div id="wrapper"> ← tabAccordion 全体
  <div id="tabcontent">
 
  ↓ タブ表示部分
  <div class="tab"><h2 class="tabtxt" title="first"><a href="javascript:;">[1番目のタブタイトル]</a></h2></div> 
  <div class="tab"><h2 class="tabtxt" title="second"><a href="javascript:;">[2番目のタブタイトル]</a></h2></div>
  <div class="tab"><h2 class="tabtxt" title="third"><a href="javascript:;">[3番目のタブタイトル]</a></h2></div>
 
  ↓ タブをクリックした時に表示される部分
  <div class="boxholder">
    <div class="box">
        [1番目に表示するリストの内容]
    <div class="box">
        [2番目に表示するリストの内容]
    </div>
    <div class="box">
        [3番目に表示するリストの内容]
    </div>
  </div>
 
</div>
</div>
 
↓ tabAccordion スクリプトを起動
<script type="text/javascript">
Element.cleanWhitespace('tabcontent');
init();
</script>

青色のカッコ書きで示した部分は適宜変更可能ですので、お好みのリストを表示させてください。

また、各 ID 属性、class 属性名は変更可能ですが、ひとつ前のリストにある名称および、スタイルシートと名称が一致するようにしてください。

4.折りたたみ速度を変更する

速度を変更する場合は、「ヘッダー」テンプレート直前に設定した、

toggles, stretchers, {opacity: false, height: true, duration: 600}

の赤色部分を変更してください。

5.IE6 で正常に動作しない場合の対処

ページの先頭に XML 宣言が記述されている場合、IE6 では正常に動作しないようです。IE6 で動作させたい場合は XML 宣言を削除してください。

2007.12.12
script 要素の内容を修正しました。

Comments [18] | Trackbacks [1]

取りにくい

December 9,2007 12:08 AM
Category:[ダジャレ]
Tag:[]
Permalink
Comments [2] | Trackbacks [0]

日清「カップヌードル リフィル」と「タイム缶」

December 8,2007 3:25 AM
Category:[mono]
Tag:[]
Permalink

スーパーで買い物をしていると、インスタントラーメンのコーナーに見慣れないパッケージの「カップヌードル リフィル」があったので買ってきました。

カップヌードル リフィル

最近発売されたのかと思ってネットで調べたら、発売は今年の3月でした。どれだけ気がつくのが遅いんでしょうか…。

カップヌードル リフィル」はその名の通り、詰め替え用のインスタントラーメンで、めんの大きさを従来比約80%に圧縮してコンパクトにしています。「スターターパック」を買えば、専用のカップ「マイヌードルカップ」がついており、洗って何回でも使うことができます。

カップは、プラスチック製の内カップ、透明な外カップの2つに分かれており、その間にラベルとなるしーとをはさむので、デザインをチェンジすることができます。

関東地方(東京都、神奈川県、千葉県、埼玉県、山梨県、群馬県、栃木県、茨城県、長野県、新潟県)のみの地域限定販売です。といっても、日清e-めんShop で購入できます。
ちょうどキャンペーン実施中らしく、2008年1月まで送料無料で買うことができます。


話は変わって、日清のサイトで「カップヌードル リフィル」を見ていたら、「タイム缶回収」の記事を見つけました。

自主回収のお知らせ

自主回収のお知らせ

弊社が2000年8月から製造・販売いたしました缶入りカップヌードル「TimeCan(タイムカン)」の一部において缶の巻き締め不良が原因で缶内に空気が入り、品質に影響する可能性が生じたため、2004年3月より新聞や弊社ホームページで告知し、自主回収を進めて参りました。
さらに徹底を期すため、この度あらためて自主回収へのご協力のお願いをさせていただきます。
該当商品をまだお手元に保管されているお客様には、お手数をおかけして恐縮ですが下記送付先まで代金着払いにてお送りいただきますようお願い申し上げます。後日、商品代金を送付させていただきます。
賞味期間の10年間を楽しみにしていただいた皆様には、ご期待に添えず深くお詫び申し上げます。再びこのようなことの無いように一層の管理体制の向上に努めておりますので、ご理解とご協力のほど、宜しくお願い申し上げます。

「タイム缶」は、20世紀最後の2000年に発売された商品で、「十年缶保存計画」というネーミングで、賞味期間10年の2010年まで、タイムマシンのように保存しておける、というものでした。

実はこの「タイム缶」持ってます。↓

タイム缶

意図的に返品していないのではなく、回収の告知に全く気がついていませんでした。しかも告知は2004年から行われているので、約3年半、気がついていなかった訳です。自主回収のCM等が時々流れているのをみて、「これだけ放送していれば大抵の人は気がつくだろう」と思ってましたが、意外にそうではないということを身をもって知りました。

ネットに深く関わっている割にこういった情報を収集できていなかったのはちょっとショックでしたが、200円の商品を保管して早7年余りが経っていたことに、時の流れの早さを感じました。

Comments [0] | Trackbacks [0]

アーカイブページのリストの表示内容が異なる理由

December 7,2007 2:22 AM
Category:[アーカイブ]
Tag:[, , ]
Permalink

サイドバーの表示をメインページと同じにする」の続きです。

前述のエントリーでは、サイドバーにある各メニューの MTIf タグを外す方法を記しましたが、これだけでは全てのページでサイドバーが同じ表示にはなりません。具体的には、「最近のエントリー」「最近のコメント」「最近のトラックバック」の3つのリストの表示が、アーカイブによって異なります。

理由は、リスト表示に使われるテンプレートタグ(MTEntries 等)がアーカイブの種類に依存した振る舞いをしているためです。全てが依存している訳ではありませんので、具体的な結果については後述します。

これは不具合ではなく、Movable Type の仕様と思われますが、見落としていなければMovable Type ドキュメントには明示的な記述はありません。したがってこれらのリスト類がどのように表示されるか、実際に設定してみないと分からない訳です。

ということで、このエントリーでは、メインページに設定しているリストを各アーカイブページに設定した場合の結果と、それらを回避する方法について記します。

1.「最近のエントリー」「最近のコメント」「最近のトラックバック」のアーカイブページの表示結果

公開テンプレートを例に、メインページに設定してある「最近のエントリー」「最近のコメント」「最近のトラックバック」と同じMTタグを各アーカイブページに設定した場合の表示がどのようになるかを、下記の一覧にまとめました。

最近の
エントリー
最近の
コメント
最近の
トラックバック
カテゴリー・アーカイブ該当カテゴリーのエントリー一覧[MTEntries recently_commented_on指定]
該当カテゴリーの全エントリーのコメントをMTCommentsのlastn分表示
[MTEntries lastn指定]
コメントのないエントリー含めlastn分表示
表示されない
月別アーカイブ該当月のエントリー一覧[MTEntries recently_commented_on指定]
該当月の全エントリー・コメントをMTCommentsのlastn分表示
[MTEntries lastn指定]
該当月のコメントのないエントリー含めlastn分表示
メインページと同様
ブログ記事アーカイブメインページと同様メインページと同様該当エントリーのトラックバック一覧

ちょっと分かりにくいですが、メインページと同じ表示になるのは、

月別アーカイブ:「最近のトラックバック」
ブログ記事アーカイブ:「最近のエントリー」「最近のコメント」

の3パターンのみです。

2.考察

それぞれのリストが、各アーカイブでどのように振舞っているかをまとめました。

最近のエントリー・最近のコメント

「ブログ記事リスト」として再構築される場合は、テンプレートの種別に依存した表示になります。ブログ記事やウェブページといった単一ページではテンプレート種別に依存しません。

最近のトラックバック

そもそも Movable Type におけるトラックバックは、「ブログ記事」あるいは「カテゴリー」に対応した情報です。したがって、ブログ記事リスト・カテゴリーアーカイブとして再構築される場合は、テンプレート種別に依存した表示が自然です。
月別アーカイブでメインページと同じ表示になるのは、トラックバックが「日付」というアーカイブ種別に依存しない性質の情報だからです。

なお、上記の表では、カテゴリーアーカイブでは「最近のトラックバックが表示されない」と記しましたが、実はカテゴリー単位にトラックバック設定があり、ブログ管理画面より「一覧」→「カテゴリ」→「任意のカテゴリ名」で、トラックバック受信許可の項目があります。

カテゴリ単位でのトラックバック受信

ここに表示されたトラックバックURLにトラックバックを送信すれば、カテゴリーアーカイブに紐づけられた「最近のトラックバック」が表示されます。ブログ管理画面の「トラックバック一覧」にも受信件数が表示されます(下)。

カテゴリ単位でのトラックバック受信

3.アーカイブページで正常に表示する方法

次にアーカイブページで「最近のエントリー」「最近のコメント」「最近のトラックバック」を表示する方法を記します。

3.1 プラグインを利用する

メインページと同じ情報をアーカイブページに表示するには、indexcontext プラグインがお勧めです。

関連記事:メインページと同じ情報をアーカイブページで表示する indexcontext プラグイン

また、MTCollate プラグインを利用すればカテゴリー・アーカイブ/月別アーカイブで正常にすることができます。

関連記事:MTCollate を使って「最近のコメント」を表示する

Recents プラグインを利用する方法もあります。このプラグインを利用する場合は、MTCommentsRecent タグに mode="force" を付与することを忘れないでください。

3.2 モジュール化する

リスト自体をモジュール化(部品化)します。具体的には、インデックステンプレートとしてリストを作成・再構築し、その情報をインクルードすれば、問題を解消することができます。
ここで述べる「モジュール化」は、ブログ管理画面の「デザイン」→「テンプレート」→「テンプレートモジュール」とは異なりますのでご注意ください。

モジュール化には、

がありますが、個人的には「Ajax モジュール化」をお勧めします。

4.まとめ

メインページと同じ表示を行う場合、個人的には3.2項のモジュール化による表示を推奨します。

理由は、ページ数が増大しても再構築のパフォーマンスがほとんど変わらないためです。モジュール化しない場合、「最近のエントリー」「最近のコメント」「最近のトラックバック」がアーカイブページ分再構築されますが、インデックステンプレートでモジュール化すれば、アーカイブページが増えても、常に3ファイルしか再構築されずにすみます。

「カテゴリーリスト」や「月別アーカイブリスト」、また再構築のパフォーマンスの問題上、メインページでしか表示が推奨されていない「タグクラウド」等、同様の手法でモジュール化するとさらに良いでしょう。


このエントリーは「アーカイブページに「最近のコメント」「最近のトラックバック」を表示する」をリファクタリングしたものです。

Comments [4] | Trackbacks [0]

サイドバーの表示をメインページと同じにする

Movable Type 4 で、サイドバーの表示をメインページと同じにするカスタマイズです。
複数の方から「各ページのサイドバーの表示をメインページを同じしたいのですが」という質問を頂きましたので、このエントリーで紹介致します。

ここでは当ブログの配布テンプレート「Movable Type テンプレート」を例に説明しますが、デフォルトテンプレートでも同様のカスタマイズが可能です。

なお、このエントリーのカスタマイズを行うだけではメインページと全く同じ表示にならないのですが、そのことについては次回のエントリーで解説します。

1.ページによってサイドバーの表示内容が異なる仕組み

ページによってサイドバーの表示内容が異なるのは、サイドバーの各リストを MTIf タグで括り、表示するページを振り分けているためです。MTIf は Movable Type 4 で新たに追加されたテンプレートタグで、ある値を判定することで処理を振り分ける、という機能をもっています。

例えば、タグクラウドがメインページでしか表示されないのは、下のように MTIf タグで全体を括っています。

<MTIf name="main_index">
<dt class="sidetitle">
Tag Clouds
</dt>
 
<dd class="side">
<ul id="tags">
<MTTags>
<li class="module-list-item taglevel<$MTTagRank$>">
<a href="<$MTTagSearchLink$>"><$MTTagName$></a>
</li>
</MTTags>
</ul>
</dd>
</MTIf>

そして、MTIf タグの name 属性に記述された main_index という変数の値が "1" の場合にのみ、MTIf タグブロック内部が実行(=再構築対象)されます。
main_index という変数は、メインインデックスを再構築する時だけ "1" になる仕組みになっています。

また、月別アーカイブリストは、

<MTIf name="module_monthly_archives">
<MTIfArchiveTypeEnabled archive_type="Monthly">
<dt class="sidetitle">
Monthly Archives
</dt>
 
<dd class="side">
<ul>
<MTArchiveList archive_type="Monthly">
<li><a href="<$MTArchiveLink$>"><$MTArchiveTitle$></a> [<$MTArchiveCount$>]</li>
</MTArchiveList>
</ul>
</dd>
</MTIfArchiveTypeEnabled>
</MTIf>

と、MTIf タグの name 属性に module_monthly_archives という変数名を用いています。そして月別アーカイブの再構築時だけ module_monthly_archives の値が "1" になり、MTIf タグブロック内が再構築対象となります。

2.メインページと同じ表示にする方法

方法は、各リストを括っているMTIf タグを外すだけです。ただし、「最近のエントリー」については冒頭に記した通り、MTIf タグを外しただけではメインページと同じ表示にならないので、その点は予めご了承ください。

以下、リスト別に示します。赤色部分を削除してください。

最近のエントリー

<MTIf name="module_recent_entries">
<dt class="sidetitle">
Recent Entries
</dt>
 
<dd class="side">
<ul>
<MTEntries lastn="10">
<li><a href="<$MTEntryPermalink$>" title="e<$MTEntryID$>"><$MTEntryTitle$></a></li>
</MTEntries>
</ul>
</dd>
</MTIf>

タグクラウド

<MTIf name="main_index">
<dt class="sidetitle">
Tag Clouds
</dt>
 
<dd class="side">
<ul id="tags">
<MTTags>
<li class="module-list-item taglevel<$MTTagRank$>">
<a href="<$MTTagSearchLink$>"><$MTTagName$></a>
</li>
</MTTags>
</ul>
</dd>
</MTIf>

カテゴリーリスト

<MTIf name="module_category_archives">
<MTIfArchiveTypeEnabled archive_type="Category">
<dt class="sidetitle">
Categories
</dt>
 
<dd class="side">
<div id="categories">
<MTTopLevelCategories>
<MTSubCatIsFirst><ul></MTSubCatIsFirst>
<MTIfNonZero tag="MTCategoryCount">
<li><a href="<$MTCategoryArchiveLink$>" title="<$MTCategoryDescription$>"><MTCategoryLabel></a> [<$MTCategoryCount$>]
<MTElse>
<li><MTCategoryLabel>
</MTElse>
</MTIfNonZero>
<MTSubCatsRecurse max_depth="3">
</li>
<MTSubCatIsLast></ul></MTSubCatIsLast>
</MTTopLevelCategories>
</div>
</dd>
</MTIfArchiveTypeEnabled>
</MTIf>

月別アーカイブリスト

<MTIf name="module_monthly_archives">
<MTIfArchiveTypeEnabled archive_type="Monthly">
<dt class="sidetitle">
Monthly Archives
</dt>
 
<dd class="side">
<ul>
<MTArchiveList archive_type="Monthly">
<li><a href="<$MTArchiveLink$>"><$MTArchiveTitle$></a> [<$MTArchiveCount$>]</li>
</MTArchiveList>
</ul>
</dd>
</MTIfArchiveTypeEnabled>
</MTIf>

3.注意事項

タグクラウドは再構築のパフォーマンスに影響があるため、他のアーカイブで表示させない(MTIf タグを外さない)ことをお勧めします。
表示させたい場合は Ajax モジュール化を行ないましょう。

4.サイドバーの MTIf タグに設定されている変数名

参考までに、デフォルトテンプレート(3 カラム)で、各リストの MTIf タグに設定されている変数名をまとめました(配布テンプレートも基本的にこの仕組みにしたがっています)。

リスト名変数名
タグクラウドmain_index
ユーザーアーカイブリストmodule_author_archives
月別アーカイブリストmodule_monthly_archives
月別カテゴリーアーカイブリストmodule_category-monthly_archives
月別ユーザアーカイブリストmodule_author-monthly_archives
最近のエントリーmodule_recent_entries
アイテムリストmain_index
サブカテゴリーリストmodule_category_archives

上記の各変数名がどのページで "1" になるかについては「予約変数一覧 for Movable Type 4(その1)」を参考にしてください。

なお、

main_index
module_recent_entries

の2つの変数については、どちらもメインページのみで "1" となります。

Comments [7] | Trackbacks [0]

Movable Type 4 配布テンプレート不具合のお知らせ

当ブログで配布中の Movable Type 4 テンプレートに一部不具合がありましたのでお知らせ致します。

この不具合はtruth さんよりご指摘頂きました。ありがとうございました。

1.問題点

コメント投稿フォームで、「ログイン情報を記憶」をチェックしても、次回投稿時に投稿者情報が反映されない。

2.原因

コメント投稿フォームの form 要素の name 属性記述もれにより、name 属性を利用してクッキーに投稿者情報を保持する JavaScript が正常に動作していなかった。

3.対処方法

2007年12月5日以前にテンプレートをダウンロードされた方(=template_4_0_utf8_1_6 以前をご利用の方)は、下記のいずれかの方法で修正を行ってください。

3.1 テンプレートを直接修正する

ブログ管理画面より、「デザイン」→「テンプレート」→「テンプレートモジュール」→「コメント入力フォーム」を開き、下記の青色部分(name 属性)を追加してください。

修正前

    :
<form method="post" action="<$MTCGIPath$><$MTCommentScript$>" id="comments-form" onsubmit="if (this.bakecookie.checked) rememberMe(this)">
    :

修正後

    :
<form method="post" action="<$MTCGIPath$><$MTCommentScript$>" name="comments_form" id="comments-form" onsubmit="if (this.bakecookie.checked) rememberMe(this)">
    :

修正後、「ブログ記事」を再構築してください。

3.2 テンプレートを入れ替える

ブログ管理画面より、「デザイン」→「テンプレート」→「テンプレートモジュール」→「コメント入力フォーム」を開き、「Movable Type テンプレート」より template_4_0_utf8_1_7.zip(または template_4_0_utf8_1_7.lzh)またはそれ以降のバージョンのアーカイブをダウンロードし、解凍した中にある、comment_form.mtml の内容と入れ替えてください。

テンプレートをカスタマイズしている場合は、3.1の方法で修正されることをお勧めします。

以上です。
ご利用の皆様にはご迷惑おかけして申し訳ございませんが、よろしくお願い致します。

Comments [2] | Trackbacks [0]

MovableType コンテスト 2007

December 5,2007 2:18 AM
Category:[blog]
Tag:[, ]
Permalink

MovableTypeコンテスト2007MovableTypeコンテスト2007」のエントリー受付が開始されました。

MovableTypeコンテスト2007 エントリー受付開始

Movable Type で作成されたWebサイトを広く募集している 「Movable Typeコンテスト」は、本年で3回目を迎え、エントリー数も年々増え続けています。 さらなる Movable Type の発展のために、第3回「Movable Type コンテスト2007」を開催します。個人、法人は問いません。Movable Type で作成されたコンテンツを公開しているWebサイトであれば、無料でエントリーです。 豪華賞品多数!ぜひ第3回「Movable Type コンテスト2007」にご参加ください。

このコンテストは今年で3回目で、一昨年・昨年と開始時期がもう少し早かったと記憶しています。今年はアナウンスがなかったので「開催されないのかな?」と思っていたら、無事開かれるようでなぜかホッとしました。

以下、公式サイトの「コンテスト概要」からの引用です。

エントリー資格

  • Movable Type で作成されたコンテンツを応募時点から結果発表までの期間、広く一般的に公開しているサイトを開設している法人/個人
  • ラピッドサイトなどのGMO-HSホスティングサービス利用の有無は問いません
  • 前回、前々回コンテストの応募/受賞の有無は問いません

コンテストのスケジュール

エントリー受付
2007年12月3日(月)~2008年3月21日(金)
結果発表
2008年5月12日(月)
授賞式
2008年5月30日(金)

注意事項(抜粋)

  • 受賞サイトについては、受賞後、最低1年間はホームページの質の維持に努めてください。
  • 応募後のURLの変更、コンテンツ、デザインの大幅な修正は認められません。

ちなみに、当サイトは第2回に「準優秀賞」を頂きました(関連ページ)。それ以上の入賞はまずあり得ないので、今回は暖かく見守りたいと思います。

Movable Type をお使いの方は、この機会に是非チャレンジしてみてください。

関連記事

Comments [0] | Trackbacks [0]

Serene Bach 3.00 β版リリース(MySQL / SQLite 対応)

December 4,2007 12:58 PM
Category:[Serene Bach]
Tag:[]
Permalink

本日、Serene Bach 3.00(MySQL / SQLite 対応)のβ版がリリースされました。

Serene Bach 3.00 beta001

大変お待たせいたしました。 Serene Bach 3 beta001 を本日より公開いたします

α版ではアップグレード対応のみでしたが、β版では新規インストールが可能になっています。

元記事からの引用で、Serene Bach 3.0 の主な特徴は以下の通りです。

  • データベース(MySQL / SQLite)に対応
  • テンプレートエンジン刷新(入れ子にされた独自ブロックの処理方法を改善)
  • 管理画面インタフェースが刷新(メニュー構成を大幅に見直)

また、Serene Bach 2.x との互換性については下記の通りです。

  • データの完全な互換性はありません
  • テンプレートの仕様が一部変更されます(仕様の相違については後日公開)
  • プラグインの互換性が保証されません(プラグイン API 等の主な変更点は後日公開)

正式版リリース後に Serene Bach 2.x からのアップグレードを予定されている方は、独自タグの構成やプラグインの適用等について注意が必要と思われます。

Comments [0] | Trackbacks [0]

WordPress テーマ修正

December 4,2007 1:11 AM
Category:[テーマ]
Tag:[, ]
Permalink

配布中の「WordPress テーマ(テンプレート)・3カラム版」を修正しました。
ダウンロードアーカイブは変更済ですので、上記のリンクよりご利用ください。

変更点は下記の通りです。赤色が削除、青色が追加を示しています。

1.月別アーカイブリストの件数表示

サイドバーの月別アーカイブリストの件数が非表示になっていたので、表示されるように変更しました。

変更前

<li><h2>Archives</h2>
    <ul><?php wp_get_archives(); ?></ul>
</li>

変更後

<li><h2>Archives</h2>
    <ul><?php wp_get_archives('show_post_count=true'); ?></ul>
</li>

show_post_count=true で件数を表示します。

この変更は下記の記事を参考にさせて頂きました。ありがとうございました。

2.カテゴリーリストの表示変更

カテゴリーリストで、記事数が0のカテゴリーを非表示にしました。また、サブカテゴリーを階層表示するようにしました。

変更前

<li><h2>Categories</h2>
    <ul>
    <?php wp_list_cats('sort_column=name&optioncount=1&hide_empty=0'); ?>
    </ul>
</li>

変更後

<li><h2>Categories</h2>
    <ul>
    <?php wp_list_cats('sort_column=name&optioncount=1&hide_empty=1&hierarchical=1'); ?>
    </ul>
</li>

hide_empty=1 で記事がないカテゴリを非表示にします。
hierarchical=1 でカテゴリーを階層表示します。

この変更は下記の記事を参考にさせて頂きました。ありがとうございました。

また、階層化に伴い、スタイルシートに下記の設定を追加しました。

#links-left ul ul.children,
#links-right ul ul.children {
    margin-top: 0;
}

3.ブログロールの表示ページ変更

ブログロールを全てのページで表示されるように変更しました。

変更前

<?php if ( is_home() || is_page() ) { ?>
    <?php get_links_list(); ?>
<?php } ?>

変更後

<?php get_links_list(); ?>
Comments [0] | Trackbacks [1]

Movable Type 3 からのアップグレードによる「月別カテゴリーアーカイブ」の追加方法

2日ほど前に、このブログに「月別カテゴリーアーカイブ」を追加しました。カテゴリー・アーカイブの右下に表示されている「Category Monthly Archives」から辿れます。

「月別カテゴリーアーカイブ」

追加した目的は2つあり、ひとつはカテゴリーアーカイブのナビゲーションを増やしたかったこと、もうひとつは Google 検索の「小粋空間」の検索で、どの程度のページ増加があるのかを確認したかったためです。

ページ増加の結果については最後に記すことにして、ここでは、Movable Type 3 からのアップグレードによる「月別カテゴリーアーカイブ」の追加方法を紹介します。

1.日付+カテゴリー(ユーザ)アーカイブについて

カテゴリーアーカイブやユーザアーカイブは、日付アーカイブ(年別・月別等)と異なり、記事数が増加することで1ページのファイルサイズが無限に増えていきます。

Movable Type 3 まではページ分割のカスタマイズでこの問題を回避していましたが、Movable Type 4 では、カテゴリーアーカイブとユーザアーカイブをさらに日付と組み合わせたアーカイブを作成することができるようになったので、例えば、あるカテゴリーアーカイブのトップには一定の記事数を表示し、過去の記事については「日付+アーカイブ」のページへリンクすれば、ページ分割として利用することができ、カテゴリーアーカイブ/ユーザアーカイブのトップページのファイルサイズを抑えることができます。

2.月別カテゴリーアーカイブの作成

Movable Type 4 の新規インストールでは「月別カテゴリーアーカイブ」がデフォルトで用意されているので、ここでは Movable Type 3 のアップグレードで Movable Type 4 運用のケースで「月別カテゴリーアーカイブ」を追加する場合について簡単に説明します。

2.1 アーカイブテンプレートの追加

既存のカテゴリー・アーカイブを利用する場合と、アーカイブを新規作成する場合で若干手順が異なります。

2.1.1 既存のカテゴリー・アーカイブを利用する場合

「デザイン」→「テンプレート」→「アーカイブテンプレート」→「カテゴリー・アーカイブ」を選択。

「カテゴリー・アーカイブ」を選択

2.1.2 新規で作成する場合

「デザイン」→「テンプレート」→「アーカイブテンプレート」で、「アーカイブテンプレートを作成」の右にある「ブログ記事リスト」をクリック。

ブログ記事を新規作成

タイトルに「月別カテゴリー」を入力し(名前は何でもいいです)、編集画面の内容にカテゴリー・アーカイブと同じ内容を設定。

2.2 アーカイブマッピングを追加

ページ下にある「アーカイブマッピング」の「新しいアーカイブマッピングを作成」をクリック。

新しいアーカイブマッピングを作成

セレクトボックスで「カテゴリー - 月別」を選択し、「追加」をクリック。

「カテゴリー - 月別」を選択

これで、再構築をすれば「月別カテゴリーアーカイブ」が生成されます。

3.月別カテゴリーアーカイブリストへのリンクを追加

カテゴリーアーカイブのサイドバーに、月別カテゴリーアーカイブリストへのリンクを追加します。下は MT3 のデフォルトテンプレートに合わせたスタイルにしています。

<MTIf name="module_category-monthly_archives">
<MTIfArchiveTypeEnabled archive_type="Category-Monthly">
<div class="module-archives module">
   <h2 class="module-header"><$MTArchiveTitle$>:月別アーカイブ</h2>
   <div class="module-content">
   <MTArchiveList archive_type="Category-Monthly">
      <MTArchiveListHeader><ul class="module-list"></MTArchiveListHeader>
         <li class="module-list-item"><a href="<$MTArchiveLink$>"><$MTArchiveTitle$></a></li>
      <MTArchiveListFooter></ul></MTArchiveListFooter>
   </MTArchiveList>
   </div>
</div>
</MTIfArchiveTypeEnabled>
</MTIf>

4.完成例

トップページにある「趣味」というカテゴリーページへのリンクをクリックすると、

カテゴリーリストのリンク

「趣味」カテゴリーのサイドバーに「趣味:月別アーカイブ」というリンクが表示されます。

月別カテゴリーリストのリンク

5.検索結果ページ数増加について

「月別カテゴリーアーカイブ」追加による増加ページ数は、約800ページです。

で、「小粋空間」というキーワードで Google 検索すると、ここ最近は160 万件位で頭打ち状態だったのですが、今日調べてみると、260 万件まで増加していました(もう少し日が経つと減少するかもしれません)。

Google 検索結果

ちなみに、著名なブログでも検索結果ページ数は当ブログより少ないケースが少なくないのですが、ここまで検索結果ページ数が稼げているのは、テンプレート利用者のサイトに設定しているクレジットバナーのおかげだと感謝しています。

Comments [0] | Trackbacks [0]

ウェブ時代をゆく ─いかに働き、いかに学ぶか

December 2,2007 2:15 AM
Category:[書籍]
Tag:[, ]
Permalink

先日購入した「ウェブ進化論」の続編、「ウェブ時代をゆく ─いかに働き、いかに学ぶか」を読みました。

ウェブ時代をゆく ─いかに働き、いかに学ぶか (ちくま新書 687)ウェブ時代をゆく ─いかに働き、いかに学ぶか (ちくま新書 687)
梅田 望夫

筑摩書房 2007-11-06
売り上げランキング : 22

Amazonで詳しく見る
by G-Tools

前作の「ウェブ進化論」で味わった「(ウェブに関わっていると)これからもの凄いことになるかもしれない」というワクワク感とは一味違うワクワク感、つまりより現実的・実際的に、今ある「ウェブ」を利用してこれからの人生をどう生きていくことができるかということを、ご自身の体験にもとづいて具体的な考えを示しながら語られていることによる、「本当に何か変えられるかもしれない」というワクワク感が、読後に心地よく残りました。

また、別の観点として、前書「ウェブ進化論」で示した自らのオプティムズムに対し多くの方からの批判があったようで、それらに対するより明確な応答(=オプティムズムを貫くということ)がこの本に反映されているように、かなり強く感じました。

私自身もどちらかと言えばオプティミズム(というよりも、物事に対してあまり深く考えない)で、このブログも自分が楽しければOKと思ってます。それに加えて、テンプレートやカスタマイズの記事、あるいは記事に対する質問の回答により疑問が解消されたことで感謝のコメントを頂けることは大変ありがたく思いますし、それらによって私自身がある種の充実感や満足感を得られていることは間違いないと思います。こういうスタイルでブログを運営できることは本当にラッキーであると感じています。

ということで、基本的には梅田さんの考えに共感するところが多くあり、前作に続いてオプティミズムが充分に感じられる内容も嬉しく、これからも梅田さんの活動には陰ながら応援していきたいと思っています。また「新しい仕事」というには遠く及んでいませんが、私もこのブログを通して「好きを貫きながら飯が食える場所」を見つけられることに何らかの可能性を見出せればと思っています。

Comments [4] | Trackbacks [2]

はてなブックマークウィジェットの設定とカスタマイズ

December 1,2007 1:00 PM
Category:[はてな]
Tag:[, ]
Permalink

はてなブックマークから、ブログに任意のサイトの注目エントリーを貼り付けられるブログパーツ、「はてなブックマークウィジェット」が公開されました。

はてな、「はてなブックマークウィジェット」を公開

「はてなブックマークウィジェット」を利用すると、指定したサイトの「人気エントリー(被ブックマーク数順)」と「注目エントリー(新着かつ一定数以上の被ブックマーク順)」を表示することができます(下)。

人気エントリー表示例
注目エントリー表示例

1.設定方法

はてなブックマークのトップページ右上にある検索フォームに表示したいサイトの URL を入力。ラジオボタンから "URL" を選択して、「検索」をクリック。

「この注目エントリーをブログに貼り付ける」をクリック。

あとは、設定画面にしたがって設定し、一番下の「コード」の内容を貼り付けます。

人気エントリーを表示する場合は、設定画面の「種類」を選択するか、注目エントリーを表示しているページのタイトル右にあるリンクで切り替えてから、「この注目エントリーをブログに貼り付ける」をクリックします。

2.任意の幅に変更する

幅は、設定画面で3種類(150px/200px/250px)が用意されていますが、スクリプト内の

Hatena.BookmarkWidget.width = 150;

の赤色部分を書き換えれば、サイズを変更することができます。

3.表示記事数を変更する

記事数は、設定画面で1~10が用意されていますが、スクリプト内の

Hatena.BookmarkWidget.num   = 5;

の赤色部分を書き換えれば、記事数を変更することができます。

Comments [2] | Trackbacks [1]

バリ島で

December 1,2007 12:30 AM
Category:[ダジャレ]
Tag:[]
Permalink
Comments [4] | Trackbacks [0]
Now loading...
Introduction
List of "December 2007"
Recent Entries
Recent Comments
Recent Trackbacks
QRcode

現在停止中です
携帯電話からこのQRcodeを撮影することで携帯用URLを取得することができます

URI for cellular phones
ギターに入った猫
Styles
Font Size
Default
For defective color vision
Gray Scale
RGB Color
Search this site
loading ...
Categories
Monthly Archives
BlogPeople
Syndicate this site
FeedBurner(RSS1.0/RSS2.0/Atom)
Counter
これまでのアクセス
クリエイティブ・コモンズ・ライセンス
Powered by
Movable Type 5.12