Movable Type の検索結果テンプレートの俺リファレンスと、サンプルコード

http://hxxk.jp/2007/12/27/1915

記事データ

投稿者

真琴

投稿日時

2007-12-27T19:15+09:00

タグ
概要

Movable Type のテンプレートタグリファレンスのサンプルコードはシンプルすぎるので、自分用のメモとして書いたサンプルコードを記録しておきます。サンプルの元ネタは 3ping.org というかむしろ mt.Vicuna 。

リプライ

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

記事本文

Movable Type のテンプレートタグリファレンスのサンプルコード

Movable Type のテンプレートタグリファレンスは、 Movable Type 4.0 のリリースと共にリニューアルされて、テンプレートタグの機能ごとのタグ分類が導入されるようになっています。

その反面、そのテンプレートタグをどのように使うかのサンプルは非常にシンプルに書かれており、テンプレートタグの使い方が理解しづらくなって、テンプレートタグをうまく活用できる機会を逃してしまいそうです。 例えば、 MTBlogResultHeaderMTSearchResults 内で使用するテンプレートタグなのですが、

<MTBlogResultHeader>
  <!-- do something -->
</MTBlogResultHeader>

というサンプルコードからはそれが読み取れません。 そこで、今回は検索結果のテンプレートに用いるテンプレートタグについて、自分用のメモとして書いたサンプルコードを記録しておきます。

MTSearchResults ブロックタグ - 実行した検索の結果

<MTSearchResults></MTSearchResults> で囲むことにより、検索条件に合致した内容を、合致数だけ繰り返して全て出力します。 このブロックタグ内で MTBlogResultHeaderMTBlogResultFooter を用いることにより、検索結果の記事数の表示や検索結果に対する見出しなど、合致数に関わらず 1 回だけ表示したい内容を出力することも可能です。

例えば、検索キーワードに該当した記事を dl, dt, dd, dt, dd, dt, dd... のように、 1 つの定義リスト内で羅列したい場合には次のように記述します。

<MTSearchResults>
  <MTBlogResultHeader><dl class="headline"></MTBlogResultHeader>
    <dt><a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a><span class="date"> - Posted date: <$MTEntryDate format="%x %X"$></span></dt>
    <dd>
      <ul>
        <li class="textBody"><$MTEntryExcerpt$></li>
        <li class="author">Posted by: <span class="name"><$MTEntryAuthorDisplayName$></span></li>
        <li class="category">Category: <MTEntryCategories glue=" | "><a href="<$MTCategoryArchiveLink$>" title="<$MTCategoryLabel$> Index"><$MTCategoryLabel$></a><li>
        <li class="tag">Tag: <MTEntryTags glue=", "><a href="<$MTTagSearchLink$>" rel="nofollow"><$MTTagName$></a></li>
      </ul>
    </dd>
  <MTBlogResultFooter></dl></MTBlogResultFooter>
</MTSearchResults>

この例で MTBlogResultHeaderMTBlogResultFooter を用いなければ、 dl, dt, dd, dl, dt, dd... のように、検索条件に合致した数の分だけ定義リストが出力されるでしょう。

MTNoSearchResults ブロックタグ - 検索条件に合致した結果が得られなかった

<MTNoSearchResults></MTNoSearchResults> で囲むことにより、検索条件に合致する結果が全く無かった場合の内容を出力します。 MTSearchResults と違い、繰り返しはありません。

例えば、検索キーワードに該当した記事が無かったことを示したい場合には次のように記述します。

<MTNoSearchResults>
  <div class="section entry">
    <h2>検索結果</h2>
      <div class="textBody">
        <p><em><$MTSearchString$></em>というキーワードを含む記事は見つかりませんでした。次項のヒントを参考にして、検索キーワードを変えてもう一度検索してみてください。</p>
        <ul>
          <li>キーワードに誤字や脱字がありませんか ?</li>
          <li>キーワードの意味はそのままで、表現や言い回しを変えてみてください。</li>
          <li>専門的なキーワードだったり、長い文字列のキーワードだったりした場合は、より一般的で短いキーワードにしてください。</li>
          <li>キーワードを複数指定している場合は、キーワードの数を減らしてみてください。</li>
        </ul>
      </div>
  </div>
</MTNoSearchResults>

MTNoSearch ブロックタグ - 検索が実行されていない

検索フォームに、キーワードを入力しないまま検索を実行した場合のように、検索条件が指定されていない場合の内容を出力します。 このブロックタグも MTSearchResults と違い、繰り返しはありません。

例えば、検索キーワードが入力されていなかったことを示したい場合には次のように記述します。

<MTNoSearch>
  <div class="section entry">
    <h2>Error</h2>
      <div class="textBody">
        <p>検索キーワードが入力されていません。</p>
      </div>
   </div>
</MTNoSearch>

また、 MTElse と組み合わせることで、「合致する・合致しないに関わらず、何かしらの検索条件が与えられている」条件での内容を表示することも可能です。

