2017-02-17 2 views
1

J'essaie d'afficher le nom complet de chaque élément d'une liste. Pour l'instant je n'ai que l'identifiant de l'utilisateur (pseudo).Afficher le nom complet du créateur de l'élément ou du propriétaire dans Plone

Existe-t-il un moyen simple (dans un fichier .pt existant) d'afficher le nom complet du créateur ou du propriétaire au lieu d'un surnom?

Cette page doit aussi fonctionner pour les utilisateurs anonymes. Je veux dire - la page doit être publique.

Quelques détails:

<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)(); .... ... 

Répondre

2
<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> 

Cet exemple est tiré du plone documentation

+0

Le meilleur. Merci! – GhitaB

2

Vous pouvez vous inspirer beaucoup par ce code:

Considérez les problèmes de performances possibles.

Une méthode de vue mise en cache peut fonctionner beaucoup mieux, .: par exemple

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

Je vais à moitié prêt avant @mathias a répondu. Il est fondamentalement le même mais pointe vers un cas d'utilisation similaire et met en garde sur les performances, donc je poste de toute façon: p – alepisa

+0

Merci beaucoup! – GhitaB