TopMovable Type > バージョン別 > 3.121-ja > 2004年12月
2004年12月30日

ポップアップ画面を用いたコメント投稿(その3:公開テンプレート修正方法)

December 30,2004 2:38 AM
Tag:[]
Permalink

このシリーズの(多分)最後は、公開テンプレートの修正方法についての説明です。

2004年12月30日、本エントリー投稿に伴いまして公開テンプレートにもポップアップ機能を追加致しました。そのためテンプレート取得日によってカスタマイズ方法が若干異なります。これにつきましては各項目の右側に対応するテンプレートを記しましたので必要な方を適宜参照ください。念のため

2004年12月30日以前に取得された方:1、2、3、4.2、5、6
2004年12月30日以降に取得された方:1、2、3、4.1

となっています。どちらか分からない場合は4項のテンプレートの内容で判断してみてください。

Movable Type 3.121を新規インストール、公開テンプレートの内容に差し替えた後、下記の手順を実施して動作確認しています。その中で個別エントリーアーカイブよりコメント・プレビューまたはコメント・エラー画面にジャンプした後でTypeKeyサインインした場合、個別エントリーアーカイブにリダイレクトされずにコメント・リストにリダイレクトされるという事象が発生しています。この点につきましては予めご容赦ください。また日本語のTypeKeyニックネームでサイン・インした場合、どの画面からのサイン・インも文字化けしないことを確認しておりますが、文字化けする場合はご連絡ください。

1.ポップアップ用テンプレート設定(必須)

Movable Type 3.11-ja/3.121-ja 3カラム テンプレート(サイズ可変)
Movable Type 3.11-ja/3.121-ja 3カラム テンプレート(サイズ固定)

より

コメント・リスト(ポップアップ用)
コメント・プレビュー(ポップアップ用)
コメント・エラー(ポップアップ用)
コメント・保留(ポップアップ用)

の各テンプレートを、該当するテンプレートの内容に上書きしてください(どちらのエントリーも同じ内容です)。
なお、コメント・プレビュー/コメント・エラー/コメント・保留テンプレートについては現在お使いのテンプレートを上書き致しますので、予め任意のファイル名でバックアップされることをお勧め致します。

2.Context.pm修正・その1(必須)
Ogawa::Memorandaさんの提供のパッチ

lib/MT/Template/Context.pm

の1170行目辺りに設定します。赤色部分を削除して青色部分を追加してください(念のためバックアップを保存しておきましょう)。

    my $allow_comment_html_note = (($blog->allow_comment_html)
                   ? ($args->{html_ok_msg} || 
                                      MT->translate("(You may use HTML tags for style)")) : "");
    my $lang = ($cfg->DefaultLanguage eq 'ja') ? "&lang=ja" : '';
    my $needs_email = $blog->require_comment_emails ? "&need_email=1" : "";
    my $registration_required = ($blog->allow_reg_comments 
                 && !$blog->allow_unreg_comments);
    my $registration_allowed = $blog->allow_reg_comments;
    my $unregistered_allowed = $blog->allow_unreg_comments;
 
    my $static_arg = $args->{static} ? "static=1" : "static=0";
    my $static_field = ($args->{static} || !defined($args->{static}))
    my ($static_arg, $static_field);
    if (defined($args->{static})) {
    $static_arg = $args->{static} ? "static=1" : "static=0";
    $static_field = $args->{static}
            ? (q{<input type="hidden" name="static" value="1" />})
            : (q{<input type="hidden" name="static" value="0" />});
    } else {
    $static_arg = $ctx->stash('comment_is_static') ? "static=1" : "static=0";
    $static_field = $ctx->stash('comment_is_static')
            ? (q{<input type="hidden" name="static" value="1" />})
            : (q{<input type="hidden" name="static" value="0" />});
    }
    my $typekey_version = $cfg->TypeKeyVersion;

このパッチはコメント・プレビュー/コメント・エラーテンプレートの MTCommentField タグに static属性が指定されていない場合、個別エントリーアーカイブまたは3項のコメントリストに設定した static 属性値を自動的に取得してくれるもので、投稿後の画面遷移がその1の通りになります。

3.Context.pm修正・その2(必須)
MTCommentField タグを利用する場合、展開されるソースに getCookie 関数が含まれます。実はコメント用各テンプレートの「Remember Me」またはHTMLの head タグ内にも同じ関数が存在しており、同一名称の関数が重複する場合は後方に定義されたもの(つまり MTCommentField での getCookie)が有効になります。
これにより、ポップアップ画面で日本語のTypeKeyニックネームが文字化けする場合等は

lib/MT/Template/Context.pm

の(3.121の場合は)1210行目あたりにある下記のスクリプトについて、青色部分を追加してコメントアウトしてください(if文もろとも削除しても良いでしょう)。

    if ($registration_allowed || $unregistered_allowed) {
        $javascript = <<JAVASCRIPT;
<script language="javascript">
//function getCookie (name) {
//    var prefix = name + \'=\';
//    var c = document.cookie;
//    var nullstring = \'\';
//    var cookieStartIndex = c.indexOf(prefix);
//    if (cookieStartIndex == -1)
//        return nullstring;
//    var cookieEndIndex = c.indexOf(";", cookieStartIndex + prefix.length);
//    if (cookieEndIndex == -1)
//        cookieEndIndex = c.length;
//    return unescape(c.substring(cookieStartIndex + prefix.length, cookieEndIndex));
//}
</script>
JAVASCRIPT
    }

テンプレートモジュール「Remember Me」の有無は設定環境によって異なります。修正しても文字化けが解消しない場合は cookie を一旦削除(IEであれば「ツール」→「インターネットオプション」→「Cookieの削除」)してみてください。

4.各アーカイブテンプレート変更(その1:リンク先変更)
ポップアップしたい各アーカイブテンプレート(メインページ/カテゴリー・アーカイブ/日付アーカイブ等)の個別エントリーアーカイブへのリンクを、ポップアップ画面へのリンクに変更します。

4.1 2004年12月30日以降にテンプレートを取得された場合
赤色部分を削除(非ポップアップへのリンクをコメントアウト)して青色部分を追加(ポップアップへのリンクを有効化)してください。よく分からない場合は「ポップアップ用」という行のコメントに括られた部分だけを残して、他(「ポップアップ用」という行も含めて)はごっそり削除してください。

<MTEntryIfAllowComments>
<!-- コメント・非ポップアップ用 -->
| <a href="<$MTEntryPermalink archive_type="Individual"$>#comments">Comments</a> [<$MTEntryCommentCount$>]
<!-- コメント・非ポップアップ用 -->
<!-- コメント・ポップアップ用 -->
| <a href="<$MTCGIPath$><$MTCommentScript$>?entry_id=<$MTEntryID$>" onclick="OpenComments(this.href); return false">Comments</a> [<$MTEntryCommentCount$>]
<-- コメント・ポップアップ用 -->
</MTEntryIfAllowComments>
<MTEntryIfAllowPings>
<!-- トラックバック・非ポップアップ用 -->
| <a href="<$MTEntryPermalink archive_type="Individual"$>#trackbacks">Trackbacks</a> [<$MTEntryTrackbackCount$>]
<!-- トラックバック・非ポップアップ用 -->
<!-- トラックバック・ポップアップ用 -->
| <a href="<$MTCGIPath$><$MTTrackbackScript$>?__mode=view&entry_id=<$MTEntryID$>" onclick="OpenTrackback(this.href); return false">Trackbacks</a> [<$MTEntryTrackbackCount$>]
<-- トラックバック・ポップアップ用 -->
</MTEntryIfAllowPings>

4.2 2004年12月30日以前にテンプレートを取得された場合
赤色部分を青色部分の内容に修正してください。よく分からない場合は青色のリストを丸ごとコピーして赤色のリストと入れ替えてやってください。

<MTEntryIfAllowComments>
| <a href="<$MTEntryPermalink archive_type="Individual"$>#comments">Comments (<$MTEntryCommentCount$>)</a>
</MTEntryIfAllowComments>
<MTEntryIfAllowPings>
| <a href="<$MTEntryPermalink archive_type="Individual"$>#trackbacks">Trackbacks (<$MTEntryTrackbackCount$>)</a>
</MTEntryIfAllowPings>
<MTEntryIfAllowComments>
| <a href="<$MTCGIPath$><$MTCommentScript$>?entry_id=<$MTEntryID$>" onclick="OpenComments(this.href); return false">Comments (<$MTEntryCommentCount$>)</a>
</MTEntryIfAllowComments>
<MTEntryIfAllowPings>
| <a href="<$MTCGIPath$><$MTTrackbackScript$>?__mode=view&entry_id=<$MTEntryID$>" onclick="OpenTrackback(this.href); return false">Trackbacks (<$MTEntryTrackbackCount$>)</a>
</MTEntryIfAllowPings>

