2005-10-28 アーカイブ

http://hxxk.jp/2005/10/28/

アーカイブテンプレートとパンくずリスト

記事データ

投稿者

望月真琴

投稿日時

2005-10-28T22:07+09:00

タグ
概要

各種アーカイブテンプレートにおけるパンくずリストの記述方法を、実際のソースを交えて解説しています。

リプライ

7 件のリプライがあります。

記事本文

アーカイブテンプレートにパンくずリストを配置する

これは weblog に限ったことではありませんが、現在表示されているページが、そのサイトのどの位置にあたるものなのかよく分からなくなるということがあります。 それを防ぐために、サイトのトップページから現在表示されているページへの経路のリンクを並べるという手法があります。 これは一般的にパンくずリストと呼ばれ、大抵はページ上部などの見易い位置に配置されます。 実は HTML / XHTML には link 要素というものが用意されていて、これを適切に記述すればこのようなパンくずリストは不要……というか蛇足となるのですが、現状では大部分のブラウザが対応しているわけではないというところです。

今回はそのパンくずリストについての論議はともかく、どういった形式のリストを作るか、それをどうテンプレートに組み込むかを解説しようと思います。 また、この部分のマークアップをどうするかも意見が分かれるところですが、今回はひとつのパラグラフとみなして p 要素でマークアップする例と、経路を順に辿る、すなわち序列リストであるとみなして ol 要素でマークアップする例を紹介します。

  1. パンくずリストの形
  2. 日付アーカイブのパンくずリスト - p 要素版
  3. 日付アーカイブのパンくずリスト - ol 要素版
  4. カテゴリアーカイブのパンくずリスト - p 要素版
  5. カテゴリアーカイブのパンくずリスト - ol 要素版
  6. エントリアーカイブのパンくずリスト (1) - p 要素版
  7. エントリアーカイブのパンくずリスト (1) - ol 要素版
  8. エントリアーカイブのパンくずリスト (2) - p 要素版
  9. エントリアーカイブのパンくずリスト (2) - ol 要素版
  10. 他にも色々
  11. Web Standards with MT ver.3.2 Strict には

パンくずリストの形

weblog の URI ( MTBlogURL ) を起点とし、そのアーカイブに辿り着くまでのリンク経路を示す形で作ります。 なお、リストにおいてそのアーカイブ自身 ( すなわち現在表示しているページ ) にはリンクを張らないこととします。

また、それぞれのリンクの区切りは p 要素版では > を用い、 ol 要素版ではそれぞれ li 要素で区切られていると考えることができるため、特に区切り文字は用いません。 ol 要素版でも区切り文字を表示したい場合は、次のように CSS に記述すると良いでしょう。

/* リストを横並びにする */
ol#hierarchical-menu li{
  display:  inline;
  }

/* 各リストの前に > を表示する */
ol#hierarchical-menu li:before{
  content:  "\000020\00003e\000020";
  }

/* リストの先頭の前には > を表示しない */
ol#hierarchical-menu li:first-child:before{
  content:  "";
  }

p 要素版でも CSS による区切り文字表示を行ってもよいのですが、 ol 要素版と違って CSS オフの状態で区切りが明確にならないため、直接 > を記述するという考え方です。

日付アーカイブのパンくずリスト - p 要素版

Web Standards with MT ver.3.2 Strict > 2005年10月 Movable Type 3.2 では、設定で自発的にアーカイブをサイト・パスとは別のパスで公開する設定にしない限りは、アーカイブはサイト・パス直下に配置されます。 デフォルトでは日付アーカイブは月別アーカイブとして作られ、 yyyy/mm/index.html として作成されますが、 yyyy/index.html は存在しないため、月別アーカイブが実質のサイト・パス直下のアーカイブと考えて良いでしょう。 「ホーム > 月別アーカイブ」という形になります。

