Movable Type 検索の全角スペースを半角スペースと同じ振る舞いにする(MT4版)
Movable Type 4の検索フォームで検索文字列を複数入力し、区切り文字に全角スペース(空白)を使用すると、全角スペースは検索文字として認識され、期待しない結果(おそらく検索結果として何もヒットしない)になってしまいます。
この全角スペースを半角スペースと同じ扱いにするためのカスタマイズを紹介します。
このカスタマイズは、Movable Type 3.x用にエントリーした「Movable Type 検索の全角スペースを半角スペースと同じ振る舞いにする」を、Movable Type 4 用に調べなおしたものです。
ただし4.22が最新版の記事のため、4.3以降では適用されない可能性があります。
1.Search.pm の修正
Movable Type 4 では、~4.1x と 4.2x で修正方法が異なります。ご利用のバージョンを確認して1.1項または1.2項のいずれかを適用してください。
1.1 MT4.0x/MT4.1x の場合
まず、lib/MT/App/Search.pm
に下記のパッチを適用してください。
--- lib/MT/App/Search.pm.bak Tue Dec 02 23:56:46 2008
+++ lib/MT/App/Search.pm Tue Dec 02 23:59:17 2008
@@ -149,6 +149,10 @@
|| ( $app->{searchparam}{Type} eq 'tag' ) ) {
if ($q->param('search')) {
$app->{search_string} = $q->param('search');
+ if (($app->{searchparam}{Type} eq 'straight')) {
+ my $delimiter = $app->translate("delimiter");
+ $app->{search_string} =~ s/$delimiter/ /g;
+ }
$app->{search_string_decoded} = MT::I18N::decode(
$app->config->PublishCharset,
$app->{search_string}
パッチが分からない方は lib/MT/App/Search.pm
を任意のエディタで開き、下記の青色の4行を追加してください。
...前略...
sub init_request{
my $app = shift;
$app->SUPER::init_request(@_);
...中略...
## Set search_string (for display only)
if ( ( $app->{searchparam}{Type} eq 'straight' )
|| ( $app->{searchparam}{Type} eq 'tag' ) ) {
if ($q->param('search')) {
$app->{search_string} = $q->param('search');
if (($app->{searchparam}{Type} eq 'straight')) {
my $delimiter = $app->translate("delimiter");
$app->{search_string} =~ s/$delimiter/ /g;
}
$app->{search_string_decoded} = MT::I18N::decode(
$app->config->PublishCharset,
$app->{search_string}
);
} else {
$app->{search_string} = $app->{search_string_decoded} = q();
}
}
...後略...
1.2 MT4.2x の場合
まず、lib/MT/App/Search.pm
に下記のパッチを適用してください。
--- lib/MT/App/Search.pm.bak Tue Dec 02 23:51:51 2008
+++ lib/MT/App/Search.pm Tue Dec 02 23:52:23 2008
@@ -347,6 +347,8 @@
my $search_string = $q->param('searchTerms') || $q->param('search')
or return $app->errtrans('No search term was specified.');
$app->{search_string} = $search_string;
+ my $delimiter = $app->translate("delimiter");
+ $app->{search_string} =~ s/$delimiter/ /g;
my $offset = $q->param('startIndex') || $q->param('offset') || 0;
return $app->errtrans( 'Invalid value: [_1]', encode_html($offset) )
if $offset && $offset !~ /^\d+$/;
パッチが分からない方は lib/MT/App/Search.pm
を任意のエディタで開き、下記の青色の2行を追加してください。
...前略...
sub search_terms {
my $app = shift;
my $q = $app->param;
my $search_string = $q->param('searchTerms') || $q->param('search')
or return $app->errtrans('No search term was specified.');
$app->{search_string} = $search_string;
my $delimiter = $app->translate("delimiter");
$app->{search_string} =~ s/$delimiter/ /g;
my $offset = $q->param('startIndex') || $q->param('offset') || 0;
...後略...
2.ja.pm の修正
lib/MT/L10N/ja.pm
を任意のエディタで開き、下記の1行を追加してください。
'delimiter' => ' ',
追加する場所は、似たような記述の近辺であればどこでも構いませんが、とりあえず下から4行目にいれましょう。
...前略...
'Invalid blog_id' => '不正なブログID',
'Clone Blog' => 'ブログの複製',
'delimiter' => ' ',
);
1;
お分かりの通り、検索フォームのクエリーから全角文字を半角文字に直しているだけです。もう少しエレガントな方法がありましたら情報お待ちしております。
2009.10.03
ファイルのパスが誤っていたので修正しました。
- Movable Type検索でURL改ざんによるブログ検索をできないようにする方法
- Movable Typeの検索オプション徹底解説
- Movable Type 5.1の検索で「blog_idパラメータが不正です。」となる不具合の対処
- Movable Type 5.1の検索で検索結果テンプレートを指定する方法
- Movabel Type の検索結果フィードを利用する
- Movable Type検索結果のブログ記事タイトルからアーカイブページへリンクする方法
- Movable Type で複数ブログを検索する
- タグ検索を絞り込む(その2:カスタマイズ)
- タグ検索を絞り込む(その1)
- Movable Type 4.2 検索結果ページのカスタマイズ:ページナビゲーションをプルダウンメニューにする
- Movable Type 4.2 検索結果ページのカスタマイズ:ナビゲーションを検索結果の上下に表示する
- Movable Type 4.2 検索結果ページのカスタマイズ:検索結果が1ページだけのときに「1」という表示をなくす
- Movable Type 4.2 検索結果ページのカスタマイズ:検索結果の見出しに(現在のページ/総ページ数)を表示する
- Movable Type 4.2 検索結果ページのカスタマイズ:1ページに表示する件数を変更する
- システムテンプレートとその他のテンプレートを振り分ける
yujiro さん、4.22でさっそく試してみました。
どうもありがとうございました。
yujiroさん、こんばんは。
4.23でもOKでした。
(もう一晩待てばよかった :-)
>s.fujinoさん
こんばんは。
4.23でのご確認&ご連絡ありがとうございました。
ちょっとタイミングが良くなかったですね(笑)。
MT4.261ではパスが
/mt/lib/MT/App/Search.pmとなっておりました。
成功はしたのですが、システムメニューの「全般」「ユーザー」が
エラーが発生しました。
Can't locate object method "new" via package "MT::L10N::ja_bk"
となりました。
回避策はありますか?
>kazuさん
こんにちは。
パスについては記載が誤っていたので修正致しました。ご指摘ありがとうございます。
後半のご質問の件につきましては、エラー内容より「ja_bk.pm」というファイルを呼び出しているので、おそらく修正前のバックアップとして ja_bk.pm というファイルを作り、同じディレクトリに置かれたのがエラーの原因と思われます。
ja_xx.pm のファイルを置くと、ja.pm より優先して読み込まれてしまうため、バックアップのファイル名を ja.pm_bk など、拡張子を .pm 以外のものに変更すればエラーを回避できると思います。
それではよろしくお願い致します。
yujiroさん
ありがとうございます。
無事回避できました。
エラーメッセージをよく読まないとダメですね・・・。
初歩的ミスですいません・・・。
>kazuさん
こんにちは。
ご連絡ありがとうございました。
無事に直ったようで良かったです。
ではでは!