45式::雑記
45式::雑記は、日々の事を記してないから日記ではなく雑記です。

MT4.2でも検索オプション(CaseSearchやRegexSearch等)は使える

コメント
0件
トラックバック
0件

きっかけ

gihyo.jpの記事によれば、MT4.2では仕様変更により検索オプションが使用できなくなったらしい。

くれま先輩:原因が分らなかったから,シックス・アパートさんにお尋ねしたところ,「Movable Type 4.2 から,サイト内検索に関する仕様が大幅に変更されたので,CaseSearch,RegexSearch,SearchCutoff,SearchElementのパラメータは利用できなくなりました」というお返事をいただいたの。

この記事をきっかけに少し調べてみた所、MT4.2でも検索オプションが使えるとわかりました。

MT4.2で検索オプションが使えない理由

MT4.2で検索オプションが使えなくなったのは、MT4.15で検索機能が大幅に変更されたからです。
この時の変更で「検索ページの分割」や「作者とカテゴリによるフィルタリング」機能が追加されましたが、逆にそれまで使えた検索オプションは削除されてしまいました。
それと、検索の処理速度も上がりました。

そんなわけで、MT4.15以降で検索オプションが使えないのは当然の事でした。

検索オプションを有効にする

前項で検索オプションは削除されたと言いましたが、悲観してはいけません。
MT4.14までの検索機能はMT4.15以降にも同梱されているのです。
そしてちょっとした記述の変更で、旧来と現行の検索機能を入れ替えて使う事ができるのです。

記述の変更を行うのは検索スクリプト、リネームしていなければmt-search.cgiという名前のファイルがmt.cgiやmt-config.cgiと同じ場所にあるはずです。
そのファイル内の一行を以下のように変更します。

use MT::Bootstrap App => 'MT::App::Search::Legacy';

mt-search.cgiの内容と見比べてもらえばわかると思いますが、::Legacyと書き加えただけです。
これで検索オプションが動作するようになります。

MT::App::Search::Legacyとは

MT4.2でも検索オプションが使えると気づいたのは、デフォルトのテンプレートセット内から以下のようなコメント文を見つけたからです。

use these options only with MT::App::Search::Legacy

短い内容だったので英語が苦手な私でも辛うじて読み取れました。
このMT::App::Search::Legacyこと、Legacy.pmファイルこそがMT4.14までに搭載されていた検索機能なのです。

検索フォームのカスタマイズ

検索オプションを有効にしても、検索フォームがそのままでは意味がありません。
検索オプションには以下のような種類があります。

その中から「大文字と小文字の区別」と「正規表現」を例に紹介します。

<label for="CaseSearch"><input type="checkbox" id="CaseSearch" name="CaseSearch" /> 大文字/小文字を区別する</label>
<label for="RegexSearch"><input type="checkbox" id="RegexSearch" name="RegexSearch" /> 正規表現</label>

この時、<input type="checkbox"という部分は一字一句そのままでname属性は必須です。
そのように記述しないと検索するたびにチェックが外れてしまいます。

検索オプションのHTMLは特定の形で記述されていないと、表示する際にオプションの選択内容を維持できません。

記述内容の規則が知りたい場合は/lib/MT/App/Search/Legacy.pm内の660行目以降で知る事ができますが、Perlの知識が必要です。
Perlの知識がない場合は、MovableType.jp内のサンプルがその規則にそっているので参考にすると良いでしょう。

使用上の注意

旧来と現行の検索機能を交換しているので、検索オプションとMT4.15から追加された機能「作者とカテゴリによるフィルタリング」「検索ページの分割」を同時に利用する事はできません

検索スクリプトを複数用意すれば検索機能を使い分ける事はできますが、それでも同時に使う事はできません。
MTの基本機能では不可能という事なので、別の方法でなら可能かもしれません。

コメント[0]

コメントはまだありません。

コメント投稿フォーム

コメントを投稿するにはJavaScirptが必要です。ブラウザのJavaScriptを有効にしてください。

コメント投稿フォーム

トラックバック[0]

トラックバックはまだありません。

カテゴリ
アーカイブ
ヘルプ
Feed

フィードとは