TopMovable Typeカスタマイズ検索 > 2011年11月
2011年11月28日

Movable Type 5.1の検索で「blog_idパラメータが不正です。」となる不具合の対処

Movable Type 5.1の検索で検索結果テンプレートを指定する方法」で紹介した方法で不具合が発生するケースがあるので、その対処方法を紹介します。

1.問題点

次のような検索フォーム(blog_idおよびIncludeBlogsのinput要素を指定しない)で検索を実行します。

<form method="get" action="<$mt:CGIPath$><$MTSearchScript$>">
    <input type="text" id="search" name="search" value="<$mt:SearchString$>" />
    <input type="submit" value="GO" />
</form>

この場合、次の「blog_idパラメータが不正です。」というエラーが発生します。

検索時のエラー

そもそも、blog_idおよびIncludeBlogsを指定しない検索フォームが適切かどうかという点ですが、2011年11月現在の公式ドキュメントに次の記載があり、適切であるように読み取れます。

Movable Type 5 ドキュメント - 検索ページのカスタマイズ

管理しているブログ全てを検索の対象にしたい場合は、検索フォームの IncludeBlogsを削除し、検索対象の絞り込みをしないようにします。

<form method="get" action="<$mt:CGIPath$><$MTSearchScript$>">
    <input type="text" id="search" name="search" value="<$mt:SearchString$>" />
    <input type="submit" value="GO" />
</form>

ソースコードをトレースしたところ、MT5.0はドキュメント通りの動作になるようですが、MT5.1では検索時のパラメータチェック処理が変更されており、冒頭のエラーが発生するようです。

2.対処方法

MT5.1(ここではMT5.12)での対処方法は、lib/MT/App/Search.pmの以下の赤色で示した2行を、削除またはコメントアウト(行頭に「#」を付与)します。

変更前

…前略…
sub init_request {
    my $app = shift;
    $app->SUPER::init_request(@_);
    …中略…
 
    # invalid request if they are given Zero as blog_id
    return $app->errtrans( 'Invalid [_1] parameter.', 'blog_id' )
        unless ( $blog_id > 0 );
 
    my $params = $app->registry( $app->mode, 'params' );
    …中略…
}
…後略…

変更後

…前略…
sub init_request {
    my $app = shift;
    $app->SUPER::init_request(@_);
    …中略…
 
    # invalid request if they are given Zero as blog_id
#    return $app->errtrans( 'Invalid [_1] parameter.', 'blog_id' )
#        unless ( $blog_id > 0 );
 
    my $params = $app->registry( $app->mode, 'params' );
    …中略…
}
…後略…

本対処はMT5.0で存在していなかったチェック処理を削除しただけです。

これで冒頭のエラーは発生しなくなりますが、処理を削除することで他の問題が発生する可能性がありますので、自己責任でご利用ください。

Comments [0] | Trackbacks [0]
2011年11月27日

Movable Type 5.1の検索で検索結果テンプレートを指定する方法

November 27,2011 12:33 AM
Tag:[, ]
Permalink

Movable Type 5.1の検索で検索結果テンプレートを指定する方法を紹介します。ここで紹介する方法は5.12で動作確認しています。

1.基本動作

検索結果テンプレートの基本的な動作は次のようになります(公式ドキュメントより抜粋)。

Movable Type 5 ドキュメント - 検索ページのカスタマイズ

IncludeBlogsで最初に指定したブログのテンプレートを利用します。

IncludeBlogsは検索対象を指定するパラメータで、フォームに次の赤色のように記述します。

<form method="get" action="<$mt:CGIPath$><$MTSearchScript$>">
    <input type="text" id="search" name="search" value="<$mt:SearchString$>" />
    <input type="hidden" name="IncludeBlogs" value="1,2,3,4,5" />
    <input type="submit" value="GO" />
</form>

ブログIDを1つしか指定しなければそのブログIDの検索結果テンプレートを利用します。上記の設定ではブログID「1」の検索結果テンプレートを利用します。

2.特定のブログの検索結果テンプレートを指定する

検索フォームに赤色のinput要素を追加します。value属性には、検索結果テンプレートを使用したいブログのブログIDを指定します。

<form method="get" action="<$mt:CGIPath$><$MTSearchScript$>">
    <input type="text" id="search" name="search" value="<$mt:SearchString$>" />
    <input type="hidden" name="IncludeBlogs" value="1,2,3,4,5" />
    <input type="hidden" name="blog_id" value="2" />
    <input type="submit" value="GO" />
</form>

この場合はブログID「2」の検索結果テンプレートを利用します。

3.代替テンプレートを使って検索結果を表示する

「代替テンプレート」とは、どのブログにも属さないテンプレートを指します。検索フォームにname属性「Template」のinput要素を追加することで、検索結果用の代替テンプレートを指定します。

代替テンプレートを使った検索結果のサンプル
代替テンプレートによる検索結果

検索結果用の代替テンプレートは、MTのインストールディレクトリにあるsearch_templatesディレクトリに配置します。そのディレクトリにはdefault.tmplがサンプルとして置かれているので、それをリネームして利用すると良いでしょう。なお正式な代替テンプレートファイル名として「default.tmpl」は利用できないので注意してください。

代替テンプレートを使って検索結果を表示するには、mt-config.cgiに次の内容を追加します。ここでは代替テンプレートのファイル名を「altsearch.tmpl」とします。

SearchAltTemplate altsearch altsearch.tmpl

検索フォームに次のinput要素を追加します。value属性には、SearchAltTemplateで設定した2つめの文字列(=利用したい代替テンプレートの拡張子を除いた名称)を設定してください。

<input type="hidden" name="Template" value="altsearch" />

代替テンプレートを利用するときに、すべてのブログを検索対象にしたい場合は、name属性がblog_idおよびIncludeBlogsのinput要素を指定しないでください。ただしこの設定を行った場合には不具合が発生するため、対処方法は別途エントリーします。

blog_idのinput要素を指定した場合、代替テンプレートで利用するテンプレートタグについて、指定したブログIDの情報が適用されることがあります。例えばMTLinkタグがそうです。

IncludeBlogsのinput要素でブログIDを指定すれば、指定したブログを検索対象にして代替テンプレートで検索結果を表示することができますが、先頭に設定したブログIDの情報が適用されることがあります。適用されることで何か不都合が生じる場合はblog_idと併用することを推奨します。

4.参考情報

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