Ignore:
Timestamp:
12 Apr 2011, 23:35:02 (14 years ago)
Author:
uli
Message:

Working example for faculty container page how to display subobjects by viewlets (with different permissions per viewlet).

Location:
main/waeup.sirp/trunk/src/waeup/sirp/browser
Files:
1 added
2 edited

Legend:

Unmodified
Added
Removed
  • main/waeup.sirp/trunk/src/waeup/sirp/browser/templates/facultycontainerpage.pt

    r5929 r5936  
    3030  </tbody>
    3131</table>
     32
     33<div tal:content="structure provider:subobjectlist">
     34  List of subobjects
     35</div>
  • main/waeup.sirp/trunk/src/waeup/sirp/browser/viewlets.py

    r5930 r5936  
    588588    link_title = 'Data Center'
    589589    target_viewname = 'datacenter'
     590
     591class SubobjectLister(grok.ViewletManager):
     592    """Very special viewlet manager that displays lists of subobjects.
     593    """
     594    grok.name('subobjectlist')
     595    grok.template('subobjectlist')
     596
     597    def update(self):
     598        # The default implementation of update() sets self.viewlets to
     599        # a list of viewlets for the current context
     600        # (self.context). We make use of that fact by retrieving all
     601        # viewlets for all items in our context container by simply
     602        # setting these items as context while we call the default
     603        # update() method. So we get a list of lists of viewlets for
     604        # each item in a 'row' (where a single item is a row).
     605        rows = []
     606        orig_context = self.context
     607        for name, value in self.context.items():
     608            # Retrieve all viewlets for the current item (not the context)
     609            self.context = value
     610            super(SubobjectLister, self).update() # sets self.viewlets
     611            rows.append(self.viewlets)
     612            self.context = orig_context
     613        self.rows = rows
     614        # Finally, set the viewlets we would retrieve normally...
     615        super(SubobjectLister, self).update()
     616        return
     617
     618
     619class FacultyContainerListHead(grok.Viewlet):
     620    """The header line of faculty container subobject lists.
     621    """
     622    grok.order(1)
     623    grok.viewletmanager(SubobjectLister)
     624    grok.context(IFacultyContainer)
     625    grok.require('waeup.View')
     626
     627    def render(self):
     628        return u'<th>Code</th><th>Title</th><th></th>'
     629
     630class FacultyListName(grok.Viewlet):
     631    """Display a the title of a faculty as link in a list.
     632    """
     633    grok.order(1)
     634    grok.viewletmanager(SubobjectLister)
     635    grok.context(IFaculty)
     636    grok.require('waeup.View')
     637
     638    def render(self):
     639        return u'<a href="%s">%s</a>' % (
     640            self.view.url(self.context), self.context.__name__)
     641
     642class FacultyListTitle(grok.Viewlet):
     643    """Display the title of a faculty in a list.
     644    """
     645    grok.order(2)
     646    grok.viewletmanager(SubobjectLister)
     647    grok.context(IFaculty)
     648    grok.require('waeup.View')
     649
     650    def render(self):
     651        return self.context.title
     652
     653class FacultyRemoveButton(grok.Viewlet):
     654    """Render a remove button for faculty lists.
     655    """
     656    grok.order(3)
     657    grok.viewletmanager(SubobjectLister)
     658    grok.context(IFaculty)
     659    grok.require('waeup.manageUniversity')
     660
     661    def render(self):
     662        return u'<div class="text-right"><form method="POST"><input class="text-right" type="submit" value="remove" /></form></div>'
Note: See TracChangeset for help on using the changeset viewer.