フィールドとその内容
以下のようなフィールドで構成されています。
フィールド名 | 内容 | タグ名 | タイプ |
---|---|---|---|
タイトル | 書名 | 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スクリプトで検索を行なうので、インデックステンプレートやアーカイブテンプレートをダイナミックパブリッシングで出力している場合でも基本的には問題ありません。
ただ(あまりないと思いますが)ダイナミックパブリッシングでのみ利用できるタグを持つようなプラグインをを使っている場合は動作しない可能性があります。
お試しいただければ幸いです。
たくさま、お忙しいところ、ご丁寧なご回答をいただきまして、
本当に感謝しております、有り難うございました!!!!
早速、チャレンジしてみたいと思います。
このようなプラグインを開発くださって、本当に有り難うございます、
心より感謝致します!
たく様、とても素晴らしいプラグインをありがとうございます。現在、「タグ検索にて並び順を任意のフィールドの番号順に」という状態の検索が行えるよう、設定を組んでおります。しかし、任意の番号順に検索が行えません。タグ検索で並び順を指定する事は出来ないのでしょうか?検索のタグは下記になります。
mt-search.cgi?CustomFieldsSearch=1&CustomFieldsSearchClassType=entry&CustomFieldsSearchSort=cf_gcd+ascend&PreventEmptySearch=1&IncludeBlogs=1&tag=あ&limit=20
色々な方法を試しておりますが順番が掲載日順のような状態になっております。
MT4.261 CustomFieldsSeach0.2.1を使用しております。
Daikiさん、コメントありがとうございます。
説明がなかったので申し訳ないですが、CustomFieldsSearch は「タグ検索」とは併用できません。
現在、上記にの動作については「CustomFieldsSearch」は有効になっておらず、
通常の検索で「タグ検索」を行った場合の結果になっているかと思います。
また今のところ「CustomFieldsSearch」と「タグ検索」を併用できるようにする予定はありません。
恐れ入りますが、ご了承を頂けますと幸いです。
よろしくお願いいたします。
返信大変遅くなり失礼しました。
検索結果の並べ順の件ですが、上手くいきました。
本当にありがとうございました。
もうひつつ教えていただきたいのですが、検索結果が多くなってページ分割の必要があり、現在MT4.26を使用しているので、「Movable Type 4 ドキュメント」の「検索結果ページのページ分割 http://www.movabletype.jp/documentation/paginated-search-results.html」を参考に検索結果テンプレートを作成していますが上手く動作しません。
カスタムフィールドを含まないブログで、通常のMTの検索では上記の方法で動作します。何か特別な記述が必要でしょうか?
あと「登録されているエントリー一覧と検索フォームの例 https://tec.toi-planning.net/mt42/customfieldssearch-demo/blog/」が機能していないようですが・・・。
ykataさん、コメントありがとうございます。
検索結果のページ分割については CustomFieldsSearch でも対応しておりますので、不具合がなければ通常の検索と同じ方法で分割されるはずです。もう一度確認をしてみていただければと思います。
またデモの動作の件はありがとうございます。テンプレートが壊れていることに気づいていませんでした。とても助かりました。
よろしくお願いいたします。
お返事が大変遅くなってしまい申し訳ございません。
どこにコメントしたのか忘れてしまい探し出すまでに時間が掛かってしまいました;
「タグ検索」は使えなかったのですが新たにフィールドを作り無事、解決いたしました。
製作しましたサイトで検索を行うと件数が大変多い為、表示に8〜9秒かかってしまっています。
これはmt-search.cgiの影響である事が解っていますが、代替えの検索例えば「Hyper Estraier」などのcgiを使用してCustomFieldsSearchを使用出来ませんでしょうか?
FastCGIなどサーバ上で出来る限りの事は頑張ってみましたがやはり解決には繋がらなかったので…
よろしくお願いいたします。
素晴らしいプラグインをありがとうございます。
初歩的な質問かも知れませんが、検索結果についてお伺いいたします。
検索項目を検索結果のタイトルに反映させることはできないのでしょうか?
例えば、デモの検索で出版社をインプレスジャパンで検索したとします。
そのときの結果に『インプレスジャパンで検索しました。』などと見出しを表示したいのですが、方法がわかりません。
また、出版社をインプレスジャパン、出版年を2004年で検索した場合ですと『インプレスジャパン、2004年で検索しました。』という具合です。
MTIfCustomFieldsSearchField を使うと検索結果の個々のカスタムフィールドの値は表示できるのですが、上記のような見出しには使えないのでしょうか?
もし、何かしらの方法があるのでしたら教えていただけないでしょうか?
お忙しいと思いますが、よろしくお願いいたします。
素晴らしいプラグインをありがとうございます。
横レスで申し訳ありませんが、
私もShinさん同様に検索項目を検索結果のタイトルに反映させたいのですが、やはり難しいのでしょうか?
ヒントでもけっこうですので、教えていただければ幸いです。
こんにちは、とても素晴らしいプラグインをありがとうございます。
こちらのプラグインですが、モバイルページに使用することは出来ますでしょうか?
その場合、cgiを編集する作業が必要なのでしょうか?
デモと同じように指定したのですが、難しいようです。
もし、方法があるのでしたら教えていただけないでしょうか?
お忙しいと思いますが、よろしくお願いいたします。