跳转到主要内容

在集合结果中进行下一页/上一页导航

项目描述

The collective.nextprev package extends Plone’s next/previous navigation for folders to collections (AKA topics or smart folders). If a listing view is visited for a collection which has next/previous navigation enabled, a cookie is set to remember the collection used and any relevant query terms. When a content item in the result set is visited, this cookie will be used to determine the next and previous item links.

从一个文件夹、一些内容和一个集合开始。

>>> folder
<ATFolder at /plone/Members/test_user_1_>
>>> folder.contentValues()
[<ATTopic at /plone/Members/test_user_1_/foo-topic-title>,
 <ATNewsItem at /plone/Members/test_user_1_/foo-news-item-title>,
 <ATDocument at /plone/Members/test_user_1_/bar-page-title>,
 <ATNewsItem at /plone/Members/test_user_1_/baz-news-item-title>,
 <ATNewsItem at
  /plone/Members/test_user_1_/qux-baz-news-item-title>]

一个项目是一个页面,所以不会在集合列表中显示。

>>> folder['foo-topic-title'].queryCatalog(full_objects=True)
[<ATNewsItem at /plone/Members/test_user_1_/foo-news-item-title>,
 <ATNewsItem at /plone/Members/test_user_1_/baz-news-item-title>,
 <ATNewsItem at
  /plone/Members/test_user_1_/qux-baz-news-item-title>,
 <ATNewsItem at
  /plone/news/blah-news-item-title>]

文件夹已启用下一页/上一页导航,但主题没有。

>>> folder.getNextPreviousEnabled()
True
>>> folder['foo-topic-title'].getNextPreviousEnabled()
False

在浏览器中打开文件夹。

>>> from Products.Five.testbrowser import Browser
>>> browser = Browser()
>>> browser.handleErrors = False
>>> browser.open(folder.absolute_url())

访问新闻条目中的一个,下一个链接指向文件夹中的下一个项目,而不是集合中的下一个项目。

>>> browser.getLink('Foo News Item Title').click()
>>> browser.getLink('Next')
<Link text='Next: Bar Page Title Right arrow[IMG]'
url='http://nohost/plone/Members/test_user_1_/bar-page-title'>

打开浏览器,以可以启用集合的下一页/上一页导航的用户登录,并执行此操作。

>>> from Products.PloneTestCase import ptc
>>> owner_browser = Browser()
>>> owner_browser.handleErrors = False
>>> owner_browser.open(folder['foo-topic-title'].absolute_url())
>>> owner_browser.getLink('Log in').click()
>>> owner_browser.getControl(
...     'Login Name').value = ptc.portal_owner
>>> owner_browser.getControl(
...     'Password').value = ptc.default_password
>>> owner_browser.getControl('Log in').click()
>>> owner_browser.getLink('Edit').click()
>>> owner_browser.getControl(
...     'Enable next previous navigation').selected = True
>>> owner_browser.getControl('Save').click()
>>> print owner_browser.contents
<...
...Changes saved...

现在,下一页/上一页导航已启用,访问集合列表将设置cookie。

>>> browser.open(folder.absolute_url())
>>> browser.headers['set-cookie']
'nextprev.collection="/plone/Members/test_user_1_/foo-topic-title";
Path=/, nextprev.form="test="; Path=/'

再次访问一个项目,现在下一个链接将是集合中的下一个项目。

>>> browser.getLink('Foo News Item Title').click()
>>> browser.getLink('Next')
<Link text='Next: Baz News Item Title Right arrow[IMG]'
url='http://nohost/plone/Members/test_user_1_/baz-news-item-title'>

如果再次访问文件夹列表,下一页/上一页链接将反映文件夹内容而不是集合结果。

>>> browser.open(folder.absolute_url()+'/folder_listing')
>>> browser.headers['set-cookie']
'nextprev.collection="deleted"; Path=/; Expires=Wed,
31-Dec-97 23:59:59 GMT; Max-Age=0, nextprev.form="deleted";
Path=/; Expires=Wed, 31-Dec-97 23:59:59 GMT; Max-Age=0'
>>> browser.getLink('Foo News Item Title').click()
>>> browser.getLink('Next')
<Link text='Next: Bar Page Title Right arrow[IMG]'
url='http://nohost/plone/Members/test_user_1_/bar-page-title'>

请求中提交的搜索条件也被保存在cookie中,以便下一页/上一页链接可以反映正确的结果集。

>>> browser.open(folder.absolute_url()+'?SearchableText=baz')
>>> browser.getLink('Baz News Item Title').click()
>>> browser.getLink('Previous')
Traceback (most recent call last):
LinkNotFoundError
>>> browser.getLink('Next')
<Link text='Next: Qux Baz News Item Title Right arrow[IMG]'
url='http://nohost/plone/Members/test_user_1_/qux-baz-news-item-title'>

可以安全地查看当前集合之外的项目。

>>> browser.open(folder['foo-news-item-title'].absolute_url())
>>> browser.getLink('Previous')
Traceback (most recent call last):
LinkNotFoundError
>>> browser.getLink('Next')
Traceback (most recent call last):
LinkNotFoundError

包含在文件夹中但不在当前集合中的主题也可以安全地查看。

>>> browser.open(folder.absolute_url())
>>> browser.getLink('Previous')
Traceback (most recent call last):
LinkNotFoundError
>>> browser.getLink('Next')
Traceback (most recent call last):
LinkNotFoundError

尽管在大文件夹上没有下一页/上一页导航,但当集合列出大文件夹内的项目时,下一页/上一页链接仍然会显示。

>>> browser.open(folder.absolute_url())
>>> browser.getLink('Blah News Item Title').click()
>>> browser.getLink('Previous')
<Link text='Left arrow[IMG] Previous: Qux Baz News Item Title'
url='http://nohost/plone/Members/test_user_1_/qux-baz-news-item-title'>
>>> browser.getLink('Next')
Traceback (most recent call last):
LinkNotFoundError

变更日志

0.2 - 2009-02-10

  • 修复了一个bug,使包含在大文件夹中的项目如果设置了cookie,仍然有下一页/上一页链接。

  • 重构了各种视图和适配器。

0.1 - 2009-02-05

  • 初始发布

项目详情


下载文件

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

源分发

collective.nextprev-0.2.tar.gz (7.1 kB 查看哈希值)

上传时间

由以下组织支持