Скрипт 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, а вручную.

С уважением

Другие вопросы по тегам