お世話になります。
わかる方がいましたらご教授願います。
MT6にCustomFieldsSearchを実装しました。
カスタムフィールドの内容もきちんと検索に
ヒットされているのを確認したのですが、
検索欄を空で検索したときに、
「CustomFieldsSearch」で検索されたことに
なってしまいます。
うまく実装されていないということでしょうか。
CustomFieldsSearch1.1.1を実装しました。
formタグの中はこのように記述しています。
<form method="get" id="search" action="">
<input type="hidden" name="CustomFieldsSearch" value="1">
<input type="hidden" name="CustomFieldsSearchField" value="ProductsName">
<input type="hidden" name="CustomFieldsSearchField" value="ProductsAuthor">
<mt:If name="search_results"><input type="hidden" name="IncludeBlogs" value="<$mt:SearchIncludeBlogs$>"><mt:Else><input type="hidden" name="IncludeBlogs" value="<$mt:BlogID$>"></mt:If>
<input type="hidden" name="limit" value="10">
<input type="text" name="search" id="search_txt" class="side-search--input" value="<$mt:SearchString$>" placeholder="検索">
<input type="submit" name="button" id="search_submit" value="検索" class="side-search--bt">
</form>
プラグインのソースコードを読むと以下のような記述がありましたので、検索語句を指定せずに検索を実行すると、「CustomFieldsSearch」というキーワードで検索したことになるのは仕様のようです。
if ( is_empty_search($app) ) {
$app->param( 'search', 'CustomFieldsSearch' );
}
対策の一例としては、以下のように検索語句の入力があったか否かを判定する方法が考えられます。
<mt:If tag="SearchString">
<p>「<$mt:SearchString$>」と一致する結果は見つかりませんでした。</p>
<mt:Else>
<p>検索語句が指定されていません。</p>
</mt:If>
Hideki Abe様
ご返信ありがとうございます!
うまく実装されてないのかと心配だったのですが
仕様だったのですね。
ライセンス的に
if ( is_empty_search($app) ) {
$app->param( 'search', 'CustomFieldsSearch' );
}
を削除しても問題はなさそうなので
削除することも念頭にいれつつ、
条件分岐で対応できるか試してみたいと思います。
ありがとうございました!
if ( is_empty_search($app) ) {
$app->param( 'search', 'CustomFieldsSearch' );
}
をコメントアウトして、検索欄を空で検索した結果
思う通りの状態になりました。
もう一つ、バグらしきものを発見したのですが、
検索がヒットしたときが
誤作動を起こして、検索がヒットしているにも
かかわらず、の内容が出力
されていました。
CustomFieldsSearchを利用不可にしたら通常通りの
動作になったのでCustomFieldsSearchに問題がありそうです。
タグがきえていました。
検索がヒットしているにもかかわらず、NoSearchResultsの内容が出力
されてしまうというバグらしき挙動が出ました。
sub _hdlr_no_search_results {
my ( $ctx, $args, $cond ) = @_;
return 1 unless is_empty_search();
$ctx->stash('count') ? 0 : 1;
}
上記をコメントアウトしたうえで、SearchResultCountで
条件分岐することで対応できました。