在 Plone 中显示新闻项目创建者或所有者的全名

Show News Item creator or owner full name in Plone

我试图在列表中显示每条新闻的全名。目前我只有用户ID(昵称)。

有没有简单的方法(在现有的 .pt 文件中)显示创建者或所有者的全名而不是昵称?

该页面也必须适用于匿名用户。我的意思是 - 页面必须是 public.

一些细节:

<div class="container-fluid news-list-container"
     tal:define="news_items python:context.getFolderContents(contentFilter={'portal_type':['News Item'], 'sort_on': 'Date', 'sort_order': 'descending',});
                 Batch python:modules['Products.CMFPlone'].Batch;
                 b_size python:4;
                 b_start python:0;
                 b_start request/b_start | b_start;
                 batch python:Batch(news_items, b_size, int(b_start), orphan=0);"
     tal:condition="news_items">

  <div class="news-list-items">

    <tal:items tal:repeat="news_item batch">

      <!-- News item -->
      <div class="row news-item"
           tal:define="news_object python:news_item.getObject();
                       news_date python:news_object.getField('modification_date').getAccessor(news_object)();
                       news_title python:news_object.getField('title').getAccessor(news_object)();
                       news_description python:news_object.getField('description').getAccessor(news_object)();
                       news_image python:news_object.getField('image').getAccessor(news_object)();
                       news_url python:news_object.absolute_url();
                       news_creators python:news_object.getField('creators').getAccessor(news_object)(); .... ...
<tal:fullname define="membership context/portal_membership;
                      info python:membership.getMemberInfo(user.getId());
                      fullname info/fullname">
    You are are <span class="name" tal:content="fullname" />
</tal:fullname>

本例取自plone documentation

你可以从这段代码中得到很多启发:

注意可能出现的性能问题。

缓存视图方法可能会更好,例如:

@memoize
def userid2fullname(self, userid):
     pm = api.portal.get_tool('portal_membership')
     memberinfo = pm.getMemberInfo(userid)
     return memberinfo and memberinfo['fullname'] or userid