TopMovable Typeカスタマイズ検索 > Movable Type 検索の全角スペースを半角スペースと同じ振る舞いにする(MT4版)
News
各種ブログテンプレート
2008年12月 3日

エントリー本文

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

Posted at December 3,2008 12:33 AM
Category:[検索]
Tag:[, , ]

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
ファイルのパスが誤っていたので修正しました。

Posted by yujiro ReTweet This!
関連記事
この記事を読んだ人はこんな記事も読んでいます
人気エントリー
Hatena Hot Entries
Hatena Entries
トラックバックURL


コメント

yujiro さん、4.22でさっそく試してみました。
どうもありがとうございました。

[1] Posted by s.fujino : December 3, 2008 1:42 AM

yujiroさん、こんばんは。

4.23でもOKでした。
(もう一晩待てばよかった :-)

[2] Posted by s.fujino : December 4, 2008 12:01 AM

>s.fujinoさん
こんばんは。
4.23でのご確認&ご連絡ありがとうございました。
ちょっとタイミングが良くなかったですね(笑)。

[3] Posted by yujiro : December 7, 2008 12:09 AM

MT4.261ではパスが
/mt/lib/MT/App/Search.pmとなっておりました。
成功はしたのですが、システムメニューの「全般」「ユーザー」が
エラーが発生しました。
Can't locate object method "new" via package "MT::L10N::ja_bk"
となりました。
回避策はありますか?

[4] Posted by kazu : October 1, 2009 4:54 PM

>kazuさん
こんにちは。
パスについては記載が誤っていたので修正致しました。ご指摘ありがとうございます。
後半のご質問の件につきましては、エラー内容より「ja_bk.pm」というファイルを呼び出しているので、おそらく修正前のバックアップとして ja_bk.pm というファイルを作り、同じディレクトリに置かれたのがエラーの原因と思われます。
ja_xx.pm のファイルを置くと、ja.pm より優先して読み込まれてしまうため、バックアップのファイル名を ja.pm_bk など、拡張子を .pm 以外のものに変更すればエラーを回避できると思います。
それではよろしくお願い致します。

[5] Posted by yujiro : October 3, 2009 3:53 PM

yujiroさん
ありがとうございます。
無事回避できました。
エラーメッセージをよく読まないとダメですね・・・。
初歩的ミスですいません・・・。

[6] Posted by kazu : October 4, 2009 9:46 PM

>kazuさん
こんにちは。
ご連絡ありがとうございました。
無事に直ったようで良かったです。
ではでは!

[7] Posted by yujiro : October 8, 2009 4:08 PM
コメントする
greeting

*必須



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

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

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

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

Now loading...
Introduction
Entries of this Category
Recent Entries
Recent Comments
Recent Trackbacks
QRcode

現在停止中です
携帯電話からこのQRcodeを撮影することで携帯用URLを取得することができます

URI for cellular phones
ギターに入った猫
Styles
Font Size
Default
For defective color vision
Gray Scale
RGB Color
Search this site

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

loading ...
Categories
Monthly Archives
BlogPeople
Syndicate this site
FeedBurner(RSS1.0/RSS2.0/Atom)
Counter
これまでのアクセス
クリエイティブ・コモンズ・ライセンス
Powered by
Movable Type 5.02