「flexibleSearch.js - ページ送りに対応した高速 Ajax 検索が可能な jQuery プラグイン」の検索対象となる JSON を、Movable Type で出力する方法を紹介します。...
「flexibleSearch.js - ページ送りに対応した高速 Ajax 検索が可能な jQuery プラグイン」の検索対象となる JSON を、Movable Type で出力する方法を紹介します。
MT でインデックステンプレートを作成します。作成するテンプレートの情報は次のようにします。
テンプレートの内容は、いくつかパターンを用意しました。
remove_html="1"
HTMLタグは検索には不要なので削除しておきます。
regex_replace="/\n|\t/g",""
これは、改行やタブを残しておくと、出力するときに \n や \t に変換されてしまい、無駄にファイルサイズが大きくなってしまうので、あらかじめ削除しておくためです。
to_json="1"
これを指定すると、ハッシュ(連想配列)をきれいに JSON の形で出力してくれます。encode_js="1"だとうまくいきませんでしたので、この方法がオススメです。
なお、実際のテンプレートは、ファイルサイズを少しでも小さくするために改行を入れない方が良いと思います。
{"item":[
<mt:entries lastn="0">
<mt:setvarBlock name="item{title}"><mt:entryTitle></mt:setvarBlock>
<mt:setvarBlock name="item{url}"><mt:entryPermalink></mt:setvarBlock>
<mt:setvarBlock name="item{tag}">,<mt:entryTags glue=","><mt:tagName></mt:entryTags>,</mt:setvarBlock>
<mt:setvarBlock name="item{body}"><mt:entryBody remove_html="1" regex_replace="/\n|\t/g",""></mt:setvarBlock>
<mt:setvarBlock name="item{more}"><mt:entryMore remove_html="1" regex_replace="/\n|\t/g",""></mt:setvarBlock>
<mt:var name="item" to_json="1"><mt:unless __last__>,</mt:unless __last__>
</mt:entries>
]}
{"item":[
<mt:entries lastn="0">
<mt:setvarBlock name="item{title}"><mt:entryTitle></mt:setvarBlock>
<mt:setvarBlock name="item{url}"><mt:entryPermalink></mt:setvarBlock>
<mt:setvarBlock name="item{tag}">,<mt:entryTags glue=","><mt:tagName></mt:entryTags>,</mt:setvarBlock>
<mt:setvarBlock name="item{body}"><mt:entryBody remove_html="1" regex_replace="/\n|\t/g",""></mt:setvarBlock>
<mt:setvarBlock name="item{more}"><mt:entryMore remove_html="1" regex_replace="/\n|\t/g",""></mt:setvarBlock>
<mt:var name="item" to_json="1"><mt:if tag="blogPageCount">,</mt:if>
</mt:entries>
<mt:pages lastn="0">
<mt:setvarBlock name="item{title}"><mt:pageTitle></mt:setvarBlock>
<mt:setvarBlock name="item{url}"><mt:pagePermalink></mt:setvarBlock>
<mt:setvarBlock name="item{tag}">,<mt:pageTags glue=","><mt:tagName></mt:pageTags>,</mt:setvarBlock>
<mt:setvarBlock name="item{body}"><mt:pageBody remove_html="1" regex_replace="/\n|\t/g",""></mt:setvarBlock>
<mt:setvarBlock name="item{more}"><mt:pageMore remove_html="1" regex_replace="/\n|\t/g",""></mt:setvarBlock>
<mt:var name="item" to_json="1"><mt:unless __last__>,</mt:unless __last__>
</mt:pages>
]}
<mt:entries lastn="0">
<mt:entrydate format="%Y%m%d%H%M%S" setvar="date">
<mt:setvarBlock name="item{title}"><mt:entryTitle></mt:setvarBlock>
<mt:setvarBlock name="item{url}"><mt:entryPermalink></mt:setvarBlock>
<mt:setvarBlock name="item{tag}">,<mt:entryTags glue=","><mt:tagName></mt:entryTags>,</mt:setvarBlock>
<mt:setvarBlock name="item{body}"><mt:entryBody remove_html="1" regex_replace="/\n|\t/g",""></mt:setvarBlock>
<mt:setvarBlock name="item{more}"><mt:entryMore remove_html="1" regex_replace="/\n|\t/g",""></mt:setvarBlock>
<mt:setvarBlock name="items" key="$date"><mt:var name="item" to_json="1"></mt:setvarBlock>
</mt:entries>
<mt:pages lastn="0">
<mt:pagedate format="%Y%m%d%H%M%S" setvar="date">
<mt:setvarBlock name="item{title}"><mt:pageTitle></mt:setvarBlock>
<mt:setvarBlock name="item{url}"><mt:pagePermalink></mt:setvarBlock>
<mt:setvarBlock name="item{tag}">,<mt:pageTags glue=","><mt:tagName></mt:pageTags>,</mt:setvarBlock>
<mt:setvarBlock name="item{body}"><mt:pageBody remove_html="1" regex_replace="/\n|\t/g",""></mt:setvarBlock>
<mt:setvarBlock name="item{more}"><mt:pageMore remove_html="1" regex_replace="/\n|\t/g",""></mt:setvarBlock>
<mt:setvarBlock name="items" key="$date"><mt:var name="item" to_json="1"></mt:setvarBlock>
</mt:pages>
{"item":[
<mt:loop name="items" glue="," sort_by="key numeric reverse"><mt:var __value__></mt:loop>
]}
カスタムフィールドを入れたい場合も、普通のフィールドと同様にして追加してください。item{キー}のキー部分は、カスタムフィールドの basename にしておくと良いでしょう。
以上です。