Page Top

Movable Type(MT)のスタティックパブリッシングとダイナミックパブリッシングにおけるコードの読み込まれ方の違い~その2ー自分用覚書

August 13, 2012

前回の「Movable Type(MT)のスタティックパブリッシングとダイナミックパブリッシングにおけるコードの読み込まれ方の違い~その1ー自分用覚書」では、表面的に明らかに出てきたエラーを2点ご紹介しました。その後、更にサイトを検証していきますと、5点ほど表示がおかしな点が見つかりました。(MT5.14にてです。)

1)タグクラウドのリンクをクリックすると、エラー「ブログ(ID:children)をロードできません。」が出てくる。
2)カテゴリアーカイブのページに居る時、サイドナビゲーションにあるブログの最新記事のタイトルとリンクが表示されず、日付は出てくるが何故か全てその日の日付になっている。
3)カテゴリアーカイブのページとウェブページに居る時、アイテムが表示されない。
4)ウェブページに居る時、サイドナビゲーションにあるブログの最新記事のタイトルがブログの最新記事のものではなく、そのブログに属するウェブページの最新記事になっている、が、それぞれのタイトルのリンク先は全て今居るウェブページへのリンク先になっている。
5)サイドナビゲーションにあるウェブページのところで、指定したシークレットタグを充てたウェブページのタイトルとリンクは表示しないようにしているのに、なぜかそのシークレットタグが付いたウェブページのタイトルとリンクを表示してしまう。

これらの現象を1つずつ確認していき、5点中3点を解決することが出来ました。
まずは、解決できた3件について。

2)カテゴリアーカイブのページに居る時、サイドナビゲーションにあるブログの最新記事のタイトルとリンクが表示されず、日付は出てくるが何故か全てその日の日付になっている。
3)カテゴリアーカイブのページとウェブページに居る時、アイテムが表示されない。
4)ウェブページに居る時、サイドナビゲーションにあるブログの最新記事のタイトルがブログの最新記事のものではなく、そのブログに属するウェブページの最新記事になっている、が、それぞれのタイトルのリンク先は全て今居るウェブページへのリンク先になっている。

これらのいずれも下記のコードの書き方が影響していました。

<MTArchiveList lastn="5">

これを下記のようにしたら良くなりました。

<MTArchiveList lastn="5" archive_type="Individual">

具体的にarchive_typeを指定してあげないと、ダイナミックパブリッシング下ではアーカイブのタイプを認識できないようです。

また、解決していない1)と5)について。
1)については、下記のコードを指定していたのですが、

<MTTags type="entry" top="20" include_blogs="children">

どうも、この include_blogs="children"(siblingsでも同じ症状)が読み込めていないようです。childrenの代わりにブログのIDを直接記入すると大丈夫でした。

5)については、下記のコードを指定していたのですが、

<MTPages no_folder="1" tag="NOT @freearea_side">

どうもこの「NOT」が効いていないようで、@freearea_sideを表示したくないのに、このシークレットタグが付いたウェブページが表示されてしまう結果となっていました。逆にこの@freearea_sideがついていないウェブページは表示されませんでした。本当はこちらを表示したかったのですけれど。。

ということで、1)と5)については、タグ自体の不具合ということで、Movable Typeさんに不具合の報告を行いました。次は、MT5.2のベータ版の方で確認しようと思います。

う~、なかなか先に進めないです~。気合~~~。

テキストエディタ EmEditor

August 10, 2012

私はWindows使用でテキストエディタはHomeSite(当初はマクロメディア社開発→アドビ社買収→2009年に開発終了)という随分と古いテキストエディタを学生時代から今まで使っていたのですが、数週間前、開発中のテーマのあるCSSファイルが2300行を超えた辺りから、いつもの挙動不審(UTF-8で保存してファイルを閉じると、次にファイルを開いた時、データが最初の数行だけでそれ以外のデータが全部なくなっている)が始まり、以前もこの問題に遭遇したことがあったので、いつものようにファイルをとりあえずANSIにして保存をしましたが、今回のcssファイルでは何故か先頭に入れた文字コード宣言とファイルを指定の文字コードで保存することがうまく行かず、文字コードの読み取り問題とデータの消失が継続したので、新しいテキストエディタを探す旅に出かけました。

