--------- movabletype4の最近のブログ記事

CPA-LABでは合格体験記の執筆者に受験生が質問できるようになっている。以前は、掲示板スクリプトを利用していたが、ムーバブルタイプでのサイト構築にしてから、どのようにすべきか悩んでいた。

で、体験記がひとつの記事でできているのだから、それに質問してもらうようにすればいいかなと考えて、やってみたものの、どうしても質問一覧みたいなページが欲しくなった。

コメントをずらずら並べるようなページであればいいのだが、以下の要件が必要

  1. 誰かがコメントをつけた時に自動更新 ← テンプレートをインデックスで作成する
  2. 体験記カテゴリ以外へのコメントは無視する ← set varを利用し、特定のカテゴリのコメントだけにする
  3. どの記事へのコメントかわかるようにする ← MTEntryCommnentを利用して、コメントでなく、エントリーを主に考える
  4. できればNEWマークつけたい ← phpで対応。よく考えればjavascriptfでもよかったか。
  5. 質問のついていない記事は下部に表示 ← MTIfNonZero tag="EntryCommentCount"を使ってループ2回にした。もっといい方法があるかも。
  6. できれば、コメントの新しい順にツリーを上にもっていきたい ← 面倒なのでやめた

ということでなんとか6以外はなんとかなったかな。

(注意点)

MT4は、デフォルトでは、記事単体ページのコメント部分へのアンカー(id)がプレフィックス付き(comment-)で出力されているのに、タグの MTCommentID は、comment-はつけずに、番号のみを出力する。なので、リンクを作成するときには、#comment-をつけるのを忘れないように。(これでだいぶ時間くった)。

コメントがつけられるたびに更新できるように工夫すれば、個別エントリーやWEBページにもいけるでしょう。

以下は覚書のソース

Captchaがうまくいかない。下記に感謝。

http://fakelife.info/2007/08/16_000008.html

 

Perlはよく知らないので、困っていた。ら、先人達は偉いです。

 http://www.hazama.nu/t2o2/archives/002737.html

http://www.nextglobaljungle.com/2007/10/mt4igoogle_adsense.html

が親切。

ただし、

# print "Content-Length: ",length($data),"¥n¥n";

をコメント化した場合、

print "¥n";

としておかないと、htmlヘッダーとcontentsが分離されない場合があるかと。

ただしくは

print "¥r¥n";

かな。

ただし、i-modeでは、Content-Lengthヘッダは必須なので、ご留意を。

http://www.nttdocomo.co.jp/service/imode/make/content/html/notice/basis/index.html

ん~。さらに調べるとiモードでは、Keep-AliveとSSLで問題でるそうな。SSLは使わないので問題なかろう。

問題は、Keep-Aliveですな。

しかし、以下の記述を発見。

http://www.nttdocomo.co.jp/service/imode/make/content/ssl/notice/

http://www.nttdocomo.co.jp/service/imode/make/content/ssl/flow/

「CGIなどでContent-Lengthを返さない場合に、Keep-Aliveが無効になります。また、IIS上でのCGIについては常にKeep-Aliveが無効になる事象を当社試験環境で確認しております。」

ということは大丈夫ということですかね。あ、というか、うちIISじゃないし。

というわけで、テストでも、Content-Lengthと実際の出力のサイズの一致が確認できたので、当方ではContent-Lengthは出力することにした。

 

ブログでサイトを作ろうと思ったとき、迷ったのがディレクトリ構成である。

どのディレクトリ(フォルダ)にどんな内容の記事をいれるか、作った後からいくらでもやり直しが効くのがブログのいいところだけれども、あまりパーマリンクを変えるのもどうだか。というわけで、考えた末、以下のようにした。

 

root/index.php

root/archives.php

root/mt-contents/(各カテゴリフォルダ)/カテゴリアーカイブ

root/mt-contents/(各カテゴリフォルダ)/個別記事

root/mt-contents/pages/(各WEBページ)

 

(サイトトップ)

サイトトップはindex.phpとし、昔のトップページはindex2.htmlとした。

(カテゴリアーカイブ)

ブログにおいては日付をファクターとして分類することが多いが、cpa-labではあまり日付に意味はなく、カテゴリ別が一番の意味を持っているので、日付-カテゴリのアーカイブは作らないことにした。そのほうが再構築も速くすむし。

 

