ナビゲーション周りのカスタマイズ(JavaScriptで表示・非表示)

2009年04月08日

サイドのナビゲーションにカテゴリー名を表示し、その下にカテゴリーに属するエントリーへのリンクを表示するのを前回紹介しました。

この表示だとエントリーが多くなるとナビゲーションが縦長になってしまします。

ですので、JavaScriptを使ってカテゴリー名をクリックすると、そのカテゴリーに属するエントリーが表示されるようにカスタマイズします。




<ul>
<MTCategories>
<li><a href="javascript:showhide('cate<$MTCategoryLabel trim_to="4"$>menu');"><$MTCategoryLabel pmhc=""$></a>
<ul id="cate<$MTCategoryLabel trim_to="4"$>menu" <MTIfCat_eq_Ent>style="displey:block;"</MTIfCat_eq_Ent> <MTNotIfCat_eq_Ent>style="displey:none;" >
<MTEntries sort_order="ascend">
<li class="entry_list"><a href="<$MTEntryLink$>"><$MTEntryTitle$></a></li>
</MTEntries>
</ul>
</li>
</MTCategories>
</ul>



まず、ここ。

<li><a href="javascript:showhide('cate<$MTCategoryLabel trim_to="4"$>menu');">

カテゴリー名をaタグで囲みhrefにjavascriptの関数showhideを実行するように設定します。showhideは自分で定義した関数です。

自分はカテゴリー名を「0100)カテゴリー名」のようにつけて、「0100)」の部分は、「pmHeadChanger」というプラグインで表示されないようにしています。
ですので引数には、「cate0100menu」のような値が渡されます。

次に、ここ。

<ul id="cate<$MTCategoryLabel trim_to="4"$>menu" <MTIfCat_eq_Ent>style="displwy:block"</MTIfCat_eq_Ent> <MTNotIfCat_eq_Ent>style="displwy:hide" >

エントリー名が並ぶliタグを囲むulタグにidを設定しています。

ulのid属性の値は「cate0100menu」のように表示されます。
関数showhideに渡した引数と一致させると後が楽です。

確かid属性の値は日本語が使えないはずですので、日本語が含まれないようにしました。


<MTIfCat_eq_Ent>は「MTIfCategory」というプラグインによるものです。詳しくはこちら
このプラグインによって、あるカテゴリー内のエントリーを表示しているときには、そのカテゴリーのエントリーリストは最初から表示されるようにしています。
そうすることで、今どのカテゴラリー内にいるのかわかりやすくなると思います。


では、showhide関数の中身です。



function showhide(id){

if(document.getElementById){
ulObj = document.getElementsByTagName("ul");
n = document.getElementsByTagName("ul").length;
for(i=0;i<=n-1; i++){
ulId = ulObj[i].id;
if(ulId){
if(ulId !=id)
document.getElementById(ulId).style.display = "none";

if(ulId == id )
if(document.getElementById(id).style.display == "block")
document.getElementById(id).style.display = "none";
else
document.getElementById(id).style.display = "block";
}
}
}
}



簡単に説明すると、
まず、カテゴリー名をクリックすると「cate0100menu」といったそのカテゴリーを表す文字列が引数として、このshowhide関数に綿割れ、変数idに格納しています。

document.getElementsByTagName("ul");でulタグのオブジェクトを取得して、forでループします。

ループの中では、取得したオブジェクトのidと引数で送られてきたidが一致するかしないかで条件分岐します。

一致しない場合は「display="none"」を設定します。

一致した場合は、
もし現在表示されているなら「display="none"」を設定して、非表示にします。
現在非表示ならば「display = "block"」を設定して表示します。

これで、問題なく動くのですが問題があります。

スタイルシートを使用せずにこのページを表示すると、各エントリーへのリンクが表示されません。

また、グーグルの検索結果でキャッシュを表示し、「テキストだけのバージョン」を表示した場合も各エントリーへのリンクは表示されません。