<p id="hierarchical-menu">
<a href="<$MTBlogURL$>" title="ホーム"><$MTBlogName encode_html="1" remove_html="1"$></a> &#62;
<$MTArchiveTitle$>
</p>

日付アーカイブのパンくずリスト - ol 要素版

Web Standards with MT ver.3.2 Strict > 2005年10月 前項の日付アーカイブのパンくずリストと考え方は同じです。

<ol id="hierarchical-menu">
  <li><a href="<$MTBlogURL$>" title="ホーム"><$MTBlogName encode_html="1" remove_html="1"$></a></li>
  <li><$MTArchiveTitle$></li>
</ol>

カテゴリアーカイブのパンくずリスト - p 要素版

Web Standards with MT ver.3.2 Strict > information > download カテゴリアーカイブは日付アーカイブと違い、少々複雑になります。 サブカテゴリの階層によってリストの階層も変わりますし、テンプレートタグの組み合わせが難しくなっています。 「ホーム > カテゴリアーカイブ」という形になりますが、そのカテゴリがトップレベルカテゴリかはたまた何かのカテゴリのサブカテゴリであるかによって、一つだけ記述したり、再帰的に記述したりします。

<p id="hierarchical-menu">
<a href="<$MTBlogURL$>" title="ホーム"><$MTBlogName encode_html="1" remove_html="1"$></a><MTHasParentCategory> &#62;</MTHasParentCategory>
<MTParentCategories glue=" &#62; " exclude_current="1">
  <MTIfNonZero tag="MTCategoryCount">
    <a href="<$MTCategoryArchiveLink$>"<MTIfNonEmpty tag="MTCategoryDescription"> title="<$MTCategoryDescription$>"</MTIfNonEmpty>><MTCategoryLabel></a>
    <MTElse>
      <MTCategoryLabel>
    </MTElse>
  </MTIfNonZero>
</MTParentCategories>
&#62; <$MTArchiveTitle$>
</p>

カテゴリ部分において <MTIfNonZero tag="MTCategoryCount"> と指定することで、記事数が 0 のカテゴリ ( = アーカイブが作成されないカテゴリ ) はリンクではない文字列として表示します。 また、 <MTIfNonEmpty tag="MTCategoryDescription"> と指定することで、「カテゴリーの説明」欄が書かれていればリンクアンカーの title 属性にそれを記述するようにしています。

また、 <MTParentCategories glue=" &#62; " exclude_current="1"> と指定すると区切りが発生しない場合 ( = トップレベルカテゴリ ) でも 1 つは glue 属性の区切り文字が現れてしまうため、 &#62; が一つ余分に記述されてしまいます。 それを回避するために、ぬりかべブログ::カテゴリアーカイブのパンくずリストを参考にして、 <MTHasParentCategory> &#62;</MTHasParentCategory> とし、親カテゴリがあれば ( = トップレベルカテゴリでなければ ) &#62; を記述するようにしています。

カテゴリアーカイブのパンくずリスト - ol 要素版

Web Standards with MT ver.3.2 Strict > information > download 前項のカテゴリアーカイブのパンくずリストと考え方は同じです。

<ol id="hierarchical-menu">
  <li><a href="<$MTBlogURL$>" title="ホーム"><$MTBlogName encode_html="1" remove_html="1"$></a></li>
  <MTParentCategories glue="" exclude_current="1">
    <MTIfNonZero tag="MTCategoryCount">
      <li><a href="<$MTCategoryArchiveLink$>"<MTIfNonEmpty tag="MTCategoryDescription"> title="<$MTCategoryDescription$>"</MTIfNonEmpty>><MTCategoryLabel></a></li>
      <MTElse>
        <li><MTCategoryLabel></li>
      </MTElse>
    </MTIfNonZero>
  </MTParentCategories>
  <li><$MTArchiveTitle$></li>
</ol>

こちらは直接区切り文字を記述しないため、 <MTHasParentCategory> &#62;</MTHasParentCategory> の指定はありません。