今回のリニューアルにあたり、昔のコンテンツをどうするかについて考えた。

外から各ページへダイレクトリンクをしていただいている場合もあるので、全部のコンテンツ移行が終わっても、原則としてそのまま残すこととした。でも、掲示板についてはスパムがひどく、そこは消去することにした。

各ページを新コンテンツにリダイレクトする、という手もあるが、ルートにかなりのコンテンツをおいていることもあり、.htaccsessの記述が多くなりすぎるということもあり、、、、、。

 

で、昔のindex.htmlはindex2.htmlに変更、あとは基本的にそのままのURLで残す。

以前のCPA-LABは、いきあたりばったりのディレクトリ構成で、たいへん汚いので、いつも整理したくなるのだけれども。。。

で、検索エンジンなどで直接、旧サイトに訪れた人のために、すべてのページに「このコンテンツは旧CPA-LABのものです。新しいサイトは、・・・・」という記述を入れることにした。

そのときに大活躍したのが、TextSSというフリーソフト。作者さんのサイトは閉鎖されたようで残念だけれども、<body>タグのすぐあとに、上記のコメントをすべてのhtmlファイルに挿入する、なんていう作業をあっというまにしてくれました。

 

携帯ページのアクセス解析はいろいろ難しい点がある。

javascriptに対応していない端末が多いせいであるけれども。。。

 

で、MT4iについては、「MT4i」での携帯ページのアクセスを解析する方法が大変参考になります。

が、私はちょっと違うアプローチにて試してみた。

使ったログ解析は、Research Artisan - リサーチアルチザン

Mt4iのソースで</html>タグを探す。と、2カ所あった。どうも、後半はエラーメッセージ用のよう。

ということは前半が、フッターになるわけですな。

    $data .= "</center></p></body></html>";

そこに解析ソースをぶち込んでみましょう。

     my $spok_kaiseki="<img src=¥"http://www.research-artisan.com/userjs/noscript.php?h=2&amp;user_id=XXXXXXXXXXXX¥" alt=¥"¥">";
    $data .= "</center></p>$spok_kaiseki</body></html>";

