0

Plone 4 サイトにカスタム登録と @@personal-preferences ページがあります。ソーシャル ネットワーキング リンクを貼り付けるための領域や、会社での地位など、いくつかの追加フィールドがあります。また、日付も表示されます。サイトに登録しました。(私はこれを達成するためにcollective.examples.userdataを使用しました)

以下の定義を使用して、ページ テンプレートでこれらのフィールドを正常に参照できます。

tal:define="membership context/portal_membership;
            info python:membership.getMemberInfo(user.getId());
            userPosition python:user.getProperty('position');
            userFB python:user.getProperty('facebook');
            userLinkedIn python:user.getProperty('linkedin');
            userTwitter python:user.getProperty('twitter');
            userRegDay python:user.getProperty('regday')"

python:user.getProperty('regday')の最後の定義を取得し、サイトに登録されている期間を表示するためにいくつかの計算を行うPython スクリプトを作成しようとしています。

私のスクリプトは memberLength を呼び出しており、カスタム フォルダーにあります。次のように呼び出しています。

tal:content="context/memberLength"

私は多くのことを試しましたが、常にトレースバックエラーが発生するため、Pythonにそれらのフィールドの詳細を取得するように指示する方法がよくわかりません..フィールド情報):

Python スクリプト:

membership = context.portal_membership.getMemberInfo()
return "%s" % membership

ただし、現在の基本的なユーザー情報 (ユーザー名、説明など) の辞書が返されますが、そこには何も役に立ちません。この dict にカスタム フィールドが表示されることはありません。

membership = context.getProperty('regday', 'Could not find')
return "%s" % membership

上記は「見つかりませんでした」というメッセージを返すため、それも機能しません。以下のスクリプトでも同じことが言えます。

membership = context.portal_membership.getProperty('regday','Could not find')
return "%s" % membership

私はこれを試しました:

membership = context.portal_membership.user.getProperty('regday','Could not find')
return "%s" % membership

ただし、AttributeError: userトレースバック メッセージが表示されました。

この tal ステートメントも試しcontext/userRegDay/membershipLegthましたが、エラーが発生したため、Python の代替手段を試しましたcontext.userRegDay.membershipLegth()が、機能しませんでした。

上記の私のフィールドはすべて、ZMIPropertiesの私のページのタブにあります。portal_memberdata

Google はここではあまり役に立ちません。私が見つけられるのはこのページだけですが、私が知る限り、私がやろうとしていることは実際にはカバーされていません。

UserRegDay 変数を Python スクリプトに渡す方法を誰か教えてもらえますか? それとも、私はこれについてすべて間違っていますか?

私の試みを読んだ結果として血圧が上昇する可能性がある、経験豊富な Plone の人々に前もってお詫び申し上げます。

どうもありがとう。

4

1 に答える 1

0

getMemberInfoデフォルトのユーザー データのみを返します。Products.PlonePASのmembership.pyにハードコードされています

    memberinfo = {'fullname'    : member.getProperty('fullname'),
                  'description' : member.getProperty('description'),
                  'location'    : member.getProperty('location'),
                  'language'    : member.getProperty('language'),
                  'home_page'   : member.getProperty('home_page'),
                  'username'    : member.getUserName(),
                  'has_email'   : bool(member.getProperty('email')),
                 }

Pythonスクリプトでこれを試してください:

userid = 'userid'  # fill in a user id
member = context.portal_membership.getMemberById(userid)

print member.getProperty('regday')
return printed

これが機能しない場合はお知らせください。さらに調査いたします。私はすでにユーザーデータを正常に拡張しましたが、collective.examples.userdata ではなく手動で拡張しました。

よろしく

于 2014-01-07T11:10:48.523 に答える