跳转到主要内容

Dolmen应用程序的面包屑导航。

项目描述

dolmen.app.breadcrumbs 为Dolmen应用程序提供面包屑导航。它注册了一个视图小部件来渲染链接。

入门

要测试面包屑的功能,我们需要创建一些内容。我们在这里使用 dolmen.content 内容,因为我们的面包屑行为仅适用于 IBaseContent 对象。

>>> import dolmen.content
>>> from grokcore.component import testing

>>> class Container(dolmen.content.Container):
...    dolmen.content.name('A dummy container')

>>> testing.grok_component('container', Container)
True

现在,我们在一个假设的应用程序中创建我们的内容。

>>> from zope.component.hooks import getSite

>>> app = getSite()
>>> app['cave'] = Container()
>>> app['cave']['pot'] = Container()

最后,我们创建一个视图。由于我们使用视图小部件,我们需要一个视图来显示某些内容。

>>> import grokcore.view

>>> class simpleView(grokcore.view.View):
...   grokcore.view.context(dolmen.content.IBaseContent)
...   def render(self):
...     return u'For test purposes'

>>> testing.grok_component('simpleview', simpleView)
True

适配

允许构建URL和面包屑的组件是一个提供 IAbsoluteUrl 接口的多适配器。让我们更仔细地看看。

>>> 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'})

渲染

现在,在我们的应用程序中我们有了一些内容。我们可以调用我们的视图并使用其管理器渲染视图小部件。

>>> from dolmen.app.layout import master
>>> from dolmen.app.breadcrumbs import Breadcrumbs
>>> view = getMultiAdapter((app['cave'], request), name="simpleview")
>>> view
<simpleView object at ...>

面包屑视图小部件已注册为 dolmen.app.layout.Top 管理器。

>>> manager = master.Top(app['cave'], request, view)
>>> viewlet = Breadcrumbs(app['cave'], request, view, manager)
>>> viewlet
<dolmen.app.breadcrumbs.crumbs.Breadcrumbs object at ...>

我们的内容还没有标题。如果我们渲染视图小部件,它将使用父级的位置(__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>

如果我们设置一个标题,它将使用该标题。

>>> app['cave'].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>

它与所有类型的对象一起工作,尽管标题仅用于提供 dolmen.content.IBaseContent 的对象。

>>> 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">&rarr;</span>
  </span>
  <span class="crumb">
    <a href="http://127.0.0.1/cave/pot">pot</a>
    <span class="breadcrumb-separator">&rarr;</span>
  </span>
  <span class="crumb">
    <a href="http://127.0.0.1/cave/pot/bone">bone</a>
  </span>
</div>

如果对象无法定位,我们将引发一个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.

变更日志

0.2 (2010-02-26)

  • 现在Breadcrumbs使用了针对zope.dublincore IDCDescriptiveProperties接口的适配,以提供名称。基本多适配器已注册为zope.location ILocation。因此,Breadcrumbs不再局限于dolmen.content IBaseContent组件。

  • 依赖关系已得到极大清理。我们现在使用ZTK的Grok 1.1rc1版本。我们不再依赖于zope.app包。

  • 更新了IAbsoluteUrl组件,以匹配zope.traversing的更改。视图已被移除,并由一个简单的MultiAdapter提供IAbsoluteUrl。

0.1 (2009-11-08)

  • 首次发布

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分布

dolmen.app.breadcrumbs-0.2.tar.gz (6.7 kB 查看散列)

上传时间 源代码

由以下提供支持