2007年8月アーカイブ

MT 4.0 がリリースされたので、とりあえずダウンロードしてみた。
で、こことは別の環境にDBをコピーして、試しにアップグレードしてみた。
特にエラーはなくバージョンアップできたのだけれど、テンプレートの仕組みが大きく変わったらしく、一筋縄では行きそうにない。
現在のMT 3.3系だと、blogの環境設定の下にテンプレートと言うのがあって、「インデックス」、「アーカイブ」、「システム」、「モジュール」と言うタブが並んでいる。
が、4.0だと、テンプレートの下にはインデックステンプレートしかない。(ひょっとして、何か間違ってるのかな?)
で、blogの一覧からテンプレートの初期化とかやってみたけど、状況は変わらず。
ん~、3から入ったモジュールとかって便利そうなので、是非テンプレートを移行したいのだけれど、このままだとIndividual Archiveとかがいじれなくて問題だ。(3系くらいからエントリーアーカイブとか名前が変わっているみたい)
ヘルプを見てもテンプレートのカスタマイズまわりは全然載ってなくて、これからMT4でぐぐって他の人がどうしているのか見てまわるかなあ・・・。

自宅の環境に、別のpathでMT4を新規インストールしてみた。
すると、テンプレートの一覧を見たときに、画面の右側に「ショートカット」と言うのがあってそこでインデックステンプレートの他にアーカイブテンプレートやテンプレートモジュールがあることがわかった。
しかし、いざテンプレートを編集してみようとすると、Javascriptのエラーが出て編集できない。FirefoxとIEで別の場所でエラーが出る。
mt-config.cgiで、AdminCGIPathをhttpsに指定していたので、そのせいかと思って消して、httpでmt.cgiにアクセスしたところ動いた。
その後、lib/MT/App.pmをつらつらと読んでいたところ、mt-config.cgiのStaticWebPathに対して、http: からで書くか / から書くかで挙動が違うようなことがコメントで書いてあった。
mt-config.cgiに
CGIPath    http://www.wizard-limit.net/cgi-bin/mt-4.0/
AdminCGIPath https://www.wizard-limit.net/cgi-bin/mt-4.0/
StaticWebPath    http://www.wizard-limit.net/mt-static
と書いてあったのを、
CGIPath    http://www.wizard-limit.net/cgi-bin/mt-4.0/
AdminCGIPath https://www.wizard-limit.net/cgi-bin/mt-4.0/
StaticWebPath    /mt-static
と直したところ、httpsでmt.cgiにアクセスしても無事にテンプレートの編集ができるようになった。
続いて、テンプレートのところをつらつらと見てみる。
スタイルと言うのを選ぶと、cssの切り替えでデザインが変えられるようだ。このスタイルを選ぶところで、2カラムにするか3カラムにするか選べるんだけど、それがどこで反映されるのか良くわからない。
最初の状態では、ウィジェットのテンプレートの一覧を見ると空で、一度でもウィジェットセットの画面を表示させると一覧が表示されるようになる。
ここに、カレンダーとかタグクラウドとかあるんだけど、特に選ばなくても標準の画面のサイドバーには表示されている。
サイドバーの中身は、テンプレートモジュールの「サイドバー(2カラム)」とか「サイドバー(3カラム)」が使われているようなのだが、こいつをMTIncludeしているところが見つからない。
このままだと、カスタマイズは結構骨が折れそうだ。タグリファレンスの4.0対応版が公開されたら少しは変わるだろうか?
我慢できなくなってMT4.0に上げてみた。
とりあえず、新しいテンプレートに移行しなければ、MT3にしたときと同じようにそのまま動きそうだ。
しかし、コメント関係の新機能や、検索まわりをまともに使うには、テンプレートの移行は避けられなさそうなので、暇を見つけてちょこちょこやろうと思う。
前回MT3.3に上げたときに、コメントで教えていただいたalt-tmplだが、MT4になってテンプレートの名前が変わったらしく、そのままではいけなさそうだ。
画像のアップロードまわりはどこにあるのかな・・・。
せこせことテンプレートをいじって、なんとなく前と同じような雰囲気に持ってこれた。
(はっきり言って、センス悪いのは承知しているのだけれど、慣れているので)
いじった場所についてメモメモ。
  • 一度全てのテンプレートを削除して、システムメニューのブログ一覧からテンプレートの初期化を実行。(これをやらずに、新しいテンプレートをもってくる方法がわからなかった)
  • RSSの出力ファイル名をfeedburner用のものに変更
  • mt-static/themes/minimalist-green を mt-static/themes/false にコピーして、中のscreen.cssをいじる。
  • 色やフォントなどの見た目系はテーマのscreen.cssに書き、構造(カラムのサイズなど)はテンプレートのスタイルシート(ベーステーマ)でいじるらしい。
  • アーカイブテンプレートの「ブログ記事」が以前のIndividual Archiveらしい。
  • アーカイブテンプレートの「ブログ記事リスト」が以前のDate-based, Categoryにあたるらしい。
  • ブログ記事、ブログ記事リストの「アーカイブマッピング」をいじって以前と同じファイル名で生成されるようにする。
  • どうせ使わないので、日別、週別アーカイブは作成をやめ、月別とカテゴリ別だけにした。
  • テンプレートモジュールで「ヘッダー」と「サイドバー(2カラム)」を重点的にいじる。「ブログ記事の詳細」、「ブログ記事の概要」もちょっとだけいじる。
  • サイドバーに並べるものは、「サイドバー(2カラム)」に全て書き、MTIfで出力を調整する。MTIfで判定する変数は、「メインページ」でMTSetVarする。
  • このようにすると、「メインページ」以外のテンプレートはだいたいファイルにリンクしてしまえる。が、どうもリンク機能は不安定で、保存しても書き換わらなくて、何度かやり直す必要があったりした。
  • alt-tmplの機能自体は変わらず使えるが、以前はcms/upload.tmplとかcms/upload_complete.tmplだったものが、cms/dialog/asset_upload.tmplとcms/dialog/asset_options_image.tmplに変わっていた。中身も大幅に変更されていたので、新たに修正する必要があった。
