フィールドとその内容
以下のようなフィールドで構成されています。
フィールド名 | 内容 | タグ名 | タイプ |
---|---|---|---|
タイトル | 書名 | MTEntryTitle | デフォルト |
本文 | 内容 | MTEntryBody | デフォルト |
ISBN | ISBN | book_isbn | テキスト |
価格 | 価格 | book_price | テキスト |
出版社 | 出版社 | book_pub | ドロップダウン |
出版年 | 出版年 | book_year | ドロップダウン |
登録されているエントリー一覧と検索フォームの例
以下のようなエントリーが登録されています。
検索フォームの意味
- 「フリーワード」のテキスト入力欄にテキストを入力した場合、その下のチェックボックスの中でチェックしたカラムに対して一致が試みられます。
- 「出版社」を指定して絞り込みを行うことができます。
- 「出版年」を指定して絞り込みを行うことができます。この部分はORで条件を指定したことになります。
- 「フリーワード」「出版社」「出版年」はAND検索になります。
検索フォーム部分のソース
<form method="get" action="<$mt:CGIPath$><$mt:SearchScript$>">
<input type="hidden" name="CustomFieldsSearch" value="1" />
<input type="hidden" name="CustomFieldsSearchClassType" value="entry" />
<input type="hidden" name="CustomFieldsSearchIgnore" value="EntryTitle" />
<input type="hidden" name="CustomFieldsSearchIgnore" value="EntryBody" />
<input type="hidden" name="CustomFieldsSearchIgnore" value="EntryMore" />
<input type="hidden" name="CustomFieldsSearchIgnore" value="EntryKeywords" />
<input type="hidden" name="IncludeBlogs" value="<$mt:BlogID$>" />
<fieldset id="freeword_set">
<legend>フリーワード</legend>
<input type="text" id="search_free" class="ti" name="search" value="<$mt:SearchString$>" />
<br />
<input type="checkbox" id="CustomFieldsSearchField_title" name="CustomFieldsSearchField" value="EntryTitle" />
<label for="CustomFieldsSearchField_title">: 書名</label>
<input type="checkbox" id="CustomFieldsSearchField_text" name="CustomFieldsSearchField" value="EntryBody" />
<label for="CustomFieldsSearchField_text">: 内容</label>
<input type="checkbox" id="CustomFieldsSearchField_book_isbn" name="CustomFieldsSearchField" value="book_isbn" />
<label for="CustomFieldsSearchField_book_isbn">: ISBN</label>
<input type="checkbox" id="CustomFieldsSearchField_book_price" name="CustomFieldsSearchField" value="book_price" />
<label for="CustomFieldsSearchField_book_price">: 価格</label>
</fieldset>
<fieldset>
<legend>出版社</legend>
<select name="CustomFieldsSearchFieldLike">
<option value="">指定なし</option>
<option value="book_pub:インプレスジャパン"> インプレスジャパン</option>
<option value="book_pub:ソフトバンククリエイティブ"> ソフトバンククリエイティブ</option>
<option value="book_pub:オライリージャパン"> オライリージャパン</option>
</select>
</fieldset>
<fieldset>
<legend>出版年</legend>
<input type="checkbox" id="CustomFieldsSearchFieldIn_book_year_2004" name="CustomFieldsSearchFieldIn" value="book_year:2004" />
<label for="CustomFieldsSearchFieldIn_book_year_2004">: 2004年</label>
<input type="checkbox" id="CustomFieldsSearchFieldIn_book_year_2008" name="CustomFieldsSearchFieldIn" value="book_year:2008" />
<label for="CustomFieldsSearchFieldIn_book_year_2008">: 2008年</label>
</fieldset>
<input type="hidden" name="limit" value="2" />
<input type="submit" accesskey="4" value="検索" />
<input type="hidden" name="CustomFieldsSearchLuckyArchiveType" value="Individual" />
<input type="submit" name="CustomFieldsSearchLucky" accesskey="5" value="I'm Feeling Lucky" />
</form>
検索結果表示でのMTIfCustomFieldsSearchFieldの使用例
<mt:IfCustomFieldsSearchField tag="book_isbn">
<!-- ISBNが検索対象になっている場合にのみ表示されます -->
ISBN: <MTbook_isbn>
</mt:IfCustomFieldsSearchField>
<mt:IfCustomFieldsSearchField tag="book_price">
<!-- 価格が検索対象になっている場合にのみ表示されます -->
価格: <MTbook_price>
</mt:IfCustomFieldsSearchField>
すばらしいプラグインをありがとうございます。
まだサイトは作成中でいろいろと試している段階なのですが、とりあえず「検索フォーム部分のソース」という部分をそのままコピペして試してみました。
(もちろんフィールド名等はこちらのものに修正しましたが)
そこでお尋ねしたいのですが、https://tec.toi-planning.net/mt42/customfieldssearch-demo/blog/ のでもサイトでは、フリーワードの下のチェックボックスにチェックを入れないと、検索語が入力できないようになっているようです。
しかし上記のソースをそのまま使用してもそのようにならないのですが、何か設定が必要でしょうか?
ryuiさん、コメントありがとうございます。
該当個所はMTとは直接関係はなく、JavaScriptで制御をしています。デモサイトのHTMLを見て頂くと書いてあるのですが、以下の部分が該当する処理となります。
もし難しいようであれば「JavaScript」と「jQuery」で調べて頂くとよいと思います。
------------------------------------------------------------------------------
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
(function() {
function update_search() {
if ($('#freeword_set input:checked').size()) {
$('#search_free').removeAttr('disabled').css('background', '');
}
else {
$('#search_free').attr('disabled', 'disabled').css('background', 'gray');
}
}
$('#freeword_set input[type="checkbox"]').click(function() {
update_search();
});
update_search();
})();
</script>
-----------------------------------------------------------------------------
よろしくお願いします。
早速の返信ありがとうございます。
先の質問をした後に、もしかして・・・、と思ってページのソースを見て気づきました。
丁寧な返答ありがとうございました。
早速修正したところうまくいきました。
もう一点質問させてください。
デモサイトで検索条件をフリーワード、チェックボックス、ドロップダウンリストのいずれの検索条件も入力せずに検索した場合、登録されている全データが表示されているのだと思います。
これを条件の入力がない場合に、「検索条件が入力されていません」といった検索結果を返すにはどのようにしたら良いのでしょうか?
非常に有用なプラグインありがとうございます。
現在このプラグインを使用していますが、検索結果の並べ替え(ソート)はできないでしょうか?
たとえば出版社で検索した場合、検索結果はブログ記事の作成日順に並んでいると思うのですが、出版社で検索した場合検索結果が書名のあいうえお順に並んで表示されるといった具合です。
書名の振り仮名用のカスタムフィールドを作成して、検索結果をこのフィールドでソートするというように試してみたのですが、記述が悪いのかうまく表現できません。
検索フォームに"hidden"で記載しておけばユーザーは意識しないで検索結果が得られるかなと思うのですが、無理でしょうか?
ご質問させてください。
CustomFieldsSearchは、ダイナミックパブリッシング(MT:version 4.25)でも利用できますでしょうか?
どうぞ宜しくお願い致します。
ryuiさん、コメントありがとうございます。
回答が遅くなりまして申し訳ありません。
コメントで指摘を頂いた状況について、バージョン0.1.10から対応できるようになりました。
以下の手順で埋め込んでください。
・フォームへの埋め込み
以下のinput要素を埋め込んでください。
------------------------------------------------------------
<input type="hidden" name="PreventEmptySearch" value="1" />
------------------------------------------------------------
・テンプレート側の埋め込み
検索条件が入力されていない場合のメッセージは以下のように埋め込んでください。
------------------------------------------------------------
<mt:CustomFieldsNoSearch>
検索条件が入力されていません
</mt:CustomFieldsNoSearch>
------------------------------------------------------------
また、「CustomFieldsNoSearch」は「PreventEmptySearch」の影響を受けないので、「入力されていない場合は全て出す」状態のままで「CustomFieldsNoSearch」を使うこともできます。
よろしければお試しいただければありがたいです。
よろしくお願いします。
ykataさん、コメントありがとうございます。
0.2.0までのCustomFieldsSearchでは並び順を指定するとができなかったのですが、0.2.1から指定できるようになりました。
指定する場合は以下のようにしてください。
●小さい順に並べる場合
------------------------------------------------------------------
<input type="hidden" name="CustomFieldsSearchSort" value="tagname ascend" />
------------------------------------------------------------------
●大きい順に並べる場合
------------------------------------------------------------------
<input type="hidden" name="CustomFieldsSearchSort" value="tagname descend" />
------------------------------------------------------------------
※「tagname」はフィールドのタグ名に置き換えてください。
お試しいただければありがたいです。
CustomFieldsSearch
kazumiさん、コメントありがとうございます。
CustomFieldsSearchはmt-search.cgiを使ってCGIスクリプトで検索を行なうので、インデックステンプレートやアーカイブテンプレートをダイナミックパブリッシングで出力している場合でも基本的には問題ありません。
ただ(あまりないと思いますが)ダイナミックパブリッシングでのみ利用できるタグを持つようなプラグインをを使っている場合は動作しない可能性があります。
お試しいただければ幸いです。
たくさま、お忙しいところ、ご丁寧なご回答をいただきまして、
本当に感謝しております、有り難うございました!!!!
早速、チャレンジしてみたいと思います。
このようなプラグインを開発くださって、本当に有り難うございます、
心より感謝致します!