dolmen.app.breadcrumbs 1.0b2
Breadcrumbs navigation for Dolmen applications.
dolmen.app.breadcrumbs provides a breadcrumbs navigation for the Dolmen applications. It registers a viewlet to render the links.
Getting started
>>> from grokcore.component import testing
To test the breadcrumbs' features, we need to create some content in an hypothetical application:
>>> from grokcore.content import Container >>> from zope.component.hooks import getSite >>> app = getSite() >>> app['cave'] = Container() >>> app['cave']['pot'] = Container()
To finish, we create a view. As we use a viewlet, we need a view to display something:
>>> import grokcore.view
>>> from zope.interface import Interface
>>> class simpleView(grokcore.view.View):
... grokcore.view.context(Interface)
... def render(self):
... return u'For test purposes'
>>> testing.grok_component('simpleview', simpleView)
True
Adapting
The component that allows to build URLs and Breadcrumbs is a multi adapter providing the IAbsoluteUrl interface. let's have a closer look:
>>> from zope.component import getMultiAdapter
>>> from zope.publisher.browser import TestRequest
>>> from zope.traversing.browser.interfaces import IAbsoluteURL
>>> request = TestRequest()
>>> url = getMultiAdapter((app['cave'], request), IAbsoluteURL)
>>> url
<dolmen.app.breadcrumbs.url.DescriptiveAbsoluteURL object at ...>
>>> from zope.interface.verify import verifyObject
>>> verifyObject(IAbsoluteURL, url)
True
>>> url()
'http://127.0.0.1/cave'
>>> url.breadcrumbs()
({'url': 'http://127.0.0.1', 'name': ''},
{'url': 'http://127.0.0.1/cave', 'name': u'cave'})
The breadcrumbs uses the zope.dublincore interface, IDCDescriptiveProperties, in order to get the renderable title:
>>> from zope.dublincore.interfaces import IDCDescriptiveProperties >>> adapter = IDCDescriptiveProperties(app['cave']) >>> adapter.title u''
Rendering
Now, we have some contents in our application. We can call our view and render the viewlet using its manager.
>>> from dolmen.app.layout import master >>> from dolmen.app.breadcrumbs import Breadcrumbs>>> view = getMultiAdapter((app['cave'], request), name="simpleview") >>> view <simpleView object at ...>
The Breadcrumbs viewlet is registered for the dolmen.app.layout.Top manager:
>>> manager = master.Top(app['cave'], request, view) >>> viewlet = Breadcrumbs(app['cave'], request, view, manager) >>> viewlet <dolmen.app.breadcrumbs.crumbs.Breadcrumbs object at ...>
Our contents have no title yet. If we render the viewlet, it uses the location in the parent (__name__):
>>> viewlet.update()
>>> print viewlet.render()
<div id="breadcrumb">
<span class="you-are-here">You are here :</span>
<span class="crumb">
<a href="http://127.0.0.1/cave">cave</a>
</span>
</div>
If we set a title, it uses the title:
>>> adapter = IDCDescriptiveProperties(app['cave'])
>>> adapter.title = u'My cave with a fireplace'
>>> viewlet.update()
>>> print viewlet.render()
<div id="breadcrumb">
<span class="you-are-here">You are here :</span>
<span class="crumb">
<a href="http://127.0.0.1/cave">My cave with a fireplace</a>
</span>
</div>
It works with all kind of objects, even if their metadata title is not set:
>>> app['cave']['pot']['bone'] = object()
>>> bone = app['cave']['pot']['bone']
>>> viewlet = Breadcrumbs(bone, request, view, manager)
>>> viewlet.update()
>>> print viewlet.render()
<div id="breadcrumb">
<span class="you-are-here">You are here :</span>
<span class="crumb">
<a href="http://127.0.0.1/cave">My cave with a fireplace</a>
<span class="breadcrumb-separator">→</span>
</span>
<span class="crumb">
<a href="http://127.0.0.1/cave/pot">pot</a>
<span class="breadcrumb-separator">→</span>
</span>
<span class="crumb">
<a href="http://127.0.0.1/cave/pot/bone">bone</a>
</span>
</div>
If the object is not locatable, we raise a TypeError:
>>> unlocatable = Container() >>> viewlet = Breadcrumbs(unlocatable, request, view, manager) >>> viewlet.update() Traceback (most recent call last): ... TypeError: There isn't enough context to get URL information. This is probably due to a bug in setting up location information.
Changelog
1.0b2 (2011-01-18)
- Added German translation.
1.0b1 (2010-07-08)
- Tests no longer use IBaseContent from dolmen.content.
- Added translations (French).
0.2 (2010-02-26)
- The Breadcrumbs now uses an adaptation to the zope.dublincore IDCDescriptiveProperties interface in order to provide a name. The base multi adapter is registered for zope.location ILocation. Therefore, the Breadcrumbs is no longer limited to dolmen.content IBaseContent components.
- The dependencies have been greatly cleaned. We are now using a Grok 1.1rc1 version of the ZTK. We no longer depend on zope.app packages.
- Updated the IAbsoluteUrl component to match the changes in zope.traversing. The View has been removed and replace by a simple MultiAdapter providing IAbsoluteUrl.
0.1 (2009-11-08)
- Initial release
| File | Type | Py Version | Uploaded on | Size | # downloads |
|---|---|---|---|---|---|
| dolmen.app.breadcrumbs-1.0b2.tar.gz (md5) | Source | 2011-01-18 | 7KB | 431 | |
- Author: Souheil Chelfouh
- Home Page: http://gitweb.dolmen-project.org
- Keywords: Grok Zope3 CMS Dolmen
- License: GPL
- Platform: Any
- Categories
- Package Index Owner: trollfot, cklinger
- DOAP record: dolmen.app.breadcrumbs-1.0b2.xml
