パーソナルツール
現在の場所: ホーム plone SNS風味 メンバー検索 メンバー検索ページ
書いた本
Plone 完全活用ガイド の Chapter 1, 2, 3, 11 を執筆しました。
plone のインストール、使い方から、機能・デザインのカスタマイズ、プロダクトの作り方まで、 plone のすべてがぎゅっと詰まっている書籍になっていると思います。
plone に興味がある人から、すでに使いこなしている方まで、ぜひ読んでみてください。
Plone 完全活用ガイドのサポートページ
ナビゲーション

 
文書操作

メンバー検索ページ

作成者 takanori 最終変更日時 2005年11月10日 20時11分

plone のメンバー検索機能を、データベースに登録した情報から検索するように変更します。

目次

入力フォーム[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 のソース を参照してください。

メンバー タブをクリックして表示される、検索フォームは以下のような形になります。

member 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 の初期状態ではメンバー検索の結果は顔写真のみの表示でしたが、ここでは下記の項目を表示するように変更してい。

  • 縮小した顔写真(ホームへリンク)
  • 名前とニックネーム(ホームへリンク)
  • 電話番号と内線番号
  • メールアドレスとリンク
  • 自己紹介
  • 所属

検索結果を実行したは以下のように表示されます。

member search results

メンテナンス[maintenance]

ここまでで、項目を増やしたメンバー情報を、データベースを使用して検索できるようになりました。

ただし、このままでは plone 上でメンバーの情報が更新されたときに、データベースに反映されません。 そこで、下記のいずれかの方法で(他にもあるかもしれませんが)メンバー情報をメンテナンスする必要があります。

  1. cron 等で定期的に メンバー情報登録スクリプト(insert_membe_data) を実行して、最新の状態に保つ。
  2. メンバー情報が更新されたときに、そのメンバーに対して、 メンバー情報登録スクリプト(insert_membe_data) を実行する。

私の環境では「2」の方法でデータを最新の状態に保っています。

具体的には /portal_skins/plone_form_scripts にある personalize という Python Script をカスタマイズして、 return の直前に context.SQL.insert_member_data(member_id=member.getId()) というメンバー情報の更新処理を追加してあります。


Powered by vine linux, python, zope, plone, coreblog