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 脚本,它将获取最后一个定义python:user.getProperty('regday')并做一些数学运算来显示他们在网站上注册了多长时间。

我的脚本正在调用 memberLength 并且在我的自定义文件夹中,我一直在使用以下方法调用它:

tal:content="context/memberLength"

我已经尝试了很多事情,但经常遇到回溯错误,所以我不太确定如何告诉 Python 获取这些字段详细信息。我尝试了以下操作(下面的示例只是我试图让 python 获取字段信息):

Python脚本:

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

但是,它返回一个包含当前用户基本信息(用户名、描述等)的字典,那里对我没有任何用处——我的自定义字段都没有出现在这个字典中。

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()——但它们没有用。

我上面的所有字段都存在于ZMI 页面的Properties选项卡中。portal_memberdata

谷歌在这里并没有给我太多帮助,我只能找到这个页面,但据我所知,它并没有真正涵盖我正在尝试做的事情。

谁能告诉我如何将我的 UserRegDay 变量传递给我的 Python 脚本?还是我对这一切都错了?

提前向任何有经验的 Plone 人道歉,他们的血压可能会因阅读我的尝试而升高。

非常感谢。

4

1 回答 1

0

getMemberInfo仅返回默认用户数据。它在 Products.PlonePAS 的 members.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 回答