各リストの

<MTEntryIfAllowComments>~</MTEntryIfAllowComments>

で括られた部分がコメント、

<MTEntryIfAllowPings>~</MTEntryIfAllowPings>

で括られた部分がトラックバックに該当します。

5.各アーカイブテンプレート変更(その2:JavaScript追加)(2004.12.30以前にテンプレート取得された場合)
ポップアップを利用したいテンプレートの <head> ? </head> の間(</head> の直前がいいです)に下記のスクリプトを追加します。先のリンクがクリックされるとこの JavaScript が起動し、ポップアップ画面を表示します。width(画面の幅) および height(画面の高さ) は任意の値を指定できます。OpenComments はコメントポップアップ用、OpenTrackback はトラックバックポップアップ用です。

<script language="javascript" type="text/javascript">
<!--
// コメント・リスト用
function OpenComments (c) {
    window.open(c, 'comments', 'width=480,height=480,scrollbars=yes,status=yes');
}
 
// トラックバック・リスト用
function OpenTrackback (c) {
    window.open(c, 'trackback', 'width=480,height=480,scrollbars=yes,status=yes');
}
//-->
</script>

6.スタイルシート修正(2004.12.30以前にテンプレート取得された場合)
スタイルシートに下記の青色部分を追加または修正してください(現状のスタイルシートはポップアップ用の設定を行っていましたが、見直したところ一部不具合がありましたので、その修正です)。なお現在ご使用のタイプが固定/可変で設定内容が若干異なりますのでご注意ください。また設定内容はデフォルト状態のものですので、デザインにあわせて適宜修正してくださって結構です。

可変3カラム/固定3カラム共通

/* ポップアップウインドウのタイトル部分 */
    #banner-commentspop {
        z-index: 1;
        color:#999999;
        background:#ffffe0;
        background-position:right top;
        background-repeat:repeat-y;
        background-repeat:no-repeat;
        background-image: url("画像を置くURl/ファイル名.gif");
        padding-left:10px;
        padding-top:10px;
        padding-bottom:10px;
        text-align: left;
        border: 1px solid #666699;
    }
 
    #banner-commentspop h1 {
        color: #999999;
        font-family: "MSゴシック", Arial, sans-serif;
        font-weight: normal;
        font-size: 32px;
    }

固定3カラムご使用の場合は上記の設定の直前にさらに下記を追加

    #box-commentspop {
        width: auto;
        border-bottom: 1px solid #666699;
        border-left: 1px solid #666699;
        border-right: 1px solid #666699;
        background-color: #FFFFFF;
    }

2004.12.30 追記
2項のパッチ表示が誤っておりました。本日10:05に修正致しましたので、それ以前に本画面より直接コピーされた方は差し替えくださいますようお願い致します。またコメント・プレビュー/コメント・エラーでサイン・インしても問題ないことを確認しましたので記述を削除しました。

2004.12.31 追記
投稿後に日本語全角の名前が文字化けする問題が解消されていなかったため3項を追加しました。それに伴い以降の項番をシフトしました。

Comments [14] | Trackbacks [2]
2004年12月29日

コメント投稿者の情報表示をカスタマイズする

December 29,2004 3:20 PM
Tag:[]
Permalink

コメント投稿者の情報表示のカスタマイズについてご説明致します。
表示に使用される変数タグは MTCommentAuthorLink / MTCommentPreviewAuthorLink の2種類で、表示方法の詳細設定にタグアトリビュート(属性)を用います。これによりコメントに入力されたコメント投稿者の情報(URL・メールアドレス等)の表示・非表示やを表示方法等をコントロールすることができます。

カスタマイズ方法です。まず MTCommentAuthorLink / MTCommentPreviewAuthorLink は、下記の各テンプレートの赤色部分に存在します(デフォルトテンプレートで示しています)。カスタマイズされる場合はこれらが一律対象となります。

個別エントリーアーカイブ

<MTComments>
<div id="c<$MTCommentID$>">
<$MTCommentBody$>
</div>
<p class="posted">投稿者 <$MTCommentAuthorLink default_name="Anonymous" spam_protect="1"$> <MTCommentAuthorIdentity> : <$MTCommentDate$></p>
</MTComments>

コメント・プレビュー

<$MTCommentPreviewBody$>
<p class="posted">投稿者 <$MTCommentPreviewAuthorLink spam_protect="1"$> : <$MTCommentPreviewDate$></p>
    :
<MTComments>
<$MTCommentBody$>
<p class="posted">投稿者 <$MTCommentAuthorLink default_name="Anonymous" spam_protect="1"$> : <$MTCommentDate$></p>
</MTComments>

コメント・リスト(本テンプレートを使用している場合)

<MTComments>
<$MTCommentBody$>
<p class="posted">投稿者 <$MTCommentAuthorLink default_name="Anonymous" spam_protect="1"$> : <$MTCommentDate$></p>
</MTComments>

次にタグアトリビュート一覧を示します。

名前の入力がない場合のデフォルト名を設定する

default_name="Anonymous"

これは管理メニュー左の「ウェブログの設定」をクリック→次ページ右上の「設定」をクリック→次ページ下の方にある「コメント」の「名前とURLを必須にする」にチェックがついていない場合に有効になります。デフォルトテンプレートではこの属性が付与されていますが、先のチェックがついていれば気にする必要はありません。この属性の設定がなく「名前とURLを必須にする」チェックがついていない状態で名前なしのコメントが投稿されると、コメント欄に投稿者名が表示されません。
なお設定した場合(および無効にした場合)は以前の名無しコメント全てに適用されます。

メールアドレスにリンクしない

show_email="0"

コメントのメールアドレス欄にメールアドレスが入力されてもリンクしません。デフォルトテンプレートではリンクする状態になっています。

URLにリンクしない

show_url="0"

コメントのURL欄にURLが入力されてもリンクしません。デフォルトテンプレートではリンクする状態になっています。

URLをリダイレクトしない

no_redirect="1"

コメントスパムの目的は、リンクがクリックされることにより検索エンジンのランクを向上させることです。この部分でURLをリダイレクトする意味は、コメント投稿者のURLを検索エンジンから直接見えないようにするためです。そうすることでコメント・スパムの検索エンジンでのランク向上を抑制する効果があります。
デフォルト状態ではこのリダイレクト機能を有効にしていますが、リダイレクトを使いたくない場合は上記の設定を追加してください。

メールアドレスをスパム・ボット対策されたアドレスに変更する

spam_protect="1"

スパマーはHTMLソースに記述されるメールアドレスのフォーマットを見つけてスパムメールを送ります。
spam_protect アトリビュートを設定すればメールアドレスのリンクは表示されますが、スパム・ボット対策されたアドレスに変更されます。つまりブラウザ上では正しいメールアドレスとして表示され、実際のHTMLソースには「@」や「.」を含みません。例えばメールアドレスが

foo@bar.com

であれば、HTMLでは

foo&#64;bar&#46;com

となります。
デフォルトテンプレートではこの設定になっていますが、先の show_email="0" を指定した場合はメールアドレスにリンクしなくなるため冗長な設定となります。ただし設定が残っていても問題はありません。

下記に設定例を示します。最もポピュラーと思われるケースで「メールアドレスをリンクしない&メールアドレスをスパム・ボット対策されたアドレスに変更する」の設定は、

<$MTCommentAuthorLink show_email="0" spam_protect="1"$>

または

<$MTCommentPreviewAuthorLink show_email="0" spam_protect="1"$>

となります。
属性を記述する場合はその前後に半角空白を挿入します(変数タグの終了を示す"$"との間はなくても大丈夫です)。属性の記述順序に制約はありません。

Comments [7] | Trackbacks [4]
2004年12月28日

ユーザー・マニュアルのテンプレート

December 28,2004 12:15 PM
Tag:[]
Permalink
たいしたものではありませんが、以前投稿したサイドメニュー用「Movable Type ユーザー・マニュアル」のテンプレートを公開します。