他に気づいたところとしては、ファイルのアップロード周りが大幅に変わって、「アイテム(asset)」と呼ばれるようになり、画像以外も扱えるようになったっぽい。
改悪点として、以前はサムネイルを作るのにpixel指定とpercent指定ができたのだが、pixel指定だけになってしまった。
後は、プレビュー画面がフレーム(iframe?)で別れたので、スタイルシートが正しく反映された状態でプレビューできて非常に良くなった。
デフォルトのテンプレートではWidget Manager(Widget Set)を使うようになっていないので、宝の持ち腐れ状態。バージョンアップするときのことを考えると、いじる部分といじらない部分は明確にわけておきたいんだけど、相変わらずなかなか難しいようだ。
テンプレートをモジュールに分けて、分割統治と言うのは良い方向性なので、モジュールとウィジェットが喧嘩をしないでうまく協力できると良いのだが。
MT 4.0 に上げてから、月別アーカイブなどで使用している MTEntriesタグでsort_order="ascend"が効かなくなった。
いろいろ調べてみたら、sort_byとか言う属性もあるようなので指定してみたけど変わらず。
結局、ソースを追いかけたらどうもMTのバグらしい。
lib/MT/Template/ContextHandlers.pm に以下のパッチをあてたら、無事にsort_order="ascend"が効くようになった。
どうも、perlの$と@と%と#と\の関係が良くわかってないので、デバッグにも苦労する。
*** ContextHandlers.pm.ORIG  2007-08-04 06:20:03.000000000 +0900
--- ContextHandlers.pm 2007-08-21 00:04:34.000000000 +0900
***************
*** 2917,2929 ****
          if ( $col ne 'score' ) {
              if (my $def = $class->column_def($col)) {
                  if ($def->{type} =~ m/^integer|float$/) {
!                     @entries = $so eq 'ascend' ?
!                         sort { $a->$col() <=> $b->$col() } @entries :
!                         sort { $b->$col() <=> $a->$col() } @entries;
                  } else {
!                     @entries = $so eq 'ascend' ?
!                         sort { $a->$col() cmp $b->$col() } @entries :
!                         sort { $b->$col() cmp $a->$col() } @entries;
                  }
                  $no_resort = 1;
              }
--- 2917,2929 ----
          if ( $col ne 'score' ) {
              if (my $def = $class->column_def($col)) {
                  if ($def->{type} =~ m/^integer|float$/) {
!                     @$entries = $so eq 'ascend' ?
!                         sort { $a->$col() <=> $b->$col() } @$entries :
!                         sort { $b->$col() <=> $a->$col() } @$entries;
                  } else {
!                     @$entries = $so eq 'ascend' ?
!                         sort { $a->$col() cmp $b->$col() } @$entries :
!                         sort { $b->$col() cmp $a->$col() } @$entries;
                  }
                  $no_resort = 1;
              }
MT 4.0になって、今までのブックマークレットが使えなくなった。
新しいブックマークレットはどこにあるのかさんざん探したら、なんと記事の作成ページにあった。
さっそく、ブックマークを更新して試してみたところ、なんか格好悪いです。
引用元のタイトルがentryのタイトルになって、「引用元のURL<br/><br/>引用部分」が本文に入力されます。
そういえば、ここはもともと気に入らなくて直していたんだった。とは言え、昔のバージョンだと、URLと引用部分は別のパラメータでmt.cgiに渡っていたのに、MT4.0では一つのパラメータで<br/><br/>を挟んで渡してくれている。さらに、今まではブックマークレットから投稿するときにblogが選べたのに、今回はブックマークレットの中にblog_idが埋め込まれていて、必須項目になっている。blogを複数持っていたら、ブックマークレットも複数登録しろと言うのだろうか。
blog_idについては選択画面そのものがなくなっているようなのでとりあえずは諦めて、引用部分を自分好みに変える。
lib/MT/App/CMS.pmを以下のように修正した。
*** CMS.pm.ORIG Tue Aug 21 23:03:38 2007
--- CMS.pm      Tue Aug 21 23:17:45 2007
***************
*** 4647,4653 ****
      my $blog_id = $app->blog->id;
      my %args    = ( '_type' => $type, blog_id => $blog_id, qp => 1 );
      my $uri = $app->base . $app->uri( 'mode' => 'view', args => \%args );
! qq!javascript:d=document;w=window;t='';if(d.selection)t=d.selection.createRange().text;else{if(d.getSelection)t=d.getSelection();else{if(w.getSelection)t=w.getSelection()}}void(w.open('$uri&title='+encodeURIComponent(d.title)+'&text='+encodeURIComponent(d.location.href)+encodeURIComponent('<br/><br/>')+encodeURIComponent(t),'_blank','scrollbars=yes,status=yes,resizable=yes,location=yes'))!;
  }

  sub apply_log_filter {
--- 4647,4653 ----
      my $blog_id = $app->blog->id;
      my %args    = ( '_type' => $type, blog_id => $blog_id, qp => 1 );
      my $uri = $app->base . $app->uri( 'mode' => 'view', args => \%args );
! qq!javascript:d=document;w=window;t='';if(d.selection)t=d.selection.createRange().text;else{if(d.getSelection)t=d.getSelection();else{if(w.getSelection)t=w.getSelection()}}void(w.open('$uri&title='+encodeURIComponent(d.title)+'&link='+encodeURIComponent(d.location.href)+'&text='+encodeURIComponent(t),'_blank','scrollbars=yes,status=yes,resizable=yes,location=yes'))!;
  }

  sub apply_log_filter {
***************
*** 5292,5297 ****
--- 5292,5304 ----
                if $data;
              $q->param( $_, $encoded );
          }
+       my $title = $q->param('title');
+       my $link = scalar $q->param('link');
+       my $text = $q->param('text');
+       $text = sprintf qq(<blockquote>\n<div class="quote-head"><a title="%s" href="%s">%s</a></div>\n\n%s\n</blockquote>), $title, $link, $title, $text;
+       $q->param('title', '');
+       $q->param('link', '');
+       $q->param('text', $text);
      }

      $param{autosave_frequency} = $app->config->AutoSaveFrequency;
