category label

Movable Type 自習部屋

このサイト,Movable Typeで構築しているわけですが,当然の事ながらデフォルトのまま使用しているわけもなく,様々で大小雑多なカスタマイズをしながら使用しています.
なにしろhimaの趣味はジャンルを問わず「カスタマイズ」ですから.

でもですね,そのつど感覚的にカスタマイズを繰り返してきているので,何をどういじったのかが後から見て全く不明,想像も付きません.過去の自分と現在の自分は別人であり,概ね過去の自分の方が創造的で且つ突発的でありますので,そんな自分の記録を記録として残しておきたし.
というわけで,IdlingSpace.comに於けるMovableTypeのカスタマイズの記録.

 

2006. 1. 22 (SUN)

カテゴリーのソート

日記ならともかく,通常のコンテンツをMovableTypeで作ろうと思ったときに,エントリー・カテゴリーのソートが出来ないのはイタイ,というハナシですが調査及びカスタマイズの結果,とりあえず動いている?感じ

エントリーに関しては日付順になるので,日付を表示していないコンテンツ用Blogでは,日付を適当に操作して意図通りの順番になるようにしております.ていうか普通に上から順番に入力していけばその通りの順番になるので,まあよい,と.
問題はカテゴリー.デフォルトでは多分文字コード順にソートされているわけですが,それだとカテゴリーリストの表示の際に意図してない順番になってしまいます.かといってカテゴリー名の頭に数字つけるのもなんだか美観を損なうし……
というようなことを解決!

どうやらカテゴリー名は内部で持っている名前と実際に表示・参照時に出力する名前は変えることが可能な模様.
では,内部では頭に数字を付けておいて, <$MTCategoryLabel$> とかの出力時には,その数字を取り去ってから出力.とすれば大丈夫かも.ディレクトリ名がどちらにされるのかちょっと不安があったけれど,試してみたら大丈夫そうだし,きっと大丈夫でしょう.

で,直すのは(MovableType3.2)
  ($MovableType)/lib/MT/Template/ContextHandlers.pm というファイルの
「sub _hdlr_archive_title」 の中の値を返す部分を次のように,頭に「_9999_」があったらその部分を削除して返すよう変更(2カ所)
return $ctx->stash('archive_category')->label;
  ↓
my $title = $ctx->stash('archive_category')->label;
return ($title =~ /_\d+_(.*)/) ? $1 : $title;

defined $title ? $title : '';
  ↓
$title = ($title =~ /_\d+_(.*)/) ? $1 : $title;
return (defined $title) ? $title : '';

同じく 「sub _hdlr_category_label」 の中も同様に変更.
$label;
  ↓
return ($label =~ /_\d+_(.*)/) ? $1 : $label;

これで,たとえばここのカテゴリー 「_4201_MovableType」 も,内部的にはこのまま扱われて,エントリー作成の時などはこのカテゴリー名で作成しているけれど, <$MTCategoryLabel$>タグとか <$MTArchiveTitle$>タグでの出力は 「MovableType」 になっているって寸法.他にカテゴリー名を出力するようなタグは無いと思うのだけど,どうであろう.
とりあえず無ければ大丈夫だし,あっても同様に変更すれば大丈夫???

※MT3.31-ja の変更点
上に加えて「sub _hdlr_category_basename」の中も以下のとおり。その他あまり未テスト。
$basename;
  ↓
return ($basename =~ /_\d+_(.*)/) ? $1 : $basename;

2006. 1. 24 (TUE)

26時台は今日だ!

【ToDo】
以前からこのサイトで使っている掲示板系はそうなっているのですが,午前0時台→前日の24時台,午前1時台→前日の25時台,午前2時台→前日の26時台,という時間表示.
一日の区切りは午前3時ぐらいだと思うのです.生活パターン的にもテレビ欄的にも.
ということでMovableTypeもそういう区切りで生活してほしいと思い,改造を試みようと思うも,該当部分のソースを探すだけでイヤンな感じ
時間を置き換えるだけなら簡単(多分該当部分も発見)なのだけれど,その際「日付を一日戻す」という作業もしなければなりませぬ.