エントリアーカイブのパンくずリスト (1) - p 要素版

Web Standards with MT ver.3.2 Strict > 2005年10月 > ダウンロードページ エントリアーカイブの標準の出力フォーマットは yyyy/mm/entry_basename.html ですので、パンくずリストは「ホーム > 月別アーカイブ > エントリアーカイブ」という形になります。

<p id="hierarchical-menu">
<a href="<$MTBlogURL$>" title="ホーム"><$MTBlogName encode_html="1" remove_html="1"$></a> &#62;
<a href="<$MTBlogArchiveURL$><$MTArchiveDate format="%Y/%m/"$>"><$MTArchiveDate format="%Y年%m月"$></a> &#62;
<$MTEntryTitle$>
</p>

エントリアーカイブのパンくずリスト (1) - ol 要素版

Web Standards with MT ver.3.2 Strict > 2005年10月 > ダウンロードページ 前項のエントリアーカイブのパンくずリスト (1) と考え方は同じです。

<ol id="hierarchical-menu">
  <li><a href="<$MTBlogURL$>" title="ホーム"><$MTBlogName encode_html="1" remove_html="1"$></a></li>
  <li><a href="<$MTBlogArchiveURL$><$MTArchiveDate format="%Y/%m/"$>"><$MTArchiveDate format="%Y年%m月"$></a></li>
  <li><$MTEntryTitle$></li>
</ol>

エントリアーカイブのパンくずリスト (2) - p 要素版

Web Standards with MT ver.3.2 Strict > information > download > ダウンロードページ エントリアーカイブの出力フォーマットは、標準の yyyy/mm/entry_basename.html 以外にも選択肢が多くあります。 ここではもう一つ、 category/sub_category/entry_basename.html の形式を考えてみます。 パンくずリストは「ホーム > カテゴリアーカイブ > エントリアーカイブ」という形になります。

<p id="hierarchical-menu">
<a href="<$MTBlogURL$>" title="ホーム"><$MTBlogName encode_html="1" remove_html="1"$></a><MTHasParentCategory> &#62;</MTHasParentCategory>
<MTParentCategories glue=" &#62; ">
  <MTIfNonZero tag="MTCategoryCount">
    <a href="<$MTCategoryArchiveLink$>"<MTIfNonEmpty tag="MTCategoryDescription"> title="<$MTCategoryDescription$>"</MTIfNonEmpty>><MTCategoryLabel></a>
    <MTElse>
      <MTCategoryLabel>
    </MTElse>
  </MTIfNonZero>
</MTParentCategories>
&#62; <$MTEntryTitle$>
</p>

カテゴリアーカイブのパンくずリスト - p 要素版の最後にエントリアーカイブを付ける感じですね。 リンクを行わない文字列はエントリアーカイブになるため、 exclude_current="1" の指定は外しています。

エントリアーカイブのパンくずリスト (2) - ol 要素版

Web Standards with MT ver.3.2 Strict > information > download > ダウンロードページ 前項のエントリアーカイブのパンくずリスト (2) と考え方は同じです。

<ol id="hierarchical-menu">
  <li><a href="<$MTBlogURL$>" title="ホーム"><$MTBlogName encode_html="1" remove_html="1"$></a></li>
  <MTParentCategories glue="">
    <MTIfNonZero tag="MTCategoryCount">
      <li><a href="<$MTCategoryArchiveLink$>"<MTIfNonEmpty tag="MTCategoryDescription"> title="<$MTCategoryDescription$>"</MTIfNonEmpty>><MTCategoryLabel></a></li>
      <MTElse>
        <li><MTCategoryLabel></li>
      </MTElse>
    </MTIfNonZero>
  </MTParentCategories>
  <li><$MTEntryTitle$></li>
</ol>

こちらも同様にカテゴリアーカイブのパンくずリスト - ol 要素版の最後にエントリアーカイブを付ける感じですね。 リンクを行わない文字列はエントリアーカイブになるため、 exclude_current="1" の指定は外しています。