検索エンジンのロボットも各エントリーへのリンクを見つけることができず、各エントリーへクロールしない可能生があります。

これは、インラインでstyleを「display:none」設定してるのが原因です。

インラインではなくセレクタを使用して、「display:none」を設定すれば、「テキストだけのバージョン」を表示したさいCSSは読み込まれませんので、各エントリーへのリンクは表示されます。

ですので、「style="display:none;"」の部分を以下のように変更します。

<ul id="cate<$MTCategoryLabel trim_to="4"$>menu" <MTIfCat_eq_Ent>class="block"</MTIfCat_eq_Ent> <MTNotIfCat_eq_Ent>class="hide" >


スタイルシートには、

.block{
display:block;
}
.hide{
display:none;
}

というようにクラスセレクタでスタイルを定義します。

これで「テキストのみバージョン」でも、各エントリーへのリンクは表示されるようになりました。

しかし、各エントリーに移動した後に、現在表示されているナビゲーションのカテゴリー名をクリックした場合、1度目のクリックでは非表示にはならず、2度目のクリックで始めて非表示になります。

それもそのはずで、1度目のクリック前は「display:block」がインラインで設定されていませんので、条件分岐が上手くいかないからです。

解決するには、現在の「style.disyplay」の状態で条件分岐しないようにスクリプトを変更する必要があります。

その方法については、次回。

【追記】

上記の問題解決は、簡単なことでした。
「class="block"」としている部分を「style="display:block"」にすればいいだけでした。
ブログランキング・にほんブログ村へ

ナビゲーション周りのカスタマイズ(カテゴリー名の下にエントリー名を表示する)

カテゴリー名の下にそのカテゴリーに属するエントリーを表示する方法です。

これは、ナビゲーションに限らずサイトマップなどでも使うでしょう。

また、次に示す方法はカテゴリーの階層が1階層のみの方法です。
カテゴリーの下に子カテゴリーがあるような複数の階層の場合は他の方法をとる必要があります。

因みに、使っているMovable Typeのバージョンは3.33-jaです。


<ul>
<MTCategories>
<li id="cate<$MTCategoryLabel trim_to="4"$>" class="category_list"><a href="<$MTCategoryArchiveLink$>"><$MTCategoryLabel pmhc=""$></a>
<ul>
<MTEntries sort_order="ascend">
<li><a href="<$MTEntryLink$>"><$MTEntryTitle$></a></li>
</MTEntries>
</ul>
</li>
</MTCategories>
</ul>


ulタグが2階層になっています。
後々、CSSで見かけを整える為にエントリーを表示するliタグにはクラス・セレクタを設定している方がいいかもしれません。

コンテナタグの<MTEntries sort_order="ascend">でエントリーをループしています。属性sort_order="ascend"で表示順を投稿した日時順にしています。sort_order="descend"とすれば、投稿した日時が新しいエントリーから順に表示されます。

カテゴリー名が表示される部分にも、aタグを使って、カテゴリー・アーカイブへのリンクしていますが、既にカテゴリーに属するエントリー一覧が表示されるので必要ないかもしれません。

投稿されたエントリーが少ない時はいいですが、投稿されたエントリーが多くなると、このようなナビゲーションをページのサイドに配置すると縦長になってしまいます。

そのような場合は「ナビゲーション周りのカスタマイズ(カテゴリー名を表示する)」で説明したように、ページサイドのナビゲーションにはカテゴリー・アーカイブへのリンクのみを表示し、そのリンクをクリックするとそのカテゴリーに属するエントリーのインデックスページへ移動するようにする方がいいかもしれません。

しかし、これだとトップページから目的のエントリーへ移動するのに2回ページを移動しなければならないので、ユーザーにとって面倒であるかもしれません。

ということで、JavaScriptを使ってエントリーのリストを表示・非表示するようにしてみます。


ブログランキング・にほんブログ村へ