しかし調査の結果,エントリーの記録時刻はUTCで持っているのかと思いつつDBを覗いてみたら
  comment_created_on : 2005-12-28 00:18:50
  comment_modified_on : 20051228001850
などという持ち方をしているのね・・・
どっちにしてもそんなに単純にはいかないようです(TT ソース読まねば

2006. 1. 30 (MON)

プラグイン作るまでもない

プラグインのMTPerlScriptが愉快.
テンプレート中に仕込んだ <MTPerlScript> ~ </MTPerlScript> ではさんだ Perlのソースがそのまま実行可能です.
プラグインを作るほどでもない程度のことをするには,まさにうってつけという感じです.

たとえば,全部のエントリーを10個ごとに区切って表示してみるには
<MTPerlScript>
my $ec = <$MTBlogEntryCount$>;
my $lc = int($ec / 10);
my $m = "MT";
for ($i = 0; $i <= $lc; $i++) {
 $ofs = $i * 10;
 printf("<p>Entries: No.%d ~ No.%d (Number from last entry)</p>\n", $ofs+1, ($ofs+11 < $ec)? $ofs+11 : $ec);
 print qq|<ul><${m}Entries lastn="10" offset="${ofs}">\n|;
 print qq|<li>[<\$${m}EntryDate language="en" format=" %Y/%m/%d(%a) %H:%M"\$>] <a href="<\$${m}EntryPermalink\$>"><\$${m}EntryTitle\$></a></li>\n|;
 print qq|</${m}Entries></ul><br /><br />\n|;
}
</MTPerlScript>

みたいな感じです.これを使えば,静的ページ生成をしているhimaには使えないPaginate(PHP必須)のようなページ分割ができるかも!・・・かも.でも果てしなくめんどくさそうでもあります.

※MTPerlScript について
パース順は MTのタグ → (<MTPerlScript>に反応)Perlのソース → MTのタグ となっている模様,サンプルのコードで言うと
1) <$MTBlogEntryCount$> が解釈されて エントリーの個数が $ec に代入される式になる.
2) perlを実行して "<p>Entries: ~ </MTEntries></ul><br /><br />" という出力が得られる.
3) 得られた出力をMTが解釈してくれ,エントリーのタイトルとか投稿月日が出力される.
ちなみに,print文内の "<\$${m}EntryTitle\$>" というような回りくどい記述は,一番最初のMTのタグのパースで解釈されないため,ということです.

※※さらに
"<MTPerlScript> ~ </MTPerlScript>" の中のコードでさらに "<MTPerlScript> ~ </MTPerlScript>" を出力するようなマネをしたらどうなるか.ってことで
<MTPerlScript>
my $mm = '${m}';
my $m = "MT";
print qq|<${m}PerlScript>\n|;
print qq|my \$m = "MT";|;
print qq|my \$u = "<\$${m}BlogURL\$>";|;
print qq|print "Blog name (recursive): <a href=\\"\$u\\"><\\\$${mm}BlogName\\\$></a>";|;
print qq|</${m}PerlScript>\n|;
</MTPerlScript>

ってこれの最終的な出力が
 Blog name (recursive): <a href="http://idlingspace.com/">IdlingSpace.com</a>
ってなってるので多分ちゃんと動いたんですけどね,めためためんどくさい.

2008. 11. 22 (SAT)

あぶなかった?