他にも色々

アーカイブの出力フォーマットは、用意されたものから選ぶだけでなく、自分でカスタマイズすることも可能です。 今回出した数々のソースはあくまで一例ですので、これらを参考に、ご自身の weblog に合わせたパンくずリストを作ってみてください。

Web Standards with MT ver.3.2 Strict には

Web Standards with MT ver.3.2 Strict で配布しているテンプレートには、それぞれのアーカイブテンプレートに、日付アーカイブのパンくずリスト - ol 要素版カテゴリアーカイブのパンくずリスト - ol 要素版エントリアーカイブのパンくずリスト (1) - ol 要素版を記述しています。

なお、 ver.1.00 では CSS による区切り文字表示の指定が不充分な点があるため、お手数ですが index_templates\styles-site.txt の 323-330 行 をパンくずリストの形で紹介した記述と置き換えるか、または ver.1.01 を改めてダウンロードしていただくようお願いします。

リプライ

7 件のリプライが送られています。 この記事に対するご意見やご質問、ご感想などありましたら個別記事ページの送信フォームからお送り下さい。

2006-02-01T13:51+09:00 - パンくずリストをつくる < うらかわのbloq

MovableType初心者なので、とりあえずパクってくるところから始まるわけだw...

2006-02-05T01:59+09:00 - パンくずリストをつくる < うらかわのbloq

MovableType初心者なので、とりあえずパクってくるところから始まるわけだw...

2006-05-31T18:45+09:00 - パンくずリストを構造化 < asamuzaK.jp

パンくずリストを構造化して出力する自己流テンプレート

2006-05-31T19:05+09:00 - パンくずリストを構造化 < asamuzaK.jp

パンくずリストを構造化して出力する自己流テンプレート

2006-06-01T10:40+09:00 - kazz

記事に加筆したときにうっかり2発目のトラバを送ってしまいました、すみません。 いつも大変参考にさせていただいています。

2006-06-07T00:13+09:00 - 真琴

2 個目のトラックバックは消去しました ( 対処だけ先にやって、レスが遅くなってすみません ) 。 単なる序列リストでパンくずリストを作るか、それとも kazz さんのように構造化してパンくずリストを作るか、どちらがより良いマークアップかまた後日考えてみたいと思います。もちろん、リストではなくパラグラフでマークアップするという選択肢もありますが。

2007-03-29T22:12+09:00 - パンくずリスト(MovableType 用) < WebRoom

『パンくずリスト』とは、今見ているページの階層を表示するナビゲーションです。 例えば【 Index...

リンク論などをつらつらと羅列してみる

記事データ

投稿者

望月真琴

投稿日時

2005-10-28T18:47+09:00

タグ
概要

14. に注意してください。何は無くとも 14. です。

リプライ

リプライはまだありません。

記事本文

