2013-05-17 2 views
0

У меня есть пользовательская страница регистрации и @@ личных настроек на моем сайте Plone 4, у нее есть несколько дополнительных полей, таких как область для людей, чтобы вставить свои социальные сети ссылки и какова их позиция в компании - она ​​также отображает дату, когда они были зарегистрированы на сайте. (Я использовал collective.examples.userdata для достижения этой цели)Сценарий Python для получения содержимого поля личных предпочтений в Plone

Я успешно способен ссылаться на эти поля в шаблоне страницы с использованием определений ниже:

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, который будет захватывать последний Definiton из python:user.getProperty('regday') и немного математики, чтобы показать, как долго они были зарегистрированы на сайте.

Мой сценарий звонит 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() - но они не сработали.

Все мои поля выше существуют на вкладке Properties моей страницы portal_memberdata в ZMI.

Google не помогает мне так много здесь, все, что я могу найти, это this page, однако на самом деле он не охватывает то, что я пытаюсь сделать, насколько я могу судить.

Может ли кто-нибудь сказать мне, как я могу передать переменную UserRegDay в мой сценарий Python? Или я все об этом ошибаюсь?

Извинения перед любым опытным народом Plone, у которого кровное давление может повыситься в результате чтения моих попыток.

Большое спасибо.

ответ

0

getMemberInfo возвращает только данные пользователя по умолчанию. жестко закодирован в membership.py продуктов.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')), 
       } 

Попробуйте это питона скрипт:

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

print member.getProperty('regday') 
return printed 

Пожалуйста скажите, если это не работает, то мы можем исследовать дальше. Я уже успешно расширил пользовательские данные, но не с коллективными.examples.userdata, но вручную.

С уважением

+0

К сожалению, у меня возникают некоторые проблемы, я думаю, может быть, userdata.examples вызывает какой-то вопрос с ним, скорее всего, мое знание Python выпускающая меня ... 'member.getProperty (» regday ') 'похоже, возвращает объект вместо строки, если я укажу альтернативное поле, такое как« имя пользователя », он также возвращает объект. FYI мой модифицированный скрипт: http://pastie.org/8610556 однако, если я делаю прямую копию и вставляю код и обновляю идентификатор пользователя, он также возвращает объект, я попытался собрать все это в список, но это дало мне traceback ('для элемента в члене: append.mylist (item)') – Dan

+0

UPDATE: Я пробовал 'member.getProperty ('regday', 'couldnt find')' и он возвращал 'couldnt find', поэтому я думаю что-то еще пошло не так. Возможно, лучший способ сделать это - избежать «collect.examples.userdata»? – Dan

+0

@Dan 'collect.examples.userdata' определяет некоторые дополнительные поля, такие как' gender'. Они работают на вашем сайте? Другой вопрос: вы на самом деле настроили 'коллектив.examples.userdata' или у вас есть ваша собственная реализация? или оба установлены одновременно? Можете ли вы также вставить выходные данные сценария (какой объект?). – Mathias

Смежные вопросы