work in progress: breadcrumbs

This commit is contained in:
Helmut Merz 2011-11-25 09:02:14 +01:00
parent a2bc7f570d
commit 705b4a6f2d
6 changed files with 38 additions and 5 deletions

View file

@ -649,6 +649,23 @@ to the bottom, and to the top.
['m111', 'm114', 'm112', 'm113']
Breadcrumbs
-----------
>>> view = NodeView(m112, TestRequest())
>>> view.breadcrumbs()
[]
>>> loopsRoot.options = ['showBreadcrumbs']
>>> m114.nodeType = 'page'
>>> m114.target = cc1
>>> view = NodeView(m114, TestRequest())
>>> view.breadcrumbs()
[{'url': 'http://127.0.0.1/loops/views/m1', 'label': u'Menu'},
{'url': 'http://127.0.0.1/loops/views/m1/m11', 'label': u'Zope'},
{'url': 'http://127.0.0.1/loops/views/m1/m11/m114', 'label': u''}]
End-user Forms and Special Views
================================

View file

@ -18,8 +18,6 @@
"""
Common base class for loops browser view classes.
$Id$
"""
from cgi import parse_qs, parse_qsl
@ -146,6 +144,9 @@ class BaseView(GenericView, I18NView):
return self.controller.getTemplateMacros('resource', resource_macros)
#return resource_macros.macros
def breadcrumbs(self):
return []
@Lazy
def name(self):
return getName(self.context)

View file

@ -36,7 +36,7 @@ from zope.lifecycleevent import ObjectCreatedEvent, ObjectModifiedEvent
from zope.lifecycleevent import Attributes
from zope.formlib.form import Form, FormFields
from zope.proxy import removeAllProxies
from zope.publisher.defaultview import getDefaultViewName
from zope.app.publisher.browser import getDefaultViewName
from zope.security import canAccess, canWrite, checkPermission
from zope.security.proxy import removeSecurityProxy
from zope.traversing.api import getParent, getParents, getPath
@ -91,6 +91,10 @@ class NodeView(BaseView):
self.recordAccess()
return result
@Lazy
def title(self):
return self.context.title or getName(self.context)
def breadcrumbs(self):
if not self.globalOptions('showBreadcrumbs'):
return []
@ -100,6 +104,13 @@ class NodeView(BaseView):
if menuItem != menu.context:
data.append(dict(label=menuItem.title,
url=absoluteURL(menuItem, self.request)))
for p in getParents(menuItem):
if p == menu.context:
break
data.insert(1, dict(label=p.title,
url=absoluteURL(p, self.request)))
if self.virtualTarget:
data.extend(self.virtualTarget.breadcrumbs())
return data
def recordAccess(self, viewName=''):

View file

@ -29,10 +29,11 @@
<metal:breadcrumbs define-slot="breadcrumbs">
<div tal:define="crumbs view/breadcrumbs"
tal:condition="crumbs">
<span i18n:translate="">You are here:</span>
<span tal:repeat="crumb crumbs">
<a tal:attributes="href crumb/url"
tal:content="crumb/label" />
<span tal:condition="not:repeat/crumb/end"> / </span></span>
<span tal:condition="not:repeat/crumb/end"> > </span></span>
</div></metal:breadcrumbs>
<div metal:define-slot="actions"></div>
<div metal:define-slot="message"></div>

Binary file not shown.

View file

@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: $Id$\n"
"POT-Creation-Date: 2007-05-22 12:00 CET\n"
"PO-Revision-Date: 2011-10-31 12:00 CET\n"
"PO-Revision-Date: 2011-11-19 12:00 CET\n"
"Last-Translator: Helmut Merz <helmutm@cy55.de>\n"
"Language-Team: loops developers <helmutm@cy55.de>\n"
"MIME-Version: 1.0\n"
@ -11,6 +11,9 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: kwrite\n"
msgid "You are here:"
msgstr "Sie sind hier:"
msgid "Concept"
msgstr "Begriff"