ちなみにHomeSiteは英語版を使っていたのでエディタ上では日本語が文字化け状態で常時表示されていました。それをこの10年以上も使っていました。それをどうやってテーマ開発中のMovable Typeのテンプレートに貼り付けていたかと言いますと・・、HomeSiteで作成したコーディングをCtr+Cでコピーして、それを一旦Dreamweaverにペーストし(Dreamweaver上ではSHIFT_JISの文字コード設定をしておきます)、日本語の部分がちゃんと変換されたものを、Movable Typeの画面に貼り付けていました(でも、Movable TypeのファイルはUTF-8で作成なので、ファイル自体はUTF-8です。)毎回毎回コードを作成・修正するたびにこの作業なので、時々訳ワカメになってしまうこともあったりだったのですが、HomeSiteが軽くて、文字コードの意味でも安定した使いやすいエディタだったので、これをずーっと使っていたのでした。結構ガラパゴス化していました。でも、本当に必要な機能が揃ったエディタだったので変えたくなかったのですが、なにせアドビの開発自体がTHE ENDなのでどうすることもできません・・。なぜあんなにも優れたテキストエディタの開発をTHE ENDにしちゃったのでしょう・・。まぁ、Dreamweaverがあるからでしょうが。Dreamweaverとは異なるテイストなので継続してもらいたかったです。それか、もう開発しないのであればオープンソースにしてくれたら良かったのにな、などというのは、他の人も同じ思いだったみたいです。。

Dreamweaverはウェブ制作者の定番ですが、私が持っている古いDreamweaverは、時々文字コード変換が変な感じで安定性に欠け(私が貼り付け用で使用する以外は)、最新版のDreamweaverをお試しでダウンロードしてみましたが、さすがに私の古いノートパソコンには重すぎたようで、うんともすんとも動かず即コントロールパネルの削除のところからプログラムを削除しました。そうしましたら何故か古いDreamweaverまでもが動かなくなってしまい、泣きっ面に蜂。パソコン自体を工場出荷状態にまで初期化して、またDreamweaverを入れることもできますが、HomeSiteもこんなだし、Dreamweaverも古いのでそこまでして使うほどでもないと感じ、新しいテキストエディタ探しに出かけたのでした。

そこで見つけたのがいくつかあり、タイトルにあるEmEditor Professionalというのが一番HomeSiteの仕様に近く、と言っても、同じような初期状態にするのに、設定を色々変更したりプラグインを入れなくてはならなかったのですが、エンジン自体が軽く、文字コードの取り扱いも安定しており、HomeSiteで保存できなかった2000行以上のUTF-8のCSSファイルも問題なく保存&Openできましたし、HomeSiteのエディタ上でずっと文字化け状態で見えなかった日本語もちゃんとエディタ上で読めるようになりましたし、なにしろ、そのエディタ上で編集したコード(UTF-8ファイル)をMovable Typeに直接ペーストしても日本語が文字化けを起こさないのが良かったです。ちなみにEmEditor Professionalは有料(4,200円)ですが、フリー版もあるようでそちらも試してみましたが、使いたいような機能が使えず、やはりEmEditor Professionalにしました。他にもフリーウェアのテキストエディタがあり、2つほどインストールして使ってみましたが、文字コードの問題があったり(エディタから直接Movable Typeにペーストすると文字化け)、機能が不足していたり、ライセンスの問題(フリーウェアなので必ずリンクウェアだったり)で、やはり使えませんでした。

1つEmEditorさんにリクエストがあるとすれば、指定フォルダ配下の検索結果をアウトプットバーに表示できるのですが、この検索結果に表示されるファイルへのディレクトリが長いと自動改行で2行になってしまい、ダブルクリックしてもそのファイルが開けない状態になるので、できれば2行にせず、アウトプットバーにスクロールバーを出す事で1行に抑えてくれるとリンクが効いてありがたいのでした。これだとHomeSiteと同じような仕様になります。

ちなみにCodaというエレガントなテキストエディタがあり巷で人気のようなのですが、今のところMac版だけのようで、残念。Windows版も作ってくれたら使ってみたいなぁ~と思いました。

Movable Type(MT)のスタティックパブリッシングとダイナミックパブリッシングにおけるコードの読み込まれ方の違い~その1ー自分用覚書

August 06, 2012

Movable Type(MT)でダイナミックパブリッシングが出来るようになりましたので、テーマを充ててみたのですが、スタティックパブリッシングではOKだったものが、ダイナミックパブリッシングの時では、コードの読み込まれ方が異なるようでエラーが発生するのを2点ほど見つけました。

Fatal error: Smarty error: [in evaluated template line 145]: syntax error: unrecognized tag 'mtusersessionstate' (Smarty_Compiler.class.php, line 580) in /home/xxxxx/public_html/xxxxx/xxxxx/xxxxx/php/extlib/smarty/libs/Smarty.class.php on line 1095

