反省

先日のおみ子さんフィルタは、重いし精度が悪いしでできがよくなかったのでつくり直した。

[Patterns]
Name = "Add Link to Hatena Diary Title"
Active = TRUE
URL = "d.hatena.ne.jp/*/*"
Limit = 250
Match = "(<h1>)\1([^<>]+)\2$STOP()"
Replace = "$URL(\u&&(*\h/\3/*))"
          "\1<a href="http://d.hatena.ne.jp/\3/">\2</a>$STOP()"

つくっている内に発見したことを書く。

ちょっと難しかったのは、はてなidをどう取得するかという点なのだった。

どう取得すればよいかというと、もちろんURLから採るのがよいに決まっている。

そして「\u&&(*\h/\1/*)」と書けば、idの部分が変数\1に格納されるのだが、これをこのまま書くと、「このページのURLにマッチする文字列」という意味になってしまう。

別にURLにマッチさせたいわけではないので、マッチはエスケープして、変数への格納だけを実行したかった。

それをどうやってやればよいのかわからなかったのだが、試行錯誤しているうちにできた。

正解は、"$URL(\u&&(*\h/\1/*))"だった。

(「括弧内の文字列はURLか?」という意味)

この解答はなかなかむずかしかったが、いじっている内におみとろんの検索言語に無駄に詳しくなってしまったのでよしとする。




Movable Type のサイドバーでアクティブなページのスタイルだけを変更

ついでに最近仕事でいじっていたせいでMTについても無駄に詳しくなってきたので、そっちの方で学んだことも書きしるしておく。


サイドバーに、メニューなどをだしているとき、アクティブなページのスタイルだけ変えたいことがあると思う。

これをMTのテンプレートタグでやろうとすると意外に大変なのだが、以下の方法はかなり幅広く適用できる。

Movable Typeには、独自のループタグがある。

(複数形のタグは大抵これ)

<$MTEntryTitle$>

これは

#=> 現在のページのエントリータイトルを出力

という意味だが、一方、

<MTEntries>
<$MTEntryTitle$>
</MTEntries>

とすると、

#=> すべてのエントリーの中のそれぞれのエントリーについて
#==> エントリーのタイトルを出力

という意味になる。

これはふつうのプログラム言語だと、

for e in entries{
    print(e.title)
}

みたいな感じだと思う。

つまり、<MTEntries><MTCategories>とか、その手の複数形のコンテナタグは、コンテクスト内のテンプレートタグに対し、エントリーやカテゴリーの配列をひとつずつわたす。

だから、たとえばエントリーのリストを出力したいときは、

<MTEntries>
<MTEntriesHeader><ul></MTEntriesHeader>
<li><a href="<$MTEntryPermaLink$>"><$MTEntryTitle$></a></li>
<MTEntriesFooter></ul></MTEntriesFooter>
</MTEntries>

みたいな感じになる。

一方、現在ひらいているページのスタイルだけ変えるには、以下のようにすればよい。

(多分他にも方法はあるが、このやり方は、アーカイブでもカテゴリでも幅広く使える)

<MTSetVarBlock name="this_id"><$MTEntryID$></MTSetVarBlock>
<MTEntries>
<MTSetVarBlock name="itr"><$MTEntryID$></MTSetVarBlock>
<MTEntriesHeader><ul></MTEntriesHeader>
<li class="<MTIf name="this_id" like="$itr">active<MTElse>nonactive</MTIf>"><a href="<$MTEntryPermaLink$>"><$MTEntryTitle$></a></li>
<MTEntriesFooter></ul></MTEntriesFooter>
</MTEntries>

日本語にすると、

#=> 変数this_id に現在のページのエントリーIDを代入
#=> すべてのエントリーの中のそれぞれのエントリーについて
#==> まず、変数itr にエントリーのIDを代入
#==> (省略)
#==> this_idとitrの値がひとしかったら、class="active"
#==> ひとしくなければ、class="nonactive"

みたいな感じ。


現在のわたしがどれほど無駄にMTに詳しくなってしまったかと言うと、ここまでをすべて空で書いているというくらいである。

まあ、試してないから、どっかまちがってるかもしれないけど。

コメントする

トラックバック(0)

このブログ記事を参照しているブログ一覧: 雑記2007年9月27日(木)

このブログ記事に対するトラックバックURL: http://www.at-akada.org/mt/mt-tb.cgi/398

著者について

赤田敦

nightly[at]at-akada.org

紹介: about

ホーム: at-akada.org

-> 携帯電話用

なかなか更新されないときは...

-> 赤田ブログ生成器

2009年1月

        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31