前々から,MovableTypeのデフォルトのファイル名ってどうなのかと思っていたところですけど,やればできんじゃん。変えられるんですね。皆さんもドキュメント類はちゃんと読みましょう,書いてありました。mt-checkとか実行されると人のところのサーバの情報がそこそこ見れたりしてよさげですよ(何に?

で,古いバージョンのmt-config.cgiの中に
# By default, the script that Movable Type uses for comments is called
# mt-comments.cgi, the TrackBack script is called mt-tb.cgi, the
# search engine script is called mt-search.cgi, the XML-RPC server
# script is called mt-xmlrpc.cgi, and the dynamic blog view script is
# called F<mt-view.cgi>. In
# some situations--for example, if you are running MT under mod_perl, or if
# your server requires that your Perl scripts have the extension .pl--you
# may need different names for these scripts. You can set the names that will
# be used throughout the default templates and Movable Type code by changing
# these values.

って書いてあるんですが,単に拡張子が違うときとか変えれますよって書き方。
MovableTypeの管理画面って一応ユーザー認証があるわけですけど,多分パスワードとかってcookie使って保存してあるから,これまた多分簡単に抜かれかねない。そこでファイル名ぐらい変えておけば何となく少しは安心した気分に浸れるのじゃないでしょうか。

ということで,mt-config.cgi の中に
AdminScript nimda.cgi (適宜管理用ファイルの名前)
CheckScript kcehc.cgi (適宜チェック用スクリプトの名前)
UpgradeScript edargpu.cgi (適宜アップデート用スクリプトの名前)

などということを書いておけばよいのでは。と思ってやってみました。
その他にも,CommentScript, TrackbackScript, SearchScript, XMLRPCScript, ViewScript, AtomScriptなどある模様。あと肝心のファイル名変えるのも忘れるな!

2008.12. 7 (SUN)

「前。」と「次。」

PC用ページはカテゴリー毎のページに全部のエントリーを詰め込んで表示しているので,個別エントリーページは存在してませんでした。
が,
携帯用ページは容量が多分限られるので,エントリー毎にページを用意してあげることにしました。
するとですね,MTEntryNext と MTEntryPrev というタグの仕様が,カテゴリーを無視してくれると言うことに気付かされるわけです。普通同一カテゴリーで次の記事とかページ遷移したいじゃない?それって普通の考え方じゃない?なんか変なこと言ってる?
で,とりあえずヘルプでいろいろ探しても見つからなかったんだけど,ぐぐったら一発。やっぱりみんな考えること同じ。ていうか標準の機能たるべきではないのかということでは?
お目当てのページは,(多分)元スタンフォード大情報科学科の学生だったアレクセイが作ったMTEntryCategoryLinksというプラグイン。
MTEntryPrimaryCategoryは現在のメインカテゴリーを出力するブロックタグで,MTEntryPrevInCategoryとMTEntryNextInCategoryがカテゴリー内での前と次のエントリーを出力するブロックタグだ。
と書いたところで非常に分かりにくい事この上ないので実際のコード
<MTEntryPrimaryCategory>
<MTEntryPrevInCategory>
<a href="http://m.idlingspace.com/<$MTSubCategoryPath$>/<$MTEntryID pad="1"$>.html">[4]前</a>>
</MTEntryPrevInCategory>
<a href="http://m.idlingspace.com/<$MTSubCategoryPath$>/" accesskey="5">[5]目次</a>
<MTEntryNextInCategory>
|<a href="http://m.idlingspace.com/<$MTSubCategoryPath$>/<$MTEntryID pad="1"$>.html">[6]次</a>
</MTEntryNextInCategory>
</MTEntryPrimaryCategory>

MTEntryPrimaryCategoryコンテナの中で,現在のパスを表すMTSubCategoryPathだとか
前のエントリーを表すMTEntryPrevInCategoryだとかを使っております。
これで携帯で良くありがちな
[4] 前 | [5] 上 | [6] 次
が実現できるという寸法です。やっぱり普通は標準機能でしょコレ?
これ使うためには,EntryCategoryLinks.plをMovableTypeをインストールしてるディレクトリのpluginに突っ込んでおけばそれでOK,簡単です。

ていうか Alexei,今はWordPress使ってるっぽいぞ・・つまりはそういうことか。

------------------
前言撤回!
------------------
ちょっと待った!
全然OKじゃなかったです。
EntryCategoryLinks.pl中で次のエントリーを探す部分のコードが以下のとおり
do {
$adj = $is_next ? $adj->next : $adj->previous;
} while ($adj && !$adj->is_in_category($cat));

つまりは一個ずつポインタを辿っていきながらカテゴリーが同じエントリーを探しておるわけですね。ここのサイト,現在エントリー数が1800,カテゴリー数が100ぐらいある感じで,カテゴリー内にエントリーが1個しかないなんてこともざらです。こんなサイトで全部再構築をしたらもう全然終わりませんでした・・
おかげさまで,サーバの負荷率1710ptとかもう管理者に怒られるレベル。罠だ罠。
というわけでカテゴリー内遷移リンクは外しました。そのうち時が解決するかもしれません。

2009. 1. 18 (SUN)

permission でないど。

やっぱりドキュメントは良く読もう。
MovableType環境変数リファレンス
今回の課題,というか読んでるうちに解決した事項及び使った環境変数です。
すべて mt-config.cgi の中に適当に書いておけば効くような感じです
本当は管理画面の設定で是非設定できて欲しいものばかりなわけですが。

だそうです。分かる人がちゃんと読んで設定すればよいのでしょうけれど,分かる人は既に知っていることだと思うところが悩ましいですね。

まずは ~Umask について,無条件で rwxrwxrwxにされるのがどうにも納得いかなかったんだけど,設定可能だったわけですね。設定値ですけど
 DirUmask は 0022 (= rwxr-xr-x)ぐらい
 HTMLUmask は 0133(= rw-r--r--)ぐらい
 UploadUmask も 0133ぐらい
でいいですかね。数字の意味とかは "パーミッション"とか "chmod" とかいう単語で調べて下さい。

MaxResultはそのまんまですね。サーバの負荷と相談して決めて下さい。

MailTransfer と SendMailPath は,なんか動いたからいいや。ぐらいな感じなのですが・・
多分,MovableTypeの3.3ぐらいまではコメントとかトラックバックがあったときに設定したメールアドレスにメールを出してくれていたんだけど,なんか MovableType4.x にアップグレードしてから以降,この機能が効いていないような気が・・
どうせスパムコメントばっかりだからいいかな,と放置していたんだけれどこれを設定したらなんとなく解決!
が!設定した値が問題!設定値そのまま晒してみますけど
 MailTransfer sendmail
 SendMailPath /usr/sbin/sendmail
なんですよ。でもどっちも説明を良く読むとデフォルト値なんですよねぇ・・・
一体誰が嘘をついているの?

ENTRIES
このページに含まれる記事一覧
INDEX
現在のテーマの上位及び下位テーマです
  • tech [2]
    • MovableType
CONTENTS
ABOUT IS.COM
このサイトについての注意及びその他
このサイトの制作者
hima image
ナマエ: hima(暇)
生息地: 青森県近辺
スペック: 確実に理系・aiko・パズルっぽいゲーム好き・貧乏暇だらけ・形から入りがち・道具好き・SONY・テレビっ子・B型に見られがち
    • idlingspace BBS

      Idlingspace.comに於ける掲示板。用途は不定,何でもOK
    • thumbnail in entry
      日記にイメージがあるもの一覧
    • all contents index
      Idlingspace.comの全ページリスト。日記と掲示板を除く

IS.COM banner image IS.COM banner
link to RSS RSS distribution
Get Opera browser Get Opera!
Get Firefox browser Get Firefox!
twitter my home follow me.
mixi my page join my-mixi
playlog my page my music style

IDLINGSPACE.COM
This site contains some informations, Ex games, hima, aiko, and so on.
"IDLINGSPACE.COM" is fabricated by 1996- hima. Linking with this site is always Free. Almost all rights reserved by hima, and I don't know who reserve the rights that weren't reserved by hima. And this site cannot guarantee that's all true.
You must not complain for no updating this site. You must not complain for that hobby differs from hima.


サイト内ケンサク

スクリプトエラーが発生することがわりとありますので,そういうときは慌てず騒がず「戻る」で戻ってきて下さい.


 
 Idlingspace.com for Mobile.
 http://m.idlingspace.com/
 ※パケット定額必須!!
ADV.