mt_dynamic_smarty_error.png

当初このエラーを見てもどこに原因があるのか良くわからなかったのですが、どうやらヘッダーモジュールに以下のように各アーカイブテンプレート用の<script>~</script>をまとめて記載している箇所があるのですが、これが問題だったようです。

<MTIf name="page_template">
 <script type="text/javascript">
  ~~~~
 </script>
</MTIf>

<MTIf name="comment_preview_template">
 <script type="text/javascript">
  ~~~~
 </script>
</MTIf>

これらのコードを一旦削除して更新するとエラーは消え、サイトが表示されるようになりました。ですので、これらのコードは、Movable Type(MT)のデフォルトテンプレートのように関連する各テンプレートに直接記述するか、<script>~~</script>の部分を1つずつモジュール化してウェブサイト側にまとめ、例えば次のようなブロックタグ<MTIf name="page_template">~</MTIf>で判別して読み込みを行う(ブログから読み込む場合は、マルチブログで読み込み)か、になると思います。(私は後記の方法=ウェブサイト側にモジュールとして一箇所にまとめ、利用する時はインクルードでモジュール化したコードを読み込む事で、他ブログからでもマルチブログのインクルードを使ってコードを再利用する方法にしました。)

error in template: mtif found but mtelseif was expected

が、今度はサイドナビゲーションが消えていました。先ほどのような大きなエラーメッセージはなかったのですが、サイトの下の方に「error in template: mtif found but mtelseif was expected 」というエラーメッセージが小さく表示されていました。サイドナビが表示されていないので関連のあるテンプレートはサイドバー用のテンプレートかと思いきや、コーディングの順序でサイドバー用のコードが来る前のパンくずナビ用のテンプレートのところでエラーが発生しているのがわかりました。メッセージのとおり、MTElseIfに関係があるようなのですが、MTElseIfのクロージングタグがmissingなのかな?と思いましたが、ちゃんとクロージングタグはあるし、見たところ問題はなく、スタティックパブリッシングではOKなので余計に訳がわからなかったのですが、どうも、次に表す「駄目な例」の書き方が、ダイナミックパブリッシングでは読み込めない?ようです。スタティックではOKです。

◆駄目な例
<MTIf>
<MTElseIf>
<MTElse>
 ~~~
</MTElse>
</MTElseIf>
</MTIf>

◆OKな例
<MTIf>
<MTElseIf>
<MTElse>
 ~~~
</MTIf>

ということで、上記の「OKな例」のような記述にしたところ、問題はなくなりました。ちなみに、なぜかMTElseIfだけが問題で、MTElseの分は前の書き方のままでもOKでした。とりあえずは、今のところこの2点がスタティックパブリッシングとダイナミックパブリッシングにおける違い(?)のようです。私のテーマにおいて、の話ですが。忘れないように自分用覚書です。

Movable Type (MT) ダイナミックパブリッシング エラー 500 Internal Server Errorとページが見つかりません。

August 03, 2012

今回重い腰を上げ、本格的にMovable Type(MT)のダイナミックパブリッシングにチャレンジしようと頑張ってみました。「500 Internal Server Error」と「ページが見つかりません。」のエラーが発生し、途中でちょっとやっぱり私の環境では無理なのかな・・と思ったりしたのですが、無事にダイナミックパブリッシングが出来るようになったので、忘れないように自分用覚書です。解決法は意外と簡単だったのですが、それにたどり着くまでに2日もかかってしまいました。。

500 Internal Server Errorとその対処法

まず始めに、今回ダイナミックパブリッシングを行うにあたって、新しいデータベースとフレッシュなMovable Type(今回使ったバージョンは5.14です)を用意しました。いつものようにインストールし、ユーザー情報の設定やFirst Websiteの設定などを行いました。そして、ダイナミックパブリッシングを行うのに、ウェブサイトテンプレートの管理ページにアクセスし(左ナビのデザイン>テンプレート)、ページ右側にある「公開プロファイルを設定」をクリックし、ダイナミックパブリッシングを選択しました。そして、確認が終わると共に各アーカイブテンプレートがダイナミックパブリッシングに構築され、ウェブサイトを確認したところ、「500 Internal Server Error」が出てきました。

mt_dynamic_publishing_500.png

・エラーにおいて参考にしたMovable Typeのドキュメント

