Скрипт Python для получения содержимого поля личных настроек в Plone
У меня есть пользовательская страница регистрации и @@ личные настройки на моем сайте Plone 4, на ней есть несколько дополнительных полей, таких как область, куда люди могут вставить свои ссылки в социальных сетях, и какова позиция их компании - на ней также отображается дата, когда они были зарегистрирован на сайте. (Я использовал для этого Colour.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
обратная связь
Я также попробовал это умное утверждение: context/userRegDay/membershipLegth
но это дало мне ошибку, поэтому я попробовал альтернативу Python context.userRegDay.membershipLegth()
- но они не работали.
Все мои поля выше существуют в Properties
вкладка моего portal_memberdata
страница в ZMI.
Google не сильно мне здесь помогает, все, что я могу найти, - это эта страница, однако, насколько я могу судить, она не охватывает то, что я пытаюсь сделать.
Может кто-нибудь сказать мне, как я могу получить мою переменную UserRegDay для моего скрипта Python? Или я все об этом говорю не так?
Заранее извиняюсь перед любыми опытными людьми Plone, у которых артериальное давление может повыситься в результате чтения моих попыток сделать это.
Большое спасибо.
1 ответ
getMemberInfo
возвращает только пользовательские данные по умолчанию. это жестко запрограммировано в members.py для Products.PlonePAS
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
Пожалуйста, скажите, если это не работает, тогда мы можем продолжить расследование. Я уже успешно расширил пользовательские данные, но не с файле colle.examples.userdata, а вручную.
С уважением