ナビゲーション周りのカスタマイズ(カテゴリー名を表示する)

ナビゲーションの作り方はいろいろあるかと思いますが、ブログでなくてCMSとしてムーバブルタイプを使う場合、まずカテゴリーがリストとして並ぶのが普通ではないかと思います。


<ul>
<MTCategories>
<li id="cate<$MTCategoryLabel trim_to="4"$>" class="category_list"><a href="<$MTCategoryArchiveLink$>"><$MTCategoryLabel pmhc=""$></a>
</li>
</MTCategories>
</ul>

僕は、ナビゲーションではulタグとliタグを使うようにしています。

まず、コンテナタグの<MTCategories>でループします。


liタグにidやclassをつけてますが、これはオプションです。
後でCSSで見栄えを整えたる際のセレクタに使ったり、JavaScriptを使ったりするときのために書き出しています。

MTCategoryLabelのタグ属性「pmhc=""」は「pmHeadChanger」というプラグインのものです。

「pmHeadChanger」というプラグインを使って、カテゴリーの表示順を調整しています。

カテゴリー名を「0100)カテゴリー名」として最初の数字で並べ替えが出来ます。書き出すときは、「)」より前の部分を「pmhc=""」で指定した物に置き換えます。上記の場合では、置き換え文字は空文字ですので「0100)」の部分が省略されて書き出されます。

逆にliのidでは、「trim_to="4"」という属性で、カテゴリー名の最初の数字のみを書きだしています。

<$MTCategoryArchiveLink$>で出力されるのはアーカイブマッピングで設定したカテゴリー・アーカイブへのリンクになります。

次は、カテゴリー名の下に、そのカテゴリーに属するエントリーを表示する方法です。


ブログランキング・にほんブログ村へ

MTifNonEmptyの終了タグが消えない。

2009年03月31日

サイトマップのように全記事一覧が表示されるページを作っていたのですが、今日ちょっと再構築されて出来たページのソースを眺めていると「</MTifNonEmpty>」のタグが消えないで残っている。

このタグが残っているだけではなくて、MTifNonEmptyで非表示にしたい部分も出力されている。

具体的にテンプレートに記載しているソースです。



<MTCategories show_empty="0">
<div>
<h3><a href="<$MTCategoryArchiveLink$>"><$MTCategoryLabel pmhc=""$></a></h3>
<MTIfNonEmpty tag="MTCategoryDescription"><p><$MTCategoryDescription$></p></MTIfNonEmpty>
<MTEntries> <a href="<$MTEntryLink$>"><$MTEntryTitle$></a>&nbsp;/&nbsp; </MTEntries>
</div>
</MTCategories>


まず、MTCategoriesでループしています。そのループの中で、カテゴリーのインデックスページのURL「MTCategoryArchiveLink」、カテゴリーのタイトル「MTCategoryLabel」などカテゴリーの情報を出力しています。

MTCategoryLabelのタグ属性「pmhc=""」は「pmHeadChanger」というプラグインのものです。

そして、MTIfNonEmptyでカテゴリーの説明があるときだけ、「<p><$MTCategoryDescription$></p>」を出力するように条件分岐しています。

その下に、MTEntriesでループして、エントリータイトルとリンクが表示されるようにしています。

それで、MTIfNonEmptyが上手く機能せず、カテゴリーの説明がないカテゴリーでは、「<p></p></MTIfNonEntries>」とタグが残ってました。

MTCategoriesのループの中では、MTIfNonEmptyは機能しないのか?」などと疑りましたが、何のことはなかったです。

MTIfNonEmpty」を「MTifNonEmpty」と書いてました。
大文字・小文字の違いで、上手く機能しなかっただけでした。

ブログランキング・にほんブログ村へ

使用中のプラグイン

2007年09月20日

どのプラグインを入れているか分からなくなるから、備忘録。
それと、説明・参考サイトへのリンク集。

