TopMovable Typeカスタマイズ検索 > 2008年12月
2008年12月 3日

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

December 3,2008 12:33 AM
Tag:[, , ]
Permalink

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

このカスタマイズは、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
ファイルのパスが誤っていたので修正しました。

Comments [7] | 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