(上記のドキュメントを参照後)結局・・ってかなり話を端折ってしまうのですが、私の場合、.htaccessもちゃんと動作していたし、IISでもないし、サーバ会社さんに確認して、.htaccess の内容の修正も無かったですし、結局何が、と思ったらパーミッションの問題でした。Movable Type(MT)の管理画面で指定して作成されたウェブサイトのフォルダのパーミッションを、MTが自動で設定する「777」から「755」に変更しないといけなかったのでした。理由はサーバ会社さんの環境がsuPHPを採用していたからでした。(ちなみに、ダイナミックパブリッシングによって作成される、ウェブサイトフォルダ配下の「templates_c」というフォルダに対するパーミッション変更はせずとも動いているので、この分はMTデフォルト設定の「777」のままにしています。)

「ページが見つかりません。An error occurs.」のエラーとその対処法

次に、パーミッションを変えてサイトは無事に表示されるようになったものの、「ページが見つかりません。An error occurs.」というエラーが表示されるようになりました。しかも入れ子のエラー表示です。

mt_dynamic_publishing_error.png

これも結局話を大きく端折りますと(色々長い話があったのですが・・)、First Website 配下のブログを作成していなかったから「ページが見つかりません。An error occurs.」のエラーが発生していたのでした。なんと!!(これを見つけるのにかなりの時間がかかったのです。。)ウェブサイト配下のブログを作成して、ウェブサイトの方のダイナミックパブリッシングを再度確認したら、タラ~ン無事にサイトが表示されるようになりました!(ブログの方もウェブサイトの時と同じようにフォルダのパーミッションを「777」から「755」に変更します。)

mt_dynamic_publishing_fine.png

これで私が利用させていただいているアメリカのホスティング会社さんのシェアードサーバの環境でもMovable Type(MT)のダイナミックパブリッシングを行うことが出来るようになりました。今は、ダイナミックパブリッシングにおけるコードの書き方がスタティックパブリッシングの時とちょっと違うようなので、その確認中です。これで開発時間がかなり短縮できそうです。頑張ります。ちなみに、MTでダイナミックパブリッシングにしても、拡張子は.htmlのままでもOKなのですね。これは便利~。

エントリーが・・・

August 03, 2012

昨日時間をかけて作成した長文のエントリーを今朝確認すると、サーバ会社さんのクラウドサーバーのRAIDのハードディスクの一部の交換とやらで惜しくも消失していました・・。(泣)データベースにもなく、サーバ上にもなくなっていました。Firefoxのキャッシュも見てみたものの(about:cacheとURL欄に入力)、それを見るためのCashe Viewerというアドオンがあるそうなのですが、「Firefox 14.0.1 では利用できません」とのこと・・。昨日MTのダイナミックパブリッシングのエラーについて長々と時間をかけて書いた記事だっただけに何とも言えない気分です。ちゃんとパブリッシュもしていたのに~。先日のMTのダイナミックパブリッシングのエラーと同じ、ブログのURL先が皮肉にも500エラーでまさかね?と思いましたが本当でした。今は良くしていただいたので大丈夫になりましたが。これまでも今回の件を含め3回ほどデータを消失されていますので、私もいい加減学んだ方が良さそうですが、このサイト自体、あまり更新していないので、毎回ブログ記事を書くたびにデータのバックアップという気分になれずにいたのですが、やはりエントリーの記事は保存する前にテキストデータとして毎回取っておいた方が良さそうです。どんな場合でも、結局最終的には自己責任ということになるのですよね~。

6月の末にファーストサーバが大きなデータ消失を起こしてしまった事件?がありましたが、最近のクラウドとか、自分的には便利そうだなとは思っても、やっぱりちょっと怖いなと思ってしまうのですが、時代はクラウドに向けまっしぐらという感じなのでしょうか?勿論、自分でシステムのインストールやアップデートなどをしなくても良いので時間は省けるし、セキュリティーも常にUp to Dateということで利点も沢山あると思うのですが、こういうサーバ側の物理的な故障やプログラムのバグなどによるエラーによって、一瞬にしてデータが無くなってしまうというリスクもあるということですよね?そのリスクを避けるためには、やはり常にローカル環境にバックアップを取っておく、という事になるでしょうか?

時代はクラウドという大きなものに向かっていっているようにも見えますが、その一方でこれからは個というグループ?の時代に向いていくような気がしているんですよね。それは自宅で電力発電だったり、自宅サーバで自宅からブロードキャスティングみたいな。今夏日本の政府が電力システム改革で、発送電分離と電力小売りの全面自由化を言い始めたのを読んで、やっぱりそういう時代に向かっているのかな?などと感じたりしましたがどうなんでしょうか?

まぁ、ともあれ、私はまたMTのダイナミックパブリッシングのエラーについて、今度は要点のみ短縮して書こうかなと思います。