メンバー検索ページ
plone のメンバー検索機能を、データベースに登録した情報から検索するように変更します。
目次
- 入力フォーム[form]
- 検索 SQL[sql]
- 検索結果表示[results]
- メンテナンス[maintenance]
入力フォーム[form]
まず、メンバー検索の入力フォームに、追加した値も検索条件として入力できるようにします。
そして、検索条件としてニックネームや血液型を指定できるように、入力フォームを追加します。
例えば、ニックネームの入力フォームは以下のようになります。:
<tr>
<td>
<span class="field"><label i18n:translate="label_nick_name">Nick name</label></span>
</td>
<td>
<input type="text"
name="nickname"
size="25"
tabindex=""
tal:attributes="tabindex tabindex/next;"
/>
</td>
</tr>
portal_skins/plone_forms/ にアクセスして、member_search_form を開いて Customize ボタンをクリックします。
ソースコードは meber_search_form のソース を参照してください。
メンバー タブをクリックして表示される、検索フォームは以下のような形になります。
検索 SQL[sql]
次に、メンバー検索をデータベースから行うための SQL Method を SQL フォルダに作成します。
基本的には、引数として渡された文字列を、部分文字列として like 検索するものを、and でつなぐようになっています。
- Id searchForMembers
- Arguments searchable_text id fullname kananame nickname email organization workplace telno sex blood location hometown photo
- ソースコード searchForMembers のソース を参照してください。
検索結果表示[results]
最後に、検索結果を表示するための Page Template を作成します。
portal_skins/plone_forms/ にアクセスして、member_search_results を開いて Customize ボタンをクリックします。
ソースコードは meber_search_results のソース を参照してください。
実際にはこの Page Template が member_serach_form から呼ばれ、内部で先ほど作成した serachForMembers を実行し、その結果を一覧表示するようになっています。
なお、コードの最初の方に記述してある results python:here.SQL.searchForMembers(request); の部分で、データベースからの検索を行っています。
また、plone の初期状態ではメンバー検索の結果は顔写真のみの表示でしたが、ここでは下記の項目を表示するように変更してい。
- 縮小した顔写真(ホームへリンク)
- 名前とニックネーム(ホームへリンク)
- 電話番号と内線番号
- メールアドレスとリンク
- 自己紹介
- 所属
検索結果を実行したは以下のように表示されます。
メンテナンス[maintenance]
ここまでで、項目を増やしたメンバー情報を、データベースを使用して検索できるようになりました。
ただし、このままでは plone 上でメンバーの情報が更新されたときに、データベースに反映されません。 そこで、下記のいずれかの方法で(他にもあるかもしれませんが)メンバー情報をメンテナンスする必要があります。
- cron 等で定期的に メンバー情報登録スクリプト(insert_membe_data) を実行して、最新の状態に保つ。
- メンバー情報が更新されたときに、そのメンバーに対して、 メンバー情報登録スクリプト(insert_membe_data) を実行する。
私の環境では「2」の方法でデータを最新の状態に保っています。
具体的には /portal_skins/plone_form_scripts にある
personalize という Python Script をカスタマイズして、
return の直前に
context.SQL.insert_member_data(member_id=member.getId())
というメンバー情報の更新処理を追加してあります。