利用方法は、本テンプレートを貼り付けたいテンプレートのサイドメニュー部分の任意の位置にコピー&ペーストしてください。メニュータイトルもセットになっています。公開テンプレートのスタイルシートをお使いの方は(多分)そのまま使えます。それ以外の方や変更されている方はクラス名等を適宜修正してください。また <$MTBlogURL$> の部分は docs の配置先によって適宜変更してください。
またサイドメニューの折りたたみおよび、サブカテゴリーの折りたたみもデフォルトで設定していますので、折りたたみを利用されている方は(これも多分)折りたたみ状態になります。折りたたみ用の id 属性名は「manual」にしています。折りたたみを利用されていない方も既に使用中の id 属性名と重複していないか確認してください。

ユーザー・マニュアル


各サブメニューはトップページと同じインデントにしています。トップページのサブカテゴリーに変更したい場合は赤色部分のコメントマークを全て削除してください。
       :
<li><!--<div class="subcategories" id="subcategories100name">--><a href="<$MTBlogURL$>docs/mtmanual.html" target="_blank">トップ</a> <!--</div>-->

<!--<div id="subcategories100list">-->
<!--<ul>-->
    <li><a href="<$MTBlogURL$>docs/mtmanual_about.html" target="_blank">Movable Type について</a></li>
       :
    <li><a href="<$MTBlogURL$>docs/mtmanual_configuration.html" target="_blank">mt.cfg 設定ガイド</a></li>
<!--</ul>-->
<!--</div>-->
       :
2004.12.28 追記
タグ内の id 属性が公開テンプレートにないものを指定していましたので修正しました。すいません。またパスの設定について補足を追記しました。
Comments [11] | Trackbacks [2]
2004年12月26日

ポップアップ画面を用いたコメント投稿(その2:カスタマイズ)

December 26,2004 2:10 AM
Tag:[]
Permalink

今回はコメント・トラックバックのポップアップ化のカスタマイズ方法をご説明致します。
ここではデフォルトテンプレートにもとづいたカスタマイズ方法について記しています。当サイトの公開テンプレート用のポップアップ対応版につきましては本シリーズ次回のエントリーでお知らせする予定です。お待たせして申し訳ございませんがもう少々お待ちください。

以下カスタマイズ方法です。なおポップアップはコメントおよびトラックバックについて有無を選択できます。いずれか片方のみをポップアップにする場合は必要な箇所を適宜お読みになってください。

1.各アーカイブテンプレート変更(その1:リンク先変更)
ポップアップしたい各アーカイブテンプレート(メインページ/カテゴリー・アーカイブ/日付アーカイブ等)の個別エントリーアーカイブへのリンクを、ポップアップ画面へのリンクに変更します。

<MTEntryIfAllowComments>
| <a href="<$MTEntryPermalink archive_type="Individual"$>#comments">Comments (<$MTEntryCommentCount$>)</a>
</MTEntryIfAllowComments>
<MTEntryIfAllowPings>
| <a href="<$MTEntryPermalink archive_type="Individual"$>#trackbacks">Trackbacks (<$MTEntryTrackbackCount$>)</a>
</MTEntryIfAllowPings>
<MTEntryIfAllowComments>
| <a href="<$MTCGIPath$><$MTCommentScript$>?entry_id=<$MTEntryID$>" onclick="OpenComments(this.href); return false">Comments (<$MTEntryCommentCount$>)</a>
</MTEntryIfAllowComments>
<MTEntryIfAllowPings>
| <a href="<$MTCGIPath$><$MTTrackbackScript$>?__mode=view&entry_id=<$MTEntryID$>" onclick="OpenTrackback(this.href); return false">Trackbacks (<$MTEntryTrackbackCount$>)</a>
</MTEntryIfAllowPings>

各リストの

<MTEntryIfAllowComments>~</MTEntryIfAllowComments>

で括られた部分がコメント、

<MTEntryIfAllowPings>~</MTEntryIfAllowPings>

で括られた部分がトラックバックに該当します。

2.各アーカイブテンプレート変更(その2:JavaScript追加)
ポップアップを利用したいテンプレートの <head> ? </head> の間(</head> の直前がいいです)に下記のスクリプトを追加します。先のリンクがクリックされるとこの JavaScript が起動し、ポップアップ画面を表示します。width(画面の幅) および height(画面の高さ) は任意の値を指定できます。OpenComments はコメントポップアップ用、OpenTrackback はトラックバックポップアップ用です。

<script language="javascript" type="text/javascript">
<!--
// コメント・リスト用
function OpenComments (c) {
    window.open(c, 'comments', 'width=480,height=480,scrollbars=yes,status=yes');
}
 
// トラックバック・リスト用
function OpenTrackback (c) {
    window.open(c, 'trackback', 'width=480,height=480,scrollbars=yes,status=yes');
}
//-->
</script>

3.コメント・リストテンプレート修正
コメント・リストがポップアップ画面であることを示す MTCommentFields フィールドタグの static 属性に "0" を追加します。コメント投稿後の画面をコメント・リストに誘導する場合はこの指定を行ってください。

<MTCommentFields static="0">

4.Context.pm修正(その1:static属性値取得用パッチ)
Ogawa::Memorandaさんの提供のパッチ

lib/MT/Template/Context.pm

の1170行目辺りに設定します。赤色部分を削除して青色部分を追加してください(念のためバックアップを保存しておきましょう)。

    my $allow_comment_html_note = (($blog->allow_comment_html)
                   ? ($args->{html_ok_msg} || 
                                      MT->translate("(You may use HTML tags for style)")) : "");
    my $lang = ($cfg->DefaultLanguage eq 'ja') ? "&lang=ja" : '';
    my $needs_email = $blog->require_comment_emails ? "&need_email=1" : "";
    my $registration_required = ($blog->allow_reg_comments 
                 && !$blog->allow_unreg_comments);
    my $registration_allowed = $blog->allow_reg_comments;
    my $unregistered_allowed = $blog->allow_unreg_comments;
 
    my $static_arg = $args->{static} ? "static=1" : "static=0";
    my $static_field = ($args->{static} || !defined($args->{static}))
    my ($static_arg, $static_field);
    if (defined($args->{static})) {
    $static_arg = $args->{static} ? "static=1" : "static=0";
    $static_field = $args->{static}
            ? (q{<input type="hidden" name="static" value="1" />})
            : (q{<input type="hidden" name="static" value="0" />});
    } else {
    $static_arg = $ctx->stash('comment_is_static') ? "static=1" : "static=0";
    $static_field = $ctx->stash('comment_is_static')
            ? (q{<input type="hidden" name="static" value="1" />})
            : (q{<input type="hidden" name="static" value="0" />});
    }
    my $typekey_version = $cfg->TypeKeyVersion;

このパッチはコメント・プレビュー/コメント・エラーテンプレートの MTCommentField タグに static属性が指定されていない場合、個別エントリーアーカイブまたは3項のコメントリストに設定した static 属性値を自動的に取得してくれるもので、投稿後の画面遷移がその1の通りになります。

5.Context.pm修正(その2:重複関数の修正)
MTCommentField タグを利用する場合、展開されるソースに getCookie 関数が含まれます。実はコメント用各テンプレートの「Remember Me」またはHTMLの head タグ内にも同じ関数が存在しており、同一名称の関数が重複する場合は後方に定義されたもの(つまり MTCommentField での getCookie)が有効になります。
これにより、ポップアップ画面で日本語のTypeKeyニックネームが文字化けする場合等は

lib/MT/Template/Context.pm

の(3.121の場合は)1210行目あたりにある下記のスクリプトを、前方のスクリプトの内容をコピーして一致させる(多分赤色の1行が問題)か、

    if ($registration_allowed || $unregistered_allowed) {
        $javascript = <<JAVASCRIPT;
<script language="javascript">
function getCookie (name) {
    var prefix = name + \'=\';
    var c = document.cookie;
    var nullstring = \'\';
    var cookieStartIndex = c.indexOf(prefix);
    if (cookieStartIndex == -1)
        return nullstring;
    var cookieEndIndex = c.indexOf(";", cookieStartIndex + prefix.length);
    if (cookieEndIndex == -1)
        cookieEndIndex = c.length;
    return unescape(c.substring(cookieStartIndex + prefix.length, cookieEndIndex));
}
</script>
JAVASCRIPT
    }