この修正を入れると、
<blockquote>
<div class="quote-head"><a title="引用元のタイトル" href="引用元のURL">引用元のタイトル</a></div>

引用部分
</blockquote>
のような感じで本文に入るようになる。
たぶんMT4でやってる人はいっぱいいると思うのだけれど、調べるの面倒なので公式を見て設置してみた。
  1. はてなスターのページでblog用のtokenを取得
  2. テンプレートモジュールの「ヘッダー」に以下を追加(</head>の直前)
    <MTIf name="hatenastar_token">
    <script type="text/javascript" src="http://s.hatena.ne.jp/js/HatenaStar.js"></script>
    <script type="text/javascript">
    Hatena.Star.EntryLoader.headerTagAndClassName = ['h2','asset-name'];
    Hatena.Star.Token = '<$MTGetVar name="hatenastar_token"$>';
    </script>
    </MTIf>
    
  3. はてなスターを出したいページのテンプレート(「メインページ」、「ブログ記事」、「ブログ記事リスト」等)の「ヘッダー」をMTIncludeしているよりも前に以下の行を追加
    <MTSetVar name="hatenastar_token" value="トークン">
    
  4. モジュールテンプレートの「ブログ記事の概要」と「ブログ記事の詳細」でタイトルのタグが違うので、「ブログ記事の詳細」の方を「ブログ記事の概要」と同じになるように修正。(h1→h2, aタグの追加)
  5. 再構築
2007年8月
      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  

このアーカイブについて

このページには、2007年8月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2007年6月です。

次のアーカイブは2007年9月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 6.1.1