TopMovable Typeカスタマイズ検索 > 2007年3月
2007年3月22日

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

March 22,2007 1:13 AM
Tag:[, , ]
Permalink

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;

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

Comments [2] | Trackbacks [0]
Now loading...
ギターに入った猫
掲載広告募集
Styles
Font Size
Default
For defective color vision
Gray Scale
RGB Color
Search this site

このブログをメールで購読する by:FeedBurner

AMN
Categories
Monthly Archives
2020年
2019年
2018年
2017年
2016年
2015年
2014年
2013年
2012年
2011年
2010年
2009年
2008年
2007年
2006年
2005年
2004年
2003年
BlogPeople
Syndicate this site
FeedBurner(RSS1.0/RSS2.0/Atom)
Counter
これまでのアクセス
Powered by
Movable Type 6.0.3