ポイントは

  1. 変数の前にmy宣言を忘れずに
  2. ダブルクオーテーション(")を¥でエスケープするのを忘れずに(上記では全角表示だが実際は半角で)
  3. 変数名は何でもいいけど、他とダブらないように

 このアクセス解析も、モバイルサイトについては、ページ毎の解析ができないので、他に何かいいのがないか物色中。

 MT4iについては以下の本家本元にて。

MT4i/MovableType用 携帯電話向け変換プログラム

前にDescriptionとExcerptの違いがあることを書いたわけだが、今回はLabelとTitle,nameの違いである。
例えば「タグの名前」と言った時に、TaglaLabelとTagNameは、どっちやねん、という疑念がわいてきたりする。(この2つについては、マニュアルに同一であることが書いてある。)命名の規則さえわかっていれば、マニュアルをみなくてもタグを打っていけるのですが、現実には、、、、、。

Movabletype4のタグの中で、Labelがついているのは、、、

MTTagLabel・・・特定のタグの名前
MTArchiveLabel・・・アーカイブの種類
MTAssetLabel・・・アイテムをアップロードした際のラベル(←説明になってない)
MTCategoryLabel・・・カテゴリ名
MTFolderLabel・・・フォルダの名前

ということらしい。どうもLabel=nameという感じのようですが、どうなんでしょう。
一方で、nameは、、、、

MTCategoryBasename・・・カテゴリのファイル名
MTPageAuthorDisplayName・・・ウェブページを作成したユーザーの表示名
MTTagName・・・特定のタグの名前(=MTTagLabel)
MTFolderBasename・・・フォルダのパスで設定した実際の名前
MTBlogName・・・ブログの名前
MTPingBlogName・・・トラックバックを送ってきたブログの名前
MTAuthorName・・・ユーザーのプロフィール設定で入力した『ユーザー名』
MTIndexName・・・インデックステンプレートの名前
MTProductName・・・システムの製品名
MTIndexBasename・・・各アーカイブの為に作られるディレクトリのインデックページのファイル名
MTAuthorDisplayName・・・ユーザーのプロフィール設定で入力した『表示する名前』
MTCommenterNameThunk・・・各ブログ記事のブログの名前
MTAssetFileName・・・アイテムのファイル名
MTCommenterName・・・コメント投稿者名
MTEntryBasename・・・ブログ記事のファイル名
MTEntryAuthorUsername・・・ブログ記事を作成したユーザー名
MTPageBasename・・・ウェブページのファイル名
MTEntryAuthorNickname・・・MTEntryAuthorDisplayNameと同じ
MTCommentName・・・コメント投稿時に入力された名前

なんとなく、nameはその名の通り、「名」という感じでしょうか。。。
で、titleとの違いは?

MTPageTitle・・・ウェブページのタイトル
MTFeedTitle・・・RSS Feed を持つウェブサイトへの名前
MTPingTitle・・・トラックバックのタイトル
MTFeedEntryTitle・・・ RSS Feed にある個別ページのタイトル
MTArchiveTitle・・・ブログ記事一覧アーカイブのタイトル
MTEntryTitle・・・ブログ記事のタイトル

わかったようで、わからんような。
まあ、titleとあるのは、さらに詳しい本文がついているようなnameをtitleと称しているという感じでしょうか。

Movabletype4では、新たにWEBページの概念が加わった。従来のエントリー(記事)ではなく、普通のウェブサイトのように、固定的なページをムーバブルタイプでいっしょに管理してしまおうというものだ。

この機能があったからこそ、ブログでサイトを作ろうという気になったわけだが。。。

しかしそこはブログソフト。ウェブページ機能といっても、「特殊なカテゴリ」として考えるのがしっくりくるようだ。

なぜならば。。。。。

MTPagesというブロックタグがある。これで、囲めば、すべてのウェブページ情報を引っ張り出せるというわけで、当然、グローバルナビゲーションとして、いつも、サイドバーに出しておきたいと考えた。

<!--page menu-->
<ul class="widget-list">
    <MTPages tag="コーナートップページ" sort_order="ascend">
      <li class="menu_page">
         <a href="<$MTPagePermalink$>" class="spok_navi_link">
         <img src="<$MTStaticWebPath$>images/spinner-right.gif" />
          <$MTPageTitle$>

          </a></li>
    </MTPages>
</ul>

 

が、トップページと個別記事ではちゃんと表示されるが、アーカイブ(ブログ記事リスト)では、無視されてしまう。これでは、アーカイブページをみているときに、WEBページ情報が出せないではないか。

WEBページなのだから、別にアーカイブも何も関係ないだろうと思っていたが、どうしても無視される。

やっとこさサポートに問い合わせると・・・・

アーカイブページで、他の種類のアーカイブを表示されるには、MTArchiveList タグを使いなさいと。

ああ、WEBページというのも、アーカイブの一種として考えるのね、

というわけで、

<MTArchiveList archive_type="Page">
を使って、WEBページのグローバルナビゲーションは、なんとかなった、という次第。

まだ、続きが・・・・。

 

間にはさむのは、MTPagePermalinkではなく、MTArchiveLinkの方を推奨された。

ようはWEBページというカテゴリのアーカイブとして扱え、ということか。

これで何時間費やしたことか・・・・。

マニュアルに用例を充実されることを強く希望する次第。

------------

てなわけで、、、、

<!--page menu-->
<ul class="widget-list">
  <MTArchiveList archive_type="Page">

    <MTPages tag="コーナートップページ" sort_order="ascend">
      <li class="menu_page">
         <a href="<$MTArchiveLink$>" class="spok_navi_link">
         <img src="<$MTStaticWebPath$>images/spinner-right.gif" />
          <$MTArchiveTitle$>

          </a></li>
    </MTPages>
</MTArchiveList>

</ul>

なんぞ、をサイドバーに改めて組み込んだ、ら、、、、

トップページと個別エントリーに、WEBページ情報が重複して大量に!大量に!大変だ!大変だ!火事だ!火事だ!

という感じ。

ソースを見直して、ああ、すいません。まだMTPagesが入っていました。これは抜かな、いかんのね。ダブルトゥループみたいな。

 一応、カテゴリアーカイブでも表示されるかどうかをみてみよう。ん、、、表示されていない。なんでやねん。ああ、MTPagesを抜いてなかったから、無視されたのね。

 

で、-------------

<!--page menu-->
<MTArchiveList archive_type="Page" tag="コーナートップページ" sort_order="ascend">

<ul class="widget-list">
<li class="menu_page">
   <a href="<$MTArchiveLink$>" class="spok_navi_link">
     <img src="<$MTStaticWebPath$>images/spinner-right.gif" />
     <$MTArchiveTitle$></a>
      </a></li>
</ul>

</MTArchiveList>
-----

ああ、トップページも落ち着いた、カテゴリアーカイブでも表示された、、、、

しかし、まだ何か変だ。項目が多い気がする。

ああ、グローバルナビゲーションには表示させたくないWEBページタイトルまで表示しちゃっているよ、、、、

tag="コーナートップページ"

が、効いてないのね。MTPagesでは使える tag="" は、MTArchiveList では使えないんだと。どうせいっちゅうねん。

 ------------

というけで

<MTPageIfTagged>

を使うことに。

<!--page menu-->
<ul class="widget-list">
  <MTArchiveList archive_type="Page" sort_order="ascend">
    <MTPageIfTagged tag="コーナートップページ">
      <li class="menu_page">
      <a href="<$MTArchiveLink$>" class="spok_navi_link">
        <img src="<$MTStaticWebPath$>images/spinner-right.gif" />
        <$MTArchiveTitle$>
      </a></li>
    </MTPageIfTagged>
  </MTArchiveList>
</ul>
-------------

ふううう。ようやくなんとかなった感じ?

 いや、まだだ。

なんか並び順がおかしい。sort_order="ascend" がページタイトル順になっているいよかん。アルファベットと異なり、日本語では、文字順は意味がない。

sort_by="created_on"

を加えました。これは私のミスでございます。

ん、、、、ん、、、、、

だめだよ。sort_order="ascend" sort_by="created_on"も効かねえよ。

文字順のままだよ。お~い。誰か助けてくれ~。

カテゴリの並び替えは、カテゴリーとフォルダを並べ替えるプラグイン(MT4専用)を利用させていただいております。が。

ページの並び替えプラグインって、、、、。

 

テンプレート保存すると、以下のようなエラーがでることがある。

---------------------------------------------------------------

テンプレートの変更を保存しました。 テンプレートでエラーが見つかりました。
<MTIfArchiveType>に対応する</MTIfArchiveType>がありません(11行目)。

---------------------------------------------------------------

ちゃんと対応してますよ(怒)。とどなってもしょうがないけれども、さっきと同じソースをエディタからコピペしたのに、なんでエラーがでるねん。10回に1回ぐらいはこのエラー。怖くてmovabletype上での編集はできず、すべて秀丸エディタで編集してから、全文をペーストするようにした。それでも、このエラーがでる。

たぶん私だけではないと思うのだけれども。。。。

編集画面のWIZWIGなんていらないから、正しく早く動くようにしてくれ~。

 

movabletypeでサイトを作ろうと思ったのは、実はこのMT4iの存在を知ったからでした。
なんせ、movabletypeは、UTF-8だし、そもそも携帯で閲覧するようにできていないので、他の携帯対応ブログシステムを探していたのです。しかし偶然、MT4iを知り、試しにインストールしてみると・・・・すばらしいソフトです。
CPA-LABでは合格体験記を掲載しているが、なんせみるのは受験生、時間がないから、電車の中で読んだりしたいだろうな、と思っていました。自分のサイトでPC用と携帯用とで、作り分けるなんて気の遠い作業をしなくてすみます。

MT4iのいいところは、すべて動的生成というところ。余分なファイルは一切作りません。
だから設置も簡単、3分でできました。
感謝、感謝。

MT4i/2.2


ただし、PCのURLに携帯でアクセスしてもリダイレクトするような機能はないので、こちらで用意しなければなりません。そのうち時間をみつけてやりましょう。

MovableTypeでPHPを使ってMT4iの携帯用ページにアクセスを振り分ける

このアーカイブについて

このページには、過去に書かれたブログ記事のうちmovabletype4カテゴリに属しているものが含まれています。

次のカテゴリはphp5です。

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

Powered by Movable Type 4.01