Compare Plugin for Movable Type
MTタグの値を元にした条件分岐の機能を追加します。標準でという、 MTタグの値が0や空でないかを判定するタグはありますが、このプラグインを使うと、MTタグの値を文字列と比較したり、数値の大小の比較をすることもできます。


MTIfCategory
ブログランキング・にほんブログ村へ

更新履歴を作る

Movable Typeでエントリーを表示する場合、基本はエントリーを投稿した日付を元にして並べられます。

タグで「sort_order]属性で降順・昇順を指定します。
並べ替えのキーは「sort_by」属性で指定します。
書式はです。

タグの名前に指定できるのは
title=エントリーのタイトルで並べ替え
status=エントリーの状態(下書き/公開)で並べ替え
modified_on=エントリーの更新日で並べ替え
author_id=投稿者で並べ替え
excerpt=エントリーの概要で並べ替え

この5種類です。

しかし、一度投稿したエントリーを修正したり、追加をしたりすることがあるのですが、その場合「投稿日」並べ替えをした場合、上位に表示されないんですね。

修正、追加などをしたら、それも更新履歴としてトップページやナビゲーションに目立つように表示がしたい...というか、委託で作ったサイトでリクエストされました。

最初に思いつくのが「sort_by」属性で「modified_on」の指定ですよね。
しかし、これだとうまくいきません。
「更新したのに反映されないじゃないか!!」とお叱りを受けました。

どうしたらいいものかとGoogleで検索して探したら以下の記事を見つけました。

MTで記事を更新順に並べ替える[Global Listings]

こちらは「Global Listings」というプラグインを使った方法です。
「Global Listings」についてはこちらを参考にしてください。
Movable Type プラグインディレクトリ

もう一つは
エントリーを更新順にソートする〜更新リストの作り方
こちらは、「Counter」プラグインを利用する方法です。
「Counter」プラグインについては、こちらエムロジック放課後プロジェクト

僕は、「Counter」プラグインを利用する方法を参考に致しました。理由はですね、上記のブログ「エントリーを更新順にソートする〜更新リストの作り方」にも書いていますが、おそらく「Global Listings」を利用する方法では、誤字・脱字の修正などでエントリーの再構築を行った場合も、表示順序が上がってしまうからです。

それを回避する方法も上記のブログ「エントリーを更新順にソートする〜更新リストの作り方」に書かれています。
以下引用です。
上の方法だと誤字・脱字の修正などどうでもいい内容でも上がってきてしまいます。内容に意味のある変更があった場合のみ表示させたい場合は、エントリーに何らかの目印をつけて、目印のあるエントリーのみをソートの対象にするといいです。
一例として3.3から追加された「エントリータグ」を利用してみました。
修正時に「これは上げたい」と思うエントリーにのみ「@更新」というタグを付けます。タグ名の最初に@を付けるとプライベートモードになり、タグクラウドなどには出てこなくなるので他のタグの邪魔にもならないと思います。
「なるほど」と思ったんですが、「@更新をエントリータグに入れた記事をその後誤字脱字などでどうでもいい修正をした場合に、上に上がって欲しくないのに上がってきてしまうなぁ」と思ったのです。
もちろん、本当の更新をしたのが更新履歴一覧から除外されるくらい前ならば、「@更新」を外せばいいのだけど、まだ一覧に残っているときは、本当の更新ではなくて誤字脱字の修正で履歴のトップに上がってくるのは避けたい。
依頼を受けたサイトは、だいぶん落ち着いてきて、エントリーの追加があまり頻繁でないので、上記のようなことが起こり得るわけです。(しかも、またお叱りを受けます)

それで、僕が取った方法は、「エントリーを更新順にソートする〜更新リストの作り方」を参考にして、エントリータグに「@更新」ではなくて、概要に書式を決めて日付を入力してそれで並べ替えることにしました。

例えば、概要に「H19/09/08 更新」という風に更新した日付を入力します。ここで、年月日の書式は「H19/9/8」にしないこと。
これだと「H19/10/1」の方が後に表示されるようになるからです。

