ウェブページに親子関係を持たせて子ページを親ページに読み込ませる

  • 投稿者:
  • カテゴリ:
このエントリーをはてなブックマークに追加

「同じフォルダー内のウェブページを一覧表示したい」

MovableType.net でサイトを構築するときに、同一フォルダ内のウェブページを1ページで一覧表示したい場合は、一つの特定のウェブページに複数のウェブページを読み込ませ親ページとし、読み込んだページを子ページとして本文などをパーツとして一覧表示させるという形をとることができると思います。

しかし、パーツとして読み込ませた子ページの個別ページがいらない場合でも、個別ページは生成されてしまいます。

そうするとページとして必要のない子ページについても自動生成される Sitemap.xml にも含まれてしまうなど、アクセスされてしまう可能性があります。

子ページにアクセスされるのは仕方ないとして(個別にパスワード認証などつけられない)、アクセスされたときにどうするか。

metaタグのリフレッシュや JavaScript で特定のページに飛ばすというのが無難なのかなと...。ついてでにとりあえず検索エンジンのクローラーも拒否できたら...

これらを実現するのに思い浮かぶのはカスタムフィールドを使って親ページか子ページかを判別して、書き出す HTML を出し分けるでしょうか。

親ページか子ページかの判別には他に下記のようなものも考えられると思いますが...
  • カスタムフィールドのチェックボックス(上記)
  • 下層フォルダ内のページなのか、否か
  • ファイル名に「part」を含んでいるなどパーツページの印となるような記述

子ページの場合にチェックを入れるカスタムフィールドのチェックボックスを使って条件分岐する場合は下記のような感じかな〜。

<mt:Unless tag="customfieldvalue" identifier="child_page">
<!-- 親ページのテンプレート -->
 <!DOCTYPE html>
 <html>
 <meta charset="<$mt:PublishCharset$>">
 <title><$mt:PageTitle encode_html="1"$></title>
 <head>
 </head>
 <body>

 <mt:FolderLabel setvar="foldername">

 <mt:Pages>
 <mt:If tag="FolderLabel" eq="$foldername">

 <dl>
 <dt><h2><$mt:PageTitle encode_html="1"$></h2></dt>
 <dd><p><$mt:PageBody$></p><dd>
 </dl>
 
 </mt:If>
 </mt:Pages>
 
 </body>
 </html>

<mt:Else>

<!-- 子ページのテンプレート -->
 <!DOCTYPE html>
 <html>
 <head>
//metaタグでクローラーの拒否
<meta name="robots" content="noindex, nofollow">
//metaタグ refrash(またはJS)で親ページやトップページにリダイレクト
<meta http-equiv="refresh" content="10; URL=https://ドメイン/">
 </head>
 <body>
  コンテンツは書き出さず、白紙のページ
 </body>
 </html>

</mt:Unless>

2020年のアドベントカレンダーに書いたのが同じような感じかな。
https://www.drivemenuts.com/blog/archives/2020/12/something-like-folder-archives.html

あとはパーツ登録用の専用ブログを用意してしまうか。まぁ、ブログ数の上限に引っかかっていない場合となるけど...。

このエントリーをはてなブックマークに追加