<MTNoSearch>
  <MTElse>
    <MTIfStraightSearch>
      <p>今回入力した<em><$MTSearchString$></em>というキーワードを含む記事を今後もチェックしたい場合、<a href="<$MTCGIPath$><$MTSearchScript$>?search=<$MTSearchString encode_url="1"$>&#38;Template=feed&#38;IncludeBlogs=<$MTSearchIncludeBlogs$>"><img src="<$MTStaticWebPath$>images/status_icons/feed.gif" width="9" height="9" alt="" />&#34;<$MTSearchString$>&#34;を含む記事の Feed</a> を Feed リーダに登録することで、チェック漏れの可能性を低くできます。</p>
    </MTIfStraightSearch>
    <MTIfTagSearch>
      <p><em><$MTSearchString$></em>というタグが設定された記事を今後もチェックしたい場合、<a href="<$MTCGIPath$><$MTSearchScript$>?tag=<$MTSearchString encode_url="1"$>&#38;Template=feed&#38;IncludeBlogs=<$MTSearchIncludeBlogs$>"><img src="<$MTStaticWebPath$>images/status_icons/feed.gif" width="9" height="9" alt="" />&#34;<$MTSearchString$>&#34;というタグが設定された記事の Feed</a> を Feed リーダに登録することで、チェック漏れの可能性を低くできます。</p>
    </MTIfStraightSearch>
  </MTElse>
</MTNoSearch>

MTIfStraightSearch コンディショナルタグ - ブログ記事の検索の場合

検索の種類が、サイト内検索の場合の内容を出力します。

例えば、サイト内検索の条件に合致した記事数を表示したい場合には次のように記述します。

<MTSearchResults>
  <MTBlogResultHeader>
    <MTIfStraightSearch>
      <ul class="info">
        <li>Search:<em><$MTSearchString$></em></li>
        <li><em><span class="count"><$MTSearchResultCount$></span></em> Hits</li>
      </ul>
    </MTIfStraightSearch>
  </MTBlogResultHeader>
</MTSearchResults>

または、 MTElse を用いて「タグ検索ではない」という条件を指定して次のように記述することもできます。 これはブログ記事の検索とタグ検索の場合の記述を分ける時に、 MTIfStraightSearchMTIfTagSearch の両方で If という名前を含むテンプレートタグを用いるより、 If-Else で記述したいという場合に用いると良いでしょう。

<MTSearchResults>
  <MTBlogResultHeader>
    <MTIfTagSearch>
      <MTElse>
        <ul class="info">
          <li>Search:<em><$MTSearchString$></em></li>
          <li><em><span class="count"><$MTSearchResultCount$></span></em> Hits</li>
        </ul>全文検索結果
      </MTElse>
    </MTIfTagSearch>
  </MTBlogResultHeader>
</MTSearchResults>

MTIfTagSearch コンディショナルタグ - タグ検索の場合

検索の種類が、ブログ記事・タグ検索の場合の内容を出力します。

例えば、特定のタグが設定された記事数を表示したい場合には次のように記述します。

<MTSearchResults>
  <MTBlogResultHeader>
    <MTIfTagSearch>
      <ul class="info">
        <li>Tag:<em><$MTSearchString$></em></li>
        <li><em><span class="count"><$MTSearchResultCount$></span></em> Hits</li>
      </ul>
    </MTITagSearch>
  </MTBlogResultHeader>
</MTSearchResults>

または、 MTElse を用いて「ブログ記事の検索ではない」という条件を指定して次のように記述することもできます。 これはブログ記事の検索とタグ検索の場合の記述を分ける時に、 MTIfStraightSearchMTIfTagSearch の両方で If という名前を含むテンプレートタグを用いるより、 If-Else で記述したいという場合に用いると良いでしょう。

<MTSearchResults>
  <MTBlogResultHeader>
    <MTIfStraightSearch>
      <MTElse>
        <ul class="info">
          <li>Tag:<em><$MTSearchString$></em></li>
          <li><em><span class="count"><$MTSearchResultCount$></span></em> Hits</li>
        </ul>
      </MTElse>
    </MTIfStraightSearch>
  </MTBlogResultHeader>
</MTSearchResults>

サンプルコードの元ネタは 3ping.org

今回のサンプルコードは、 MTNoSearchMTElse を組み合わせたものを除き、 3ping.org の検索ページを元に作ってみました。

何故 hxxk.jp の検索ページを使わなかったかというと、最終的に出力された XHTML をヒントに、元々のテンプレートがどのように書かれているかを推測するのもいい勉強になるかなあ、と思いまして。 今回のサンプルコードと 3ping.org で実際に使われているテンプレート、どれくらいの違いがあるでしょうか ?

......ということで 3ping.org のうーたんに採点をお願いしようと思いましたが、よく考えたら Vicuna - Movable Type テンプレートをダウンロードしたら正解のソースが容易に入手できるんじゃないでしょうかもしかして。

リプライ

3 件のリプライが送られています。

2007-12-27T19:36+09:00 - wu

( ̄o ̄;)!!! まこちが動き出したことと、そこで自分の名前を見た驚きをダブルで味わった!!

2008-01-07T22:30+09:00 - 望月真琴

2008 年になったからまた少しストップするよ!

2008-01-07T22:37+09:00 - wu

焼酎ジャンケンにまけてくやしい!

この記事に対するご意見やご質問、ご感想などありましたらこのフォームに簡潔に記入して下さい。 簡潔に記入できない場合や、関連記事にてご意見をお寄せいただく場合は、ご自身の weblog にて記事を書かれた上で あてにトラックバックとして送信してください。

記入フォーム

補足情報

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