それで作ったコードがこれです。
<ul>
 <MTCounter>
  <MTEntries lastn="500" sort_by="excerpt">
   <$MTCounterPlus$>
   <MTCounterIfLess value="11">
    <MTIfNonEmpty tag="EntryExcerpt">
     <li><a href="<$MTEntryLink$>"><$MTEntryTitle$></a>&nbsp;<$MTEntryExcerpt$> (<$MTEntryCategory pmhc=""$>)</li>
    </MTIfNonEmpty>
   </MTCounterIfLess>
  </MTEntries>
 </MTCounter>
</ul>

<MTIfNonEmpty tag="EntryExcerpt">で概要に何も記入していないエントリーは表示しないように条件分岐をしています。

しかし、これがうまくいかない。
概要に記述がない場合、<$MTEntryExcerpt$>はエントリーの本文を、ブログの設定で指定した概要の文字数だけ先頭から表示するのです。

ですので、<MTIfNonEmpty tag="EntryExcerpt">で「概要は空でない」と判断されて、表示したくないエントリーも一覧に表示されてしまいます。しかも、本文の先頭つきで。

これを解決したのがこちらhttp://q.hatena.ne.jp/1177037454
Movable Typeのプラットフォームで
基本の設定>全般>表示に関する初期設定にある「概要にいれる文字数」を0にすると良いと書いてあります。

記事を見ると質問者はできなかったと書いてますが、ダメ元でやってみたらできました。

まだ、運用をしていないのでなんとも言えません。
実際に運用をすると、また不具合やさらなるリクエストが来るかもしれません。

これを使ったサイトは「更新作業を僕がしたくないので、HTMLを知らない人でも記事の更新ができるように」ということでMovable Typeを使って構築したのですが、やはりMovable Typeは基本はブログツールでCMSツールではないですね。
プラグインを導入することで、力技でできないことはないのですが、やはり苦労します。

参考にさせていただいたブログの方、どうもありがとうございました。
大変助かりました。
ブログランキング・にほんブログ村へ

使ってみたいプラグイン備忘録2

2007年09月19日

使ってみたいプラグイン備忘録1からの続きです。

Six Apartのプラグインディレクトリで一つ一つ見てます。
今求めているのとは違うけど、「これは使える!」「これは便利だ」というプラグインに目移りするので、備忘録としてメモ。
ModTextFilter
Movable Type標準の改行処理を改良し、タグを多く含むエントリーを入力しやすくするプラグインです。

blockquoteタグの中の改行が変換されないので、これを使えば便利そうです。
Mapper
住所や緯度経度などの情報を自動的にGoogle Mapsなどの地図画像に変換してくれるプラグインです。

まさに試してみたいプラグインです。
MailForm
Movable Typeの機能を利用して、メールフォームを作成することができます。

自分のブログには必要ないですが、委託された分で頼まれたときのために。
InsertLink
エントリー編集画面のリンク挿入機能を強化し、以下の2つのことができるようになります。

* リンクの表示先のウィンドウ(target)を指定することができます。
* 過去のエントリーからリンク先を選ぶことができます。

過去のエントリーからリンク先を選ぶことができるのが便利です。
EntryImages
エントリー内の画像(imgタグ)の情報を出力します。サイドバー等に「最近の画像」を表示する際などに利用します。

AccessTrade WebService
このプラグインは株式会社インタースペースが提供するアフィリエイトサービス 「アクセストレード」が提供するアフィリエイト用プラグインです。このプラグインを導入することで、Movable Typeの管理画面で商品リンクの作成・貼り付けが可能となります。

Photo Gallery
Movable Typeの管理機能を使用してフォトアルバムを実現するプラグインです。