青色部分を追加してコメントアウトしてください(if文もろとも削除しても良いでしょう)。

    if ($registration_allowed || $unregistered_allowed) {
        $javascript = <<JAVASCRIPT;
<script language="javascript">
//function getCookie (name) {
//    var prefix = name + \'=\';
//    var c = document.cookie;
//    var nullstring = \'\';
//    var cookieStartIndex = c.indexOf(prefix);
//    if (cookieStartIndex == -1)
//        return nullstring;
//    var cookieEndIndex = c.indexOf(";", cookieStartIndex + prefix.length);
//    if (cookieEndIndex == -1)
//        cookieEndIndex = c.length;
//    return unescape(c.substring(cookieStartIndex + prefix.length, cookieEndIndex));
//}
</script>
JAVASCRIPT
    }

テンプレートモジュール「Remember Me」の有無は設定環境によって異なります。

以上です。例によって不具合等ございましたらご連絡ください。

2004.12.26 追記
MTCommentFiled を利用する場合、getCookie 関数による不具合が生じる可能性があるため、記述を追加しました。

2004.12.27 追記
Ogawa::Memorandaさんより提供くださったパッチの適用により、4項以降の記述を全面修正致しました。

2004.12.30 追記
4項のパッチ表示が誤っておりました。本日10:00頃に修正致しましたので、それ以前に本画面より直接コピーされた方は差し替えくださいますようお願い致します。

Comments [34] | Trackbacks [3]
2004年12月24日

menufolder.js 3.01 リリース

December 24,2004 12:00 PM
Tag:[]
Permalink

折りたたみスクリプトの menufolder.js をマイナーバージョンアップしました。
今回の修正は MacIE 用の対処です。3.00での MacIE で折りたたみが正常に動作しない問題について修正致しました。MacIE をご使用の方は多くないかも知れませんが、折りたたみ可能なブラウザが拡大されますのでアップグレードされることをお勧めします。
なお今回の修正は TOY COZY MUSEUM:toycozy さんおよび、Mellout,inc.:mellout さんのご助言およびご協力によりリリースすることができました。この場をお借りしてお礼申し上げます。

アップグレードされる場合は下記のリンクでスクリプトのページ(あちこちにリンクを貼るとメンテナンスが大変なので新しく作りました)へジャンプし、そこからダウンロードしてください。

download

なお 3.00 のスクリプトから修正される場合は下記の変更を行ってください。
まず95行目あたりにある赤色部分の行を青色のものに入れ替えます。

for(var x = 0; x < list.length; x++) {
    if (list[x] != name) {
        newData.push(list[x]);
    }
}
for(var x = 0; x < list.length; x++) {
    if (list[x] != name) {
        newData[newData.length] = list[x];
    }
}

次にスクリプト冒頭に配している各設定データ(赤色部分)

//--------------------------------------------------------
// Configuration
//--------------------------------------------------------
 
// サイドメニュー用折りたたみマーク
var openMarkForSideBarMenu  = '▽';
var closeMarkForSideBarMenu = '△';
        :
      (中略)
        :
// サブカテゴリー用折りたたみマーク
var openMarkForSubCategories  = '▽';
var closeMarkForSubCategories = '△';
 
//--------------------------------------------------------

をごっそり切り取り、下記の位置(切り取り前の行数で言うと172行と173行の間)に移動します。

        :
        :
