Movable Type 検索の全角スペースを半角スペースと同じ振る舞いにする

Movable Type 検索の全角スペースを半角スペースと同じ振る舞いにする

Posted at March 22,2007 1:13 AM
Tag:[Customize, MovableType, Search]

Movable Type の検索フォームで検索文字列を複数入力して、区切り文字に全角スペース(空白)を使用すると、全角スペースは検索文字として認識され、期待しない結果(おそらく検索結果として何もヒットしない)になってしまいます。
この全角スペースを半角スペースと同じ扱いにするためのカスタマイズを紹介します。

1.IME で全角入力中に半角スペースを入力する

本題からそれますが、Windows の MS-IME で全角文字入力中に半角スペースを挿入したい場合は、「Shift キー + Space キー」で半角スペースを入力することができます。また、IME のプロパティを下記のように変更することで、全角文字入力中に常に半角スペースを入力することができます。

IMEプロパティ画面

2.カスタマイズ

2.1 Search.pm の修正

まず、lib/MT/Search.pm に下記のパッチを適用してください。

--- lib/MT/Search.pm.bak        Mon Jan 15 15:46:31 2007
+++ lib/MT/Search.pm    Wed Mar 21 22:55:15 2007
@@ -116,6 +116,8 @@
     ## Set search_string (for display only)
     if ($app->{searchparam}{Type} eq 'straight') {
         $app->{search_string} = $q->param('search') || '';
+        my $delimiter = $app->translate("delimiter");
+        $app->{search_string} =~ s/$delimiter/ /g;
     } elsif ($app->{searchparam}{Type} eq 'tag') {
         $app->{search_string} = $q->param('search') || '';
     }

パッチが分からない方は MT/App/Search.pm を任意のエディタで開き、下記の青色の2行を追加してください。

    :
   (略)
    :
sub init_request{
    my $app = shift;
    $app->SUPER::init_request(@_);
 
    foreach (qw(searchparam templates search_string results
                user __have_throttle)) {
        delete $app->{$_} if exists $app->{$_}
    }
    :
   (略)
    :
    ## Set search_string (for display only)
    if ($app->{searchparam}{Type} eq 'straight') {
        $app->{search_string} = $q->param('search') || '';
        my $delimiter = $app->translate("delimiter");
        $app->{search_string} =~ s/$delimiter/ /g;
    } elsif ($app->{searchparam}{Type} eq 'tag') {
        $app->{search_string} = $q->param('search') || '';
    }
 
    ## Get login information if user is logged in (via cookie).
    ## If no login cookie, this fails silently, and that's fine.
    ($app->{user}) = $app->login;
}
    :
   (略)
    :

2.2 ja.pm の修正

次に、lib/MT/L10N/ja.pm を任意のエディタで開き、下記の1行を追加してください。

'delimiter' => ' ',

追加する場所は、似たような記述の近辺であればどこでも構いませんが、とりあえず下から3行目にいれましょう。

    :
   (略)
    :
    'scheduled' => '指定日',
    'No entries could be found.' => 'エントリーは見つかりません。',
    'delimiter' => ' ',
);
1;

お分かりの通り、検索フォームのクエリーから全角文字を半角文字に直しているだけです。もう少しエレガントな方法がありましたら情報お待ちしております。

関連記事
トラックバックURL


コメント

yujiro さん、いつもお世話になります。
4.22 の場合は、どのように修正したらいいでしょうか?
どうぞよろしくお願いいたします。

[1] Posted by s.fujino : October 19, 2008 12:50 PM

>s.fujinoさん
こんばんは。
ご質問の件ですが、ご要望事項として承りました。
うまくカスタマイズできればエントリーしたいと思います。
それではよろしくお願い致します。

[2] Posted by yujiro logo : October 25, 2008 2:26 AM
コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)