ALPSLAB clip!
エントリー中に住所を指定するだけで、地図を表示することができます。
ALPSLAB baseの特定の場所に自動的にトラックバックすることができます。
表示する地図の大きさ、縮尺を表示することができます。
地図関係ですね。Mapperとどっちが使い勝手がいいかですね。

メモがてらに備忘録として、気になるプラグインを列挙しました。
機能別にまとめた方がわかりやすいですね。

とりあえずのメモですm(_ _)m
ブログランキング・にほんブログ村へ

使ってみたいプラグイン備忘録1

今、Movable Typeを使ったサイトのカスタマイズのため、プラグインを探しています。

Six Apartのプラグインディレクトリで一つ一つ見てます。
今求めているのとは違うけど、「これは使える!」「これは便利だ」というプラグインに目移りするので、備忘録としてメモ。

RightFields
エントリーの入力項目を自由自在に拡張するプラグインです。ここでは個人向けのレビューブログを作るための方法を紹介しますが、ECサイトなど商用サイトを構築することも可能です。さまざまな使い方があるので、インストールして利用してみてください。

とても、使えそうです。追加した入力項目でのエントリーの書き出しや、並べ替え、検索ができるかどうか気になります。
ReleaseDate
エントリーを公開する際に、エントリーの日時を公開時点の日時に自動変更します。

RelatedEntries
エントリーどうしを関連付け、エントリー間のリンクを表示することができます。

恣意的にエントリーを投稿する僕には役に立ちそう。
よくエントリーの後に「関連記事」とか「関連するエントリー」と書いてリンクしているのは、どうやらこれを使っているのでしょう。これを使うと「カテゴリー」という枠を考えなくてもよさそうです。
NotJapaneseLookup
日本語を含まないコメントやトラックバックを、迷惑コメント / トラックバックとみなします。日本語かどうかは、全角文字 / ひらがな / 句読点を、指定した文字数以上含むかどうかで判断します。

今のところ、スパムに困ってはいませんが、以前掲示板のスパムに困った事があるので、一応チェック。
MTRandomEntries
ランダムに選択したエントリーを表示するプラグインです。

使い道なさそうだけど、以前トップページに最新のエントリーじゃなくてもいいなだけどなぁって思った事があるので。
MT-Mobile
ブログを携帯電話から閲覧できるようにします。このプラグインを利用するにはA8.netへの登録が必要です。

「A8.netへの登録」って?アフィリエイトと関係があるんでしょうか?しかし、ブログを携帯でも閲覧できるようにはしたいと思っています。アフィリエイトのために...あっ、関係ありますね。
MTIfCategory
カテゴリーのリストと現在のアーカイブのカテゴリーを比較するプラグインです。

ナビゲーション周りのプラグインなんで、ユーザビリティーを気にする人には便利ですね。
今のナビゲーションは、カテゴリーのボタンをクリックすると、エントリーへのナビがドロップダウンで表示するようにしていて、エントリーページをユーザーが閲覧しているときは、そのエントリーが属するカテゴリーは表示したままになるようにしています。
ユーザーが今どのカテゴリーにいるか、分かるようにですね。「You are here」効果です。
今はそれを、Java Scriptで実装しているんですけど、表示が遅くなるんですよ。なので、このプラグインを使って、該当カテゴリーだけCSSで「display:none」を書き出せば、もっと軽くできそうです。



ちょっと、長くなってきたので、「備忘録1」として、続きは別記事にします。

断っておきますが、「使ってみたい、役に経ちそうなプラグインの備忘録」です。僕はまだ使っていませんので、コメントは「予想、期待」です。
ブログランキング・にほんブログ村へ

MTアーカイブマッピングを変更

2007年08月20日

Movable Typeを使った既存のブログのアーカイブ・マッピングを変更しました。
こちらのサイトです。中小企業で働くパソコン相談係のお仕事

先の記事に書いたように、個別エントリーの出力ファイルを「article/ファイル名.html」のようにしました。

SeeSaaブログやさくらのブログ方式です。