function FoldNavigation(idName,initMode,viewNum) {
 
//--------------------------------------------------------
// Configuration
//--------------------------------------------------------
 
// サイドメニュー用折りたたみマーク
var openMarkForSideBarMenu  = '▽';
var closeMarkForSideBarMenu = '△';
        :
      (中略)
        :
// サブカテゴリー用折りたたみマーク
var openMarkForSubCategories  = '▽';
var closeMarkForSubCategories = '△';
 
//--------------------------------------------------------
 
    var openMark;  // The mark for opening, when having closed
    var closeMark; // The mark for closing, when open
    var preMark;   // The insertion position of a mark.
        :
        :

具体的な修正内容は下記の通りです。

  • 現状のスクリプトで用いている push 関数が MacIE では期待する動作とならないため、push 関数による処理を配列の代入処理に変更。
  • グローバル変数として設定している各設定値用の変数のスコープが正常に認識できないため、ローカル変数として配置するように変更。
Comments [14] | Trackbacks [9]
2004年12月22日

MTCommentPreviewIsStatic の振る舞いについての改善案

December 22,2004 3:08 PM
Tag:[]
Permalink

コメントのポップアップ化に関する事項で、投稿後の表示画面選択情報を保持する MTCommentPreviewIsStatic の振る舞いについて改善案を記します。

MTCommentFields タグで MTCommentPreviewIsStatic が指定できない

MTCommentFields はコメント・リスト/コメント・プレビュー/コメント・エラーの各テンプレートでコメント入力フォームを指定するコンテナタグです。MTCommentPreviewIsStatic は、ユーザー・マニュアルでは

特別な秘匿タグで、Comment Preview and Comment Error テンプレートで使います。システムは、コメントを投稿後、どのページを表示したらよいか知るために、このタグを利用します。このタグを使うときは Comment Preview と Comment Error テンプレートの中の HTML フォーム の INPUT HIDDEN の中に埋め込みます。

という説明になっています。これは変数タグで、値と意味は次の通りと考えられます。

0:ポップアップ・ウィンドウ
1:非ポップアップ・ウィンドウ

MTCommentPreviewIsStatic の元となる情報は、個別エントリーアーカイブではコメントフォームに埋め込まれた

<input type="hidden" name="static" value="1">

またはコメント・リストの

<MTCommentFields static="0">

より取得します。

この値の取得方法は Movable Type ユーザー・マニュアルによると、コメント・プレビュー/コメント・エラーテンプレートのコメントフォーム内に

<input type="hidden" name="static" value="<$MTCommentPreviewIsStatic$>">

を指定するようになっています。
input タグを用いるということは、デフォルトテンプレートで使われている MTCommentFields が適用できないということを暗黙的に指しており、コメント用テンプレートに 個別エントリーアーカイブと同じ(膨大な)テンプレートを貼り付ける必要があります。
これは大きな問題ではありませんが面倒です。また直感的およびポップアップ化によるテンプレート変更の容易性から、コメント・プレビュー/コメント・エラーテンプレートで

<MTCommentFields preview="1" static="<$MTCommentPreviewIsStatic$>">

という指定ができても良いのではないでしょうか(実験しましたが×)。

という訳で上記は改善案として記させて頂きました。またこの指定が可能となるパッチが Orgawa::memoranda さんより公開されることを密かに期待しております。

なお MTCommentPreviewIsStatic 値の取得は、MTCommentFields を残した状態で下記のスクリプト(青色部分)を追加することで実現できます。

<MTCommentFields preview="1">
<script type="text/javascript">
<!--
if (document.comments_form.static)
    document.comments_form.static.value = '<$MTCommentPreviewIsStatic$>';
//-->
</script>

この方が、個別エントリーアーカイブよりコメント用フォームをコピー&ペーストし、その中の input タグの指定を変更するという作業を行うよりはるかに簡単です。

コメント・プレビュー/コメント・エラー画面でフォーム情報が引き継がれない

真面目に input タグから MTCommentPreviewIsStatic 値を取得した場合の問題です。
現状の仕様により、MTCommentPreviewIsStatic を使用するためにコメント・プレビュー/コメント・エラーテンプレートの

<MTIfCommentsAllowed>
        :
</MTIfCommentsAllowed>

を個別エントリーアーカイブのもの(厳密にはcookie取得用のJavaScriptを含む)に入れ替える必要がありますが、そのままではフォーム入力がプレビュー画面に引き継がれないという問題(カスタマイズ不足?)が発生します。
これについては入れ替えた部分の下記の input タグにvalue 属性等(青色部分)を追加することで解決します。

<input tabindex="1" id="author" name="author" value="<$MTCommentPreviewAuthor encode_html="1"$>"/>
             :
<input tabindex="2" id="email" name="email" value="<$MTCommentPreviewEmail encode_html="1"$>"/>
             :
<input tabindex="3" type="text" name="url" id="url" value="<$MTCommentPreviewURL encode_html="1"$>"/>
             :
<textarea tabindex="4" id="text" name="text" rows="10" cols="50"><$MTCommentPreviewBody convert_breaks="0" encode_html="1"$></textarea>

また入れ替えたタグの直後に下記のスクリプト(Ogawa::memorandaMovable Type 3.0のMTCommentFields tagより引用)を追加する方法もあります。

<script type="text/javascript">
<!--
if (document.comments_form.author)
    document.comments_form.author.value =
        '<$MTCommentPreviewAuthor encode_js="1"$>';
if (document.comments_form.email)
    document.comments_form.email.value =
        '<$MTCommentPreviewEmail encode_js="1"$>';
if (document.comments_form.url)
    document.comments_form.url.value =
        '<$MTCommentPreviewURL encode_js="1"$>';
if (document.comments_form.text)
    document.comments_form.text.value =
        '<$MTCommentPreviewBody convert_breaks="0" encode_js="1"$>';
//-->
</script>

仮にこれが不具合であったとしてもシステムとして修正されることは考えにくいので、やはりコメント・プレビュー/コメント・エラーテンプレートでは MTCommentFields の利用が前提ではないかと推測しています。

動作および振る舞いについて認識誤り等ございましたらご指摘ください。

2004.12.23 追記
フォーム情報が引き継がれない問題について、(o)さんよりアドバイス頂いた方法(inputタグに挿入)に修正しました。先に書いたのもとりあえず残してます。
またスクリプトの引用がもれていたので追記しました。
さらにcookie取得用のJavaScriptは不要ですので削除しました(ポップアップでこれが必要なのはコメント・リストテンプレートのみ)。

2006.04.04 追記
リストから language 属性を削除しました(HTML4.01/XHTMLで非推奨あるいは廃止されているため)。

Comments [8] | Trackbacks [0]
2004年12月20日

用語集追加

December 20,2004 1:20 AM
Tag:[]
Permalink

サイドバーメニューの「Introduction」に「用語集」を追加しました。とりあえずこのサイトで用いる用語の中から分かりづらいと思われるものを選んで書いてみましたが、このページはどんどん追加していきたいと考えておりますので、追加希望等がございましたらこちらのエントリーのコメントにご記入頂ければ幸いです。
用語集をカテゴリーとして独立させる手もありますが、それについては別途検討したいと思います。

このページとは別にブログの使い方を記したページを随分前から作っておりまして、そのページとペアで公開する予定でしたがまだ陽の目を見れそうにないので、アクセス頻度の高そうなこちらのページだけ先に公開することにしました。

Comments [10] | Trackbacks [0]
2004年12月19日

ポップアップ画面を用いたコメント投稿(その1:基本動作)

December 19,2004 1:05 AM
Tag:[]
Permalink

ポップアップ画面を利用したコメント投稿の仕組みについてご説明致します(分かる範囲で)。このエントリーを投稿した段階ではテンプレートおよびカスタマイズ方法を公開しておりません。予めご了承ください。

最初に Movable Type ユーザー・マニュアルよりポップアップの定義を引用します。

アーカイブの1ページに2つ以上のエントリーを持つような種類のアーカイブを使う場合、コメントをインラインにするのはあまり意味がありません。 そのような場合のために、Movable Typeでは動的に生成されるコメント用ポップアップ・ウィンドウを利用できます

つまり、デフォルトテンプレートあるいはデフォルトの設定で再構築した状態ではメインページやカテゴリー・アーカイブページ・月別アーカイブページ等からのコメント投稿(あるいは参照)では個別エントリーアーカイブページにジャンプしますが、ページ遷移せずにコメント投稿(あるいは参照)できることがポップアップの目的と考えられます。トラックバックリスト表示も同様です。

次に図を用いてポップアップを利用したメインページからのページ遷移について示します。図および説明はデフォルトテンプレートおよびデフォルト設定を前提にしています。またポップアップを利用する場合でも個別エントリーアーカイブからのコメント投稿は有効という前提です。
通常のコメント投稿は、メインページや各アーカイブページからエントリー下に表示される時間のリンクをクリックすると、個別エントリーアーカイブ(図の左側)にジャンプします。そこでコメントを入力し「確認」をクリックすればコメント・プレビュー画面(図の左下)に遷移します。コメント・プレビュー画面で「投稿」をクリックするとコメントが反映された個別エントリーアーカイブにリダイレクトします。個別エントリーアーカイブで「投稿」をクリックすれば、同じようにコメントが反映された個別エントリーアーカイブにリダイレクトします。

ポップアップを利用したコメント投稿の場合、メインページや各アーカイブページのエントリー下にある"Comments"のリンクをクリックするとポップアップするように予め設定することを前提とします(設定方法は別途)。ポップアップしたコメント・リスト上でコメントを入力し、「確認」をクリックすればコメント・プレビュー画面(ポップアップ:図の右側)に遷移します。その画面で「投稿」をクリックするとコメントが反映されたコメント・リスト(図の右下)にリダイレクトします。コメント・リストで「投稿」をクリックすれば、同じようにコメントが反映されたコメント・リストにリダイレクトします。

コメント画面遷移の仕組み

上記の動作を実現するためには、個別エントリーアーカイブからのリダイレクト先とポップアップ画面からのリダイレクト先をダイナミックに変更させる仕組みが必要になります。なぜなら「コメント・リスト」テンプレートはどちらも同じものが使われているためです。

当初このサイトではポップアップ画面を利用していたのですが、ポップアップ画面からの投稿後のリダイレクト先が図のような遷移にならずメインページになる、つまり狭いポップアップ画面に3カラムのページが表示されてしまうため途中からポップアップしない設定に変更しました。
当時は設定方法に問題があったためそうなっていました。今回はリダイレクト先の設定方法を含めてテンプレートおよびカスタマイズ方法を次回以降にご説明する予定です。

ポップアップ画面利用についてはひとつ制約があります。前述の通りコメント・プレビュー画面は個別エントリーアーカイブおよびコメント・リスト、いずれからの遷移においても同一のテンプレートを使用します。つまりポップアップの利便性を考慮すると、コメント・プレビュー画面は必然的に1カラムになります。ポップアップは画面サイズを任意に指定できますので情報量をコントロールする(例えばマルチカラム化等)ことも可能ですが、使用目的から考えると必要最低限の情報を表示することが好ましいでしょう。

Comments [5] | Trackbacks [0]
2004年12月18日

検索画面テンプレート追加

December 18,2004 2:30 AM
Tag:[]
Permalink

検索画面テンプレートを下記のエントリーに追加しました。

検索画面テンプレートはサイドメニューの Search this site による検索結果を表示する際に用いられます。以前公開したものと機能的な差分はありませんが日本語表示に対応できるように変更しました(それを機能的な差分というのかも知れません)。下記は公開テンプレートに本テンプレートを適用した場合の検索結果表示イメージです。

検索文字列がヒットした場合検索文字列がヒットした場合
検索文字列がヒットしなかった場合検索文字列がヒットしなかった場合
検索文字列を設定せずに検索を実行した場合検索文字列を設定せずに検索を実行した場合

また検索が実行された場合、管理画面(メインメニュー)右下にある「Movable Type のログの確認」をクリックすると

2004.12.17 15:23:56 192.168.0.111 Search: query for 'hogehoge'

という具合に表示されますので、簡単な検索文字列解析に使えます。

2004.12.21 追記
検索結果の右側に表示される Edit という編集画面へのリンクを削除したい場合は、下記の赤色部分を削除するか、

<div class="blogbody">
<h3 class="title"><a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a></h3>
<p><$MTEntryExcerpt$> <$MTEntryEditLink$></p>
<p class="posted"><MT_TRANS phrase="Posted in "><$MTBlogName$><MT_TRANS phrase=" on "><$MTEntryDate$></p>
</div>

青色のコメントマークをつけてコメントアウトしてください。

<div class="blogbody">
<h3 class="title"><a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a></h3>
<p><$MTEntryExcerpt$> <!--<$MTEntryEditLink$>--></p>
<p class="posted"><MT_TRANS phrase="Posted in "><$MTBlogName$><MT_TRANS phrase=" on "><$MTEntryDate$></p>
</div>
Comments [20] | Trackbacks [8]
2004年12月16日

Movable Type ユーザー・マニュアルをサイドメニューに追加

December 16,2004 12:40 PM
Tag:[]
Permalink

User's ManualMovable Type ユーザー・マニュアル、いつもトップページURLの後ろに "docs" と打ち込んでジャンプしていたのですが、だんだん面倒になってきたのでサイドバーのメニューとして追加してみました。今のところこのサイトについて」の右下トップページ左下にひっそり置いてます。

メニューは、せっかくなのでトップページへのリンクだけでなく、サブメニューの中から頻度の高そうなものをピックアップして加えました。またテンプレート系のマニュアルは見る機会が多いので、さらにサブカテゴリー化("▽"マークで折りたたみ)して直接参照したい項目にジャンプできるようにしています。サブメニュー全体はトップのサブカテゴリーにするのが本来ですが、テキストの折り返しが煩わしいのでトップと同じレベルに配しました。

リストはサブカテゴリー表示を流用しています。ただし「id 属性は文書内で一意でなければならない」という制約があるため、サブカテゴリーリストの

<div id="categories">

が使えません。したがってサブカテゴリー表示用のスタイルシート categories の内容に別名の id 属性を付与して使用しています。

Comments [0] | Trackbacks [0]
2004年12月13日

サブカテゴリーリストの折りたたみ

December 13,2004 1:00 AM
Tag:[]
Permalink

サイドメニューのサブカテゴリーリストの折りたたみカスタマイズをご紹介致します。

仕様

  • サブカテゴリーが存在する親カテゴリーの右側に折りたたみマークを表示します
  • 折りたたみマークは任意の文字を指定できます
  • カテゴリーのエントリーの有無には依存しません
  • 折りたたみ状態をcookieで保持します
  • カテゴリー名が折り返されても(多分)大丈夫です。

また、サイドメニューのツリー化スクリプトとの併用が可能です。以下設定方法です。
なおV3.0にサブカテゴリー折りたたみ機能を盛り込み済ですので、サイドメニューの折りたたみを既にご利用くださっている方につきましては下記の1項および6項をスキップしてください。

1.menufolder.js ダウンロード

下記のリンクをクリックするとスクリプトのページへジャンプします。そこで menufolder.js をクリックし、同じファイル名でご自身のPCに保存してください。

download

ファイルは UTF-8 で作成していますのでブログと同じ文字コードに合わせてください(よく分からない方はそのままで結構です)。

2.menufolder.js 設定変更

menufolder.js をテキストエディタ等を用いて、下記の青色行の赤色部分を本リストの通り(折りたたみマークは任意)に変更してください。

// カテゴリーリスト数計算方法
// サブカテゴリーのカテゴリー数を適正に計数する
// サブカテゴリーに対応:true
// 従来のカテゴリーに対応:false
var subCategoryCount = true;
 
       :
 
// サブカテゴリーフラグ
// サブカテゴリーの折りたたみを有効にする(テンプレート要設定)
// 有効にする:true
// 無効にする:false
var subCategory = true;
 
// サブカテゴリー用折りたたみマーク
var openMarkForSubCategories  = '';
var closeMarkForSubCategories = '';

設定内容の詳細は下記の通りです。

subCategoryCount

  • 名称:カテゴリーリスト数計算方法
  • 用途:カテゴリーリスト数計算方法を li タグ(サブカテゴリー表示)で計数するか、a タグ(従来の一括表示)で計数するかを指定します。
  • 設定値: true:li タグで計数/false:a タグで計数

subCategory

  • 名称:サブカテゴリーの折りたたみ有効フラグ
  • 用途:サブカテゴリーの折りたたみの有効/無効を設定します。ここでは有効にします。
  • 設定値: true:有効/false:無効

openMarkForSubCategories/closeMarkForSubCategories

  • 名称:サブカテゴリーの折りたたみマーク
  • 用途:サブカテゴリー名横に表示する折りたたみ用リンクのマーク
  • 設定値:任意の文字(設定したマークを''で括るように)

3.menufolder.js 配置

menufolder.js の修正が終わったら保存し、ローカル・サイト・パスに配置してください。「配置」とはレンタルサーバの場合はFTPツール等によるアップロード、自宅サーバの場合は単なるコピーを示します。

4.カテゴリーリスト表示用タグ修正

折りたたみを利用する各テンプレートの、カテゴリーリストを表示するタグを変更します。上は3.1x用の公開テンプレートからの抜粋ですので、この赤色部分を下のリストの青色部分と入れ替えてください。

<div class="sidetitle">
Categories
</div>
 
<!-- 全カテゴリー用 -->
<div class="side">
<MTCategories>
<a href="<$MTCategoryArchiveLink$>">
<$MTCategoryLabel$></a>  [<$MTCategoryCount$>]<br />
</MTCategories>
</div>
<!-- 全カテゴリー用 -->
 
<!-- サブカテゴリー用
<div class="side">
<div id="categories">
<MTSubCategories>
<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>
</MTSubCategories>
</div>
</div>
     サブカテゴリー用 -->
<div class="sidetitle">
Categories
</div>
 
<!-- サブカテゴリー用 -->
<div class="side">
<div id="categories">
<MTTopLevelCategories>
<MTSubCatIsFirst><MTHasParentCategory><div id="subcategories<MTParentCategory><$MTCategoryID$></MTParentCategory>list"></MTHasParentCategory><ul></MTSubCatIsFirst>
<MTIfNonZero tag="MTCategoryCount">
<li><MTHasSubCategories><div class="subcategories" id="subcategories<$MTCategoryID$>name"></MTHasSubCategories><a href="<$MTCategoryArchiveLink$>" title="<$MTCategoryDescription$>"><MTCategoryLabel></a> [<$MTCategoryCount$>] <MTHasSubCategories></div></MTHasSubCategories>
<MTElse>
<li><MTHasSubCategories><div class="subcategories" id="subcategories<$MTCategoryID$>name"></MTHasSubCategories><MTCategoryLabel> <MTHasSubCategories></div></MTHasSubCategories>
</MTElse>
</MTIfNonZero>
<MTSubCatsRecurse>
</li>
<MTSubCatIsLast></ul><MTHasParentCategory></div></MTHasParentCategory></MTSubCatIsLast>
</MTTopLevelCategories>
</div>
</div>
<!-- サブカテゴリー用 -->

緑色は公開テンプレートからの変更または追加部分を示しています。また

<div class="side">

の部分に折りたたみ用の id 属性を設定されている場合は、現在の設定を反映させてください。

5.JavaScript起動用スクリプト設定

折りたたみを利用する各テンプレートに、menufoleder.js の FoldNavigation を起動するスクリプトを設定します。この設定方法には 起動スクリプトの自動生成と手動設定の2通りがあります。
menufolder.js を起動する単位は親カテゴリーです。つまり、折りたたむ親カテゴリーの増減が発生するとこの起動部分も増減、つまり変更の必要が生じます。自動生成ではMTタグを用いており、折りたたみが必要な親カテゴリーの id 属性を取得し、起動スクリプトを再構築時に自動生成ます。手動設定の場合は親カテゴリー分の起動スクリプトを文字通り手動で挿入します。
普通に考えれば前者しかありえませんが、自動生成では折りたたみの初期状態を「全て開く」または「全て閉じる」のいずれかのみしか選択できない、また子カテゴリーを持つ全ての親カテゴリーに折りたたみマークが付与されるのがデメリットです。手動設定は面倒な反面、初期状態を親カテゴリー別にきめ細かく設定できます。また折りたたむ親カテゴリーを任意に選択することができます。
という訳で自動生成を行う場合は5.1を、手動設定の場合は5.2の作業を行ってください。

5.1 自動生成の場合

折りたたみを利用する各テンプレートに下記のタグを、4項で設定したタグの直下に挿入します。

<script type="text/javascript">
<!--
<MTTopLevelCategories>
<MTHasSubCategories>FoldNavigation('subcategories<$MTCategoryID$>','off',false);</MTHasSubCategories><MTHasSubCategories></MTHasSubCategories>
<MTSubCatsRecurse>
</MTTopLevelCategories>
//-->
</script>

赤色部分は5.2(2)項の initState を参照して適宜変更してください。

5.2 手動設定の場合

(1)MTCategoryID取得

まず折りたたみマークが付与される各親カテゴリーのMTCategoryIDを取得(単なるメモ)します。繰り返しになりますが5.2項を選択された場合は、サブカテゴリーをもつ親カテゴリーが増減する度に修正が必要になります。
管理メニューの「カテゴリー」をクリックしてカテゴリー名をマウスオン(またはクリック)するとステータスバー(あるいはアドレス)に

http://~/mt.cgi?__mode=view&_type=category&blog_id=1&id=n

が表示されます。このURLの最後の n がMTCategoryIDですので、カテゴリー名とMTCategoryIDの対応を(メモする等で)記録してください。
とりあえず5.1(1)をテンプレートに設定・再構築して、そのソースを取得して5.2(2)に反映させるという手もあります。

(2)JavaScript起動用スクリプト設定

折りたたみを利用する各テンプレートで、menufolder.js を起動するためのスクリプトを4項で設定したタグの直下に挿入します。まずはサンプルをご覧ください。

<script type="text/javascript">
<!--
FoldNavigation('subcategories18','on',false);
FoldNavigation('subcategories22','on',false);
FoldNavigation('subcategories24','on',false);
FoldNavigation('subcategories31','off',false);
//-->
</script>

青色は挿入部分、赤色は適宜修正します。それぞれのフォーマット、意味および設定値は下記の通りです。

FoldNavigation('idName','initState',viewListNumber);

idName

  • 名称:id属性名
  • 用途:折りたたむメニューのid属性を指定します。
  • 設定値:このスクリプトの直前のメニューのid属性名("name"または"list"を除去した形)

initState

  • 名称:初期状態
  • 用途:ページを最初に表示した時の折りたたみ状態を指定します
  • 設定値: on:開いた状態/off:閉じた状態
viewListNumber
  • 名称:リスト数表示
  • 用途:メニュータイトル横にリスト数の表示・非表示を設定します
  • 設定値: true:表示/false:非表示(本カスタマイズでは false 固定)

この例ではMTCategoryIDが18、22、24、31を折りたたむ親カテゴリーとして4行記述しています。18、22、24の3つは開いた状態、31は閉じた状態で表示されます。
折りたたむカテゴリー数は各サイトで異なりますので折りたたみが必要なカテゴリー数分を上記の例にならって記述し、5.2(1)で記録したMTCategoryIDは赤色部分に

subcategories + MTCategoryID

という文字列で設定してください(「複数形になっている」とかいうツッコミはなし)。スクリプトはこの文字列「subcategories」を判別してサブカテゴリーの折りたたみ処理を実行していますのでお間違えのないように気をつけてください。

6.menufolder.js インクルード文挿入

折りたたみを利用する各テンプレートの <head>~</head> の間に下記のタグを追加してください。charset 属性は menufolder.js の文字コードを指定してください。

<script type="text/javascript" src="<$MTBlogURL$>menufolder.js" charset="utf-8"></script>

7.スタイルシート設定

スタイルシート(styles-site.css)に下記の位置(.side #categories li の下)に、折りたたみマーク装飾用のスタイル(青色部分)を追加してください。

.side #categories li {
    margin-top: 0px;
    margin-bottom: 0px;
    list-style-type: circle;
 
.subcategories a.foldmark {
    font-size:9px; /* マークのフォントサイズ */
    text-decoration: none; /* マークの文字装飾(何も表示しない) */
}

設定はデザインに応じて適宜変更ください。

8.注意事項

・本カスタマイズを行う場合、他の折りたたみメニューで "subcategories" という id 属性は使用しないで下さい。
・カテゴリーリスト自体を折りたたむ場合、リスト数の計数を適正に行うためにカテゴリーリストの id 属性名を「category」にしてください。id 属性名を変更したい場合は、menufolder.js の下記の赤色部分を使用する id 属性名に修正してください。

if (subCategoryCount) {
    if (idName == 'category') {
        objItems = objLists.getElementsByTagName('li');
    } else {
        objItems = objLists.getElementsByTagName('a');
    }
} else {
    objItems = objLists.getElementsByTagName('a');
}

9.FAQ

Q:折りたたみマークが表示されません
A:menufolder.js 起動スクリプトの設定(5.2(2)項)が誤っている、6項が設定されていない、6項で設定したパスに menufolder.js がない、2項のサブカテゴリーフラグが true になっていない、ブログと menufolder.js の文字コードが一致していない等が考えられます。

Q:カテゴリーリストのリスト数が表示されているカテゴリー数と一致しません
A:2項の subCategoryCount および8項の2番目の内容を再度ご確認ください。

Q:折りたたみマークをクリックするとマークが変わってしまいます
A:テンプレート内のどこかで不要な menufolder.js をインクルードしています。私はこれで2日ほど悩みました(バカ)

Q:他のアーカイブページにジャンプすると折りたたみマークや表示位置が変わってしまいます
A:ジャンプしたアーカイブのテンプレートで誤った menufolder.js をインクルードしている可能性があります(これも私)。

2004.12.13 追記
カテゴリーリスト数表示の注意事項がもれてましたので、記事引用くださっている方は8項の記述も追加してやってください。また5.2(2)のリストに冗長な部分がありましたので削除致しました。

2005.03.31 追記
サイドメニューツリー化スクリプトへのリンクを文中に追加しました。

2006.04.04 追記
リストから language 属性を削除しました(HTML4.01/XHTMLで非推奨あるいは廃止されているため)。

Comments [120] | Trackbacks [40]
2004年12月11日

Trackbackのタイムアウトについて

December 11,2004 3:15 PM
Tag:[]
Permalink

Magic White さんより当サイトへの「Trackbackがタイムアウトになる」というご連絡を頂きました。テストしたところ、(自PCからの送信で) Trackback処理が完了するまでに約100秒かかりました(かかり過ぎ…)。したがいましてタイムアウト値をそれ以下に設定されている場合はタイムアウトが発生する可能性があります。

タイムアウトになってもTrackback Pingを正常に受け付けた時点で送信先の処理は正常に行われるはずなのですが、今回頂いたご連絡では処理自体行われてませんでした。なお確認試験ではタイムアウトは発生したもののTrackback自体は受けつけられましたので、原因は不明のままです。
そういう訳で受け付けられない場合はこちらのエントリーまでご一報ください(何かできるという訳ではありませんが…)。とりあえずサーバは再起動致しました。

Comments [0] | Trackbacks [0]

ShrinkFinfo Plugin 0.04公開

December 11,2004 12:10 PM
Tag:[]
Permalink
ShrinkFinfo Plugin 0.04

ShrinkFInfo Plugin で fileinfo.db サイズを表示するでサイズ表示を付与しましたが Ogawa::Memoranda さんよりファイルサイズ表示を盛り込んだ ShrinkFInfo Plugin 0.04 が公開されました。ファイルサイズ表示以外に、ウェルカム画面にもファイル縮小を促す表示(イメージ下)機能が追加されています。また表示する閾(しきい)値となるファイルサイズも適宜変更できるようになっています。デフォルトは1MBに設定されています。

ということで 0.04 へバージョンアップしました。

Comments [8] | Trackbacks [2]
2004年12月 9日

ShrinkFInfo Plugin で fileinfo.db サイズを表示する

December 9,2004 12:50 PM
Tag:[]
Permalink

2004.12.11 追記
本アイデアが盛り込まれた ShrinkFInfo Plugin 0.04 が公開されましたのでそちらを参照ください。


ShrinkFInfo PluginMovable Type を BerkeleyDB で利用する場合、再構築を繰り返す毎に db/fileinfo.db が肥大化する(その結果、再構築時間に影響が出ます)という問題があり、現在 fileinfo.db のサイズを縮小する ShrinkFInfo Plugin を利用させて頂いてます。
これは管理メニューに表示される "ShrinkFInfo Plugin, v?" のリンクをクリックすればサイズ縮小スクリプトが実行されるという仕組みになっていますが、クリック契機を簡単に知りたいと思い、画像のように fileinfo.db のサイズを表示するようにしてみました。Plugin 作成者のOgawa::Memorandaさんより快諾頂けましたので変更箇所をお知らせ致します。
ShrinkFInfo 配下の plugin.pl に青色部分を追加します。

use strict;
 
my $size;
$main::size = (-s '/path/db/fileinfo.db')/1000;
 
if (MT->can('add_plugin')) {
    require MT::Plugin;
    my $plugin = new MT::Plugin();
    $plugin->name("ShrinkFInfo Plugin, v.0.03");
    $plugin->description("Shrink enlarged db/fileinfo.db. Current size: $main::size Kbyte");
    $plugin->doc_link("http://as-is.net/hacks/2004/11/mt_shrinkfinfo.html");
    $plugin->config_link("mt-shrinkfinfo.cgi");
    MT->add_plugin($plugin);
}

path の部分は db/fileinfo.db までのフルパスを適宜記述してください。
小数点以下を四捨五入して表示しない場合は下記のようにしてください。

$main::size = int(((-s '/path/db/fileinfo.db')/1000) + 0.5);

2004.12.10 追記
スクリプトを byte 表示から Kbyte 表示に修正しました。

2004.12.11 追記
小数点以下を四捨五入して表示しないパターンも追加しました(たびたびすいません…)。

Comments [7] | Trackbacks [2]
2004年12月 8日

Edit リンクを “Edit This” Bookmarklet に変更する

December 8,2004 2:25 PM
Tag:[]
Permalink

以前のカスタマイズで個別エントリーアーカイブの右下に「Edit」リンク、つまりエントリー編集画面へのリンクを設定していた(記事)のですが、

Ogawa::Memoranda“Edit This” Bookmarklet

に乗り換えてみることにしました(これを投稿している時点ではまだ混在しています)。ありがとうございました。

動作的には、(IEの場合)個別アーカイブページやコメントプレビュー画面を表示している状態で、「お気に入り」に追加した"Edit This" を選択(または「リンク」に追加した "Edit This" をクリック)すると編集画面にジャンプすることができます。自力で Bookmarklet を作れない方も上記のリンクに Bookmarklet生成サービスを配してくださってますので面倒な作業は一切ありません。

ちなみにそこで設定する Blog ID はメインメニューのウェブログ名のURLの

http:://?mt.cgi?__mode=menu&blog_id=1

の値を設定します。blog_id は管理メニューのURLの至るところに登場します(他に簡単に調べる方法ありましたらご容赦ください)。

Comments [2] | Trackbacks [1]

サブカテゴリーと副カテゴリーでカテゴライズ

December 8,2004 1:00 AM
Tag:[, , ]
Permalink
[旧カテゴリー] 旧カテゴリーサブカテゴリー機能を用いて、手始めに Movable Type 関連のエントリーをカテゴライズしました。 これまで Movable Type に関するエントリーについては使用中のバージョンに属する形で書いていたのですが、これを大幅に見直しました。文章で書くより左の新旧画像を見て頂ければお分かりになると思います。 例えばカテゴリーリストを用いて検索を行う場合、バージョンよりも機能や操作・概念等で分類した方が明らかに都合がいいです。テンプレートを公開している割に「テンプレート」というカテゴリーがないのも何なので独立したカテゴリーにしました。まだ全部ではありませんがカスタマイズについてはカテゴリーリストから視覚的に検索できるように分類してみました。時間をかけて他のエントリーについても適正なカテゴリーに配したいと考えてます。 訪問される方にとってはテンプレート等の一部のカテゴリーを除いて、バージョンがいくつであるかはたいした問題ではないのですが、個人的には日付アーカイブとは別にどのバージョンでどのような作業を行っていたかを記録したいと考えました。 この両者の要求を実現するにはエントリータイトルにバージョンを付与する等といった力任せの作戦もありますが、今回は「副カテゴリー」を用いることにしました。
[新カテゴリー] 新カテゴリー

副カテゴリー選択Movable Type ユーザー・マニュアル:カテゴリーに書かれている通り、各エントリーは、1つの主カテゴリーと1つ以上の副カテゴリーに割り当てることができます。主カテゴリーと副カテゴリーの間に優劣はなく、アーカイブリンクに主カテゴリーが便宜上用いられます。この機能を用いることで異なるカテゴリーに同一エントリーを配することができます。
副カテゴリーの設定方法は、図のようにエントリー編集画面の「主カテゴリー」の下に

複数のカテゴリーを設定する

というリンクをクリックします。クリックすると副カテゴリー設定画面がポップアップします。左の「ウェブログのカテゴリー」から新たに加えたいカテゴリーを選択し、>> ボタンで右の「副カテゴリー」に移動させ「保存」をクリックします。保存後、さらにエントリー編集画面の「保存」をクリックすれば作業完了です。

ということで、これまでのバージョン別のカテゴリーもそのまま残すことにしました。このカテゴリーには今までと同じエントリーが含まれています。が作業をやっている途中で気がついたので、一部該当カテゴリーから削除されているものもあります(バカ)。予めご了承ください。

Comments [14] | Trackbacks [1]
2004年12月 7日

Movable Type 3.121-ja アップグレード

December 7,2004 12:50 PM
Tag:[]
Permalink

3.11-ja から 3.121-ja にアップグレードしました。
ここでの内容は自宅サーバ用のアップグレード手順です。基本的な手順は3.11-jaアップグレードと同様です。文章も激しく同じです。

1.ダウンロード

Six Apart.よりアップグレード用のパッケージ(ダウンロード画面直前でフルインストールかアップグレードかを決めます)をダウンロードし、解凍します。

2.アップグレード前処理

解凍した中の下記のディレクトリをそれぞれ対応するディレクトリに、ファイルをローカル・サイト・パスにコピーします。大半が上書きされます(mt-upgrade31.cgi は環境によって配置先が異なります)。なお赤字のものはコピー対象外にしました(配下のファイルを変更または追加しており元の情報が上書きされてしまうため)。

docs/
extlib/
images/
lib/
php/
plugins/
schemas/
search_templates/
tmpl/
tools/
mt.js
styles.css
mt-upgrade31.cgi

他にごちゃごちゃある .cgi ファイル等はコピーする必要はありません。plugins はプラグインを何も加えていない場合、また search_templates は配下のファイルを変更していなければコピーに加えてください。上書きにならないファイルは、

mt-upgrade31.cgi

のみです。なお正規のアップグレード手順は docs 配下の mtupgrade.html に記載されています。ちなみにここには「extlibディレクトリ内のファイルをアップロードするときは、以前Movable Typeをインストールしたときにインストールしたライブラリをどれも上書きしないよう注意してください。」と書かれてますが、今回も思いきり上書きしてしまいました。

3.アップグレード実行

ブラウザより

http://Blog-URL/mt-upgrade31.cgi

を実行します。
パソコンがガリガリとしばらく動作して、成功すれば下記の画面が表示されます(前回と表示内容が違ってました)。

3.121

4.不要ファイル削除

mt-upgrade31.cgiを削除します。

5.再構築

各アーカイブページを再構築します。これで各ページのバージョン表示が更新されます。

6.編集画面の拡張

直接アップグレードとは関係ありませんが、テンプレート編集画面やエントリー投稿画面のテキストエリアが狭く感じるので個人的に毎回広げてます。テンプレート編集画面は縦および横幅、エントリー入力画面は縦幅を修正しました。各ファイルの修正行は

/tmpl/cms/edit_template.tmpl:128行
/tmpl/cms/edit_entry.tmpl:200行

です。修正方法は上記のエントリーを参照ください。

以上です。

Comments [2] | Trackbacks [6]
2004年12月 2日

Movable Type 3.121の提供を開始

December 2,2004 2:50 AM
Tag:[]
Permalink

Movable Type 3.11のマイナーバージョンアップ版の3.121が提供されました。更新履歴はこちらです。個人的には

  • MTSubCategoriesの中でMTCategoryCountを用いると公開状態でないエントリーも数え上げてしまう不具合を修正した。(ogawa)

がポイント大きいです。日本語化も進んでいるみたいですが コメント・プレビュー画面の"HTLM" は修正されていませんでした。
なおMagic WhiteさんのMovable Type 3.121になりました。より、公開中の3.11用テンプレートでの動作は問題ないことが確認されています(早々のご連絡ありがとうございました)。ただしアップグレードではカテゴリーの構成が崩れてしまうようですので予めカテゴリー構成のバックアップをとる等の対処が必要みたいです。ご注意ください。

ダウンロードして試しに新規インストールしてみました。日本語化された mt-check.cgi、mt-load.cgi は下記の通りです。

mt-check.cgi
mt-load.cgi
Comments [11] | Trackbacks [0]
Now loading...
ギターに入った猫
掲載広告募集
Styles
Font Size
Default
For defective color vision
Gray Scale
RGB Color
Search this site

このブログをメールで購読する by:FeedBurner

AMN
Categories
Monthly Archives
2020年
2019年
2018年
2017年
2016年
2015年
2014年
2013年
2012年
2011年
2010年
2009年
2008年
2007年
2006年
2005年
2004年
2003年
BlogPeople
Syndicate this site
FeedBurner(RSS1.0/RSS2.0/Atom)
Counter
これまでのアクセス
Powered by
Movable Type 6.0.3