在集合结果中进行下一页/上一页导航
项目描述
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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 80134ce2d4b88e2bb42975eece26b8c37b4c4989c8ceaeca7ced2c29d97d7147 |
|
MD5 | 19c513e03bb9409d09302056c96d0092 |
|
BLAKE2b-256 | 0ef0d3e1727679875bb4aa4e2e64574bcbc8194332aa3688ad7dd2adcb121d2a |