もともと、カテゴリーディレクトリにあった個別エントリーのファイルは削除しました。

ですので、個別ページへの外部からのリンクや、検索エンジンからのリンクは切れてしまいました。

そこからの訪問者は全部トップページにディダイレクトされます。
そういう設定は「.htaccess」ファイルで設定します。
詳しくは書きません。検索すればすぐに見つかりますので。

検索エンジンのインデックスは時間が経てば解決されると思います。

ただ、困ったことに個別エントリー内の記事から、他記事へのリンクも切れてしまった。
これは、手作業で修正して行くしかないですよね。

実は、Dream Weaverにはファイルを移動した際に、リンクを更新する機能があるんでした。

この機能をMovable Typeに持たせることは出来ないんですかね。
ブログランキング・にほんブログ村へ

Movable Typeのアーカイブ・マッピング

Movable Typeのアーカイブ・マッピングに悩まされています。

デフォルトのままでは、年/月/ファイル名.htmlのように出力されます。

別に、ブログツールとしてMovable Typeを使うなら、これで良いんです。
「ブログツールとして」っていうのが、どういうことかと言うと、ブログとは、正式には「ウェブログ」です。
つまり、記事を時系列で管理することになるわけです。
基本は日記形式なんです。
だけど、ブログが登場する以前の日記ツールと異なる点は、コメント機能とトラックバック機能を備えていることです。特に、トラックバック機能は、ブログ特有の機能です。
本来のブログのあり方とは、ニュースの記事や、世の中の出来事に対して記事を書きます。そして、その記事を見た人が、その記事を引用したり、付け加えたりして記事を書きます。引用した際にそれを引用もとに告知するためにトラックバックを使います。

そうすることによって、ニュースや世の中の出来事に対して、多角的に意見をもった相互リンク集になるわけです。
そのような使い方が、本来のブログの使い方です。

Movable Typeは、そもそもブログツールですから、記事を時系列で管理します。

だけども、Movable TypeをCMSツールとして利用することも、スタンダード化しています。

ブログサイトではなく、一般のサイトの構築にMovable Typeを利用するのです。

ブログサイトと一般のサイトの違いは、コンテンツの管理のしかたです。
一般のサイトはコンテンツをカテゴリー別に管理します。

Movable Typeのデフォルトの設定では、投稿されたエントリーは年/月/というディレクトリ構造で管理されます。

しかし、いっぱんのサイトはカテゴリー別のディレクトリ構造でファイルを管理します。

Movable Typeでは、出力ファイルのディレクトリとファイル名の設定をアーカイブ・マッピングで行うことが出来ます。

ですので、Movable TypeをCMSツールとして使うならば、アーカイブ・マッピングでカテゴリー名/サブカテゴリー名/ファイル名のように出力するように設定をすればいいわけです。

しかし、僕はブログツールを使ってサイトを構築する際のメリットとして、恣意的に投稿した記事を後から、カテゴリー分けをして整理整頓が出来ることだと思っていたのです。

ですから、「カテゴリー名/サブカテゴリー名/ファイル名」という形式で出力をした場合、ある記事を違うカテゴリーに移した場合、その記事のURLが変わってしまうのです。

その記事が検索エンジンにインデックスされていたり、その記事から他ブログへトラックバックを送信していたりした場合、そのリンクが切れてしまいます。
正確には、リンクは切れません。更新されないページにリンクがつながったままになります。
それも、困ったことなのですが、削除したらリンクが切れますので。

ですから、今は「.htaccess」ファイルで、存在しないファイルにアクセスがあった場合は、そのカテゴリーのindexページへ、カテゴリー自体が存在しない場合はトップページへリダイレクトするように設定しています。

だけど、恣意的にサイトを作っていけるようにするにはどうしたらいいかを考えています。
つまり、変更に強い設定ですね。

カテゴリー削除したり、変更したりすることで、ファイルのディレクトリが変わってしまうわけですから、ディレクトリ構造を持った出力はしないようにする。
しかし、すべてのエントリーファイルが同一のディレクトリに保存されることになります。

