用于获取Plone中个人首选项字段内容的Python脚本

时间:2013-05-17 10:38:24

标签: plone template-tal zpt

我在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标签中。

谷歌在这里没有帮助我这么多,我能找到的只是this page然而,就我所知,它并没有涵盖我想要做的事情。

有人能告诉我如何将我的UserRegDay变量传递给我的Python脚本吗?或者我是不是错了?

预先向任何经验丰富的Plone人道歉,因为我在阅读此项尝试时血压可能会升高。

非常感谢。

1 个答案:

答案 0 :(得分:0)

getMemberInfo仅返回默认用户数据。 它是在Membership.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,而是手动扩展。

问候