あまり推敲をせずに書いたので、綿密に項目の突き合せをしないように !

  1. 14. に注意してください。多くのブラウザでは序列リストには番号が振られますので、その番号をよく見てください。序列リストの番号表示に対応していない環境の場合は、お手数ですが適宜数えてください。
  2. 以前に比べて hxxk.jp がリンクされることが増えて把握が困難になったり、知らないところで話題にされていることが多くなったりしたため、無断でリンクされることが嫌になってきました。よってリンクをされる方は、事前にトップページに設置しているゲストブックにその旨を書き込み、私の了承の返答があった場合のみリンクをするようにしてください。拒否の返答があった場合または返答なき場合はリンクをしないでください。
  3. リンクをクリックすると、その内容がブラウザ上に表示されるというのはある意味転載ですよね。ということは無断でリンクされるってことは無断転載されるということと等価ではないでしょうか。
  4. 検索エンジンでリンク許可を申請してくるところってありませんよね ?
  5. ご意見や質問があれば、コメント欄に書くか、ご自身のページに書かれてトラックバックを送ってください。それ以外は意見として認めません。
  6. hxxk.jp は Movable Type で作成している weblog です。時系列に沿って log を記録しているので、制作者の意図を充分に理解するために、記事目次から日付の古い順にご覧下さい。なお、現時点で 400 弱の記事があるのでガッツが必要。
  7. この部分は 7. になっているはずです。
  8. WWW および実社会には、以下のような定義や一般に知られているとされる常識があります。
    • WWW におけるリンクとは、 A relationship between two anchors , stored in the same or different database . と定義されており、そのアンカーの関係が無数に張り巡らされることによって WWW が成り立っていると言えます。アンカー同士の関係を示しているだけに過ぎず、転載とは全く異なるものです。
    • WWW では世界中のあらゆる所から見られる可能性があるものです。もし間違ったことを書いているページがあれば、それを指摘して間違いが拡散しないようにするというのは大事なことです。指摘と中傷は別モノ。
    • 本や新聞を必ず前書き・目次から、あるいは一面から読まなければならないという決まりはありません。途中のページから、あるいは最後のページをいきなり開いたら自動的に内容が抹消されるスパイ本が実用化されればともかく。あと子供の頃って新聞のテレビ欄の方が一面だと思っていませんでした ?
    • 大きな広場でパフォーマンスを披露しておいて、その広場に行きたい人が通行人や交番に「どこどこに行きたいのですが」と尋ね、「ああ、あそこはこういう行き方で……」と教えることや、あるいは広場の中やその近くに案内板を設置することを制限することはできません。喩え話しなので細かい点は違いますが、 WWW にページを公開すること、およびそこにリンクされることというのはそんな感じです。
    • 認証を行って特定の人だけに公開する技術や、会員制を取って会員のみに公開できるサービスがあるらしいですよ ?
  9. hxxk.jp は私がその都度調べたことや思ったことを記録するサイトです。新しい記事の方がより正確になっているとは思いますが、本のようにあらかじめ全ての筋道を立てて書いているわけではありません。 weblog 内に設置している検索機能やキーワード分類で必要な記事だけを探すのが COOL! COOL! COOL!
  10. hxxk.jp は特定のディレクトリ以外は robots.txt による内容の取得の制限は行っていません。検索エンジンやその他 Web サービスに拾われることで、同じようなことを考えていたり同じようなトラブルでつまづいていたりする人が見てくれる機会が増えますので。
  11. hxxk.jp はアクセス解析を行っており、どういったキーワードで検索してきたか、どのページからリンクが行われているかを定期的にチェックしています。
  12. はてなブックマークって自分のブックマークを公開して、そのブックマークにどういった感想を持ったか、自分なりにどういった要約をメモしたかを自ら曝け出すサービスです。どういったページをブックマークしているのか、およびそのブックマークの感想や要約をどう書いているのかを見ると、ある程度そのブックマーカの選球眼というか度量が見えて面白いですよね。被はてなブックマーク状況を新着順で知りたいという手法で、効率的にブックマーカ観察を行わせてもらっています。あとごく稀に 2ch やその他のいわゆる匿名掲示板で取り上げられていますが、リファラから辿れるものであれば拝見させていただいています。コメント欄やトラックバック以外でも貴重なご意見が出されるというのは作成者冥利に尽きます。
  13. トップページに設置しているゲストブックは、特定の記事に関連しない全般的な質問や、ちょっとした感想のために設置しています。
  14. このリストは後の方に書かれている内容を優先します。それぞれの項目を突き合わせて矛盾があるように見える場合は、後の方の内容を重視してください。
  15. 以上を踏まえてもう一度 1. からお読みください。ちなみにこの項は 15. になっているはずです。

リプライ

リプライはまだ送られていないか、管理者の承認待ち状態です。 この記事に対するご意見やご質問、ご感想などありましたら個別記事ページの送信フォームからお送り下さい。

補足情報

著作、講演、制作実績など