出力ファイル名をどうするかです。
参考に、検索して調べてみたのですが、出力ファイル名を年月日時分で生成するように勧めているサイトが多いですね。
例えば、「200708200122.html」のようにです。

しかし、僕はエントリーの表示順を投稿した日時によって並べ替えをしますので、投稿した後に投稿日を変更することがあります。その場合、このファイル名も変更されるんじゃないですかね。

さくらブログやSeeSaaブログを参考にすると、記事ファイルはarticleディレクトリに数字の羅列のファイル名で出力をされています。
ですから、後からエントリーの属するカテゴリーを変更してもURLは変更しません。

この数字の羅列はなんですかね。ID番号でしょうか?

ID番号にしろ、日時から生成したにしろ、ファイル名だけを見て、そのページの内容が分からないですから、アクセス解析を見るときなんかに困りますね。

それと、ファイル名やディレクトリー名にその記事に関係する名前をつけた方が、わずかながらSEO的には有利なんですけどね。

Movable Typeはファイル名は自動で生成しなくて、任意に付けることも出来ます。
たしか、同じファイル名をつけてしまった場合、指定したファイル名の後に連番の数字が付くんじゃなかったかな?

ということは、これがベストだな。

次に新しくサイトを作るときは、この設定で行こう。

既存のサイトのアーカイブ・マッピングを変更したら、ごみファイルは残るし、削除したら他サイトからのリンクや検索サイトからのリンクは切れちゃうけど、しょうがないか。
トップページにリダイレクトするようにして、しのぐしかないな。

ということで、エントリー・アーカイブの出力フォーマットは「article/%f」にしました。

「%f」は拡張子を持つアーカイブファイル名を出力します。エントリーのタイトルに英数字が含まれるときは、その英数字がファイル名になります。例えば、このエントリーなら「movable_type.html」となります。

「article」というディレクトリに全ての記事を出力することになります。

カテゴリー・アーカイブは「category/%c%x」としました。
これも、「category」ディレクトリにカテゴリーのインデックスページが出力されます。インデックスページはアーカイブの種類でカテゴリーにチェックをつけている場合は、テンプレートの「カテゴリー・アーカイブ」に基づいて出力されたhtmlファイルです。

「%c」は主カテゴリパス(category/subcategory)を出力します。環境設定>カテゴリー>詳細タブの出力ファイル名で設定した文字が出力されます。出力ファイル名を設定してない場合はカテゴリー名に英数字があるなら、その英数字で自動で出力ファイル名がつけられます。カテゴリー名に英数字がない場合は「cat26」のように「cat」という文字の後に、自動で数字が振られます。

SEOのことを考えると、記事の内容に関係のある英数字でカテゴリーの出力ファイル名を設定している方がよいです。

サブカテゴリーがない場合は[%c」も「%C」も出力する内容はおなじです。

「%x」はドット(.)を持つファイルの拡張子を出力します。拡張子は環境設定>設定>公開タブ の「アーカイブの拡張子」で設定できます。デフォルトでは「html」です。

このような設定ですと、「article」ディレクトリや「category」ディレクトリには「index.html」というファイルが存在しませんので、URLにファイル名でなく、ディレクトリ名でアクセスがあった場合に、ディレクトリ内のファイルが丸見えにならないように、.htaccessファイルを設定する必要があります。

ブログツールとして、Movable TypeとWordPressがスタンダードになりました。そして、本来のブログツールとして使用せず、CMSツールとして使用することも、スタンダードになりました。

僕としては、Movable TypeよりもWordPressの方が、CMSとして使いやすいと感じています。

本来、ブログツールであるものをCMSツールとして使っている人が多いということは、CMSツールの需要があるということです。

なので、ここに来てフリーのCMSツールも登場してきたようです。
ブログランキング・にほんブログ村へ