=============================================================================
Listing and working with Plone content objects using plone.app.contentlisting
=============================================================================
This is valid for Plone 4.1 upwards.
Many of the operations for customizations, templates, views and portlets in
Plone are related to lists of content objects. Their sources can be different,
although usually they are some sort of catalog search, the contents of a
particular folder or a list of objects from a relation.
To make it simpler to work with these, we have made plone.app.contentlisting,
which ensures that lists of content objects always behave in the same way and
according to predefined interfaces, regardless of what the source of the
objects are. The integrator shouldn't have to care whether the list of objects
came from the catalog, an ORM or they are the actual objects.
Making or getting a contentListing
----------------------------------
The typical way to get a contentlisting is to call one of two built-in views:
Listing the contents of a Folder or Collection
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
In Page templates getting the contents of a folder or the results of a
collection is as simple as this::
context/@@contentlisting
Every template-writer's dream ;)
.. note::
In previous versions there was only support to list the contents of a
folder with ``context/@@folderListing``. There was no collection support.
The ``@@folderListing`` view is kept for compatibility, but we encourage
you to use the ``@@contentlisting`` instead.
A real example of listing the titles of the content objects of a folder::
<ul>
<li tal:repeat="item context/@@contentlisting" tal:content="item/Title"/>
</ul>
The context in which it is called defines which folder is listed or which
collection results are queried.
You can also use Python expressions to be able to pass parameters, like which
content type or review state you want to use::
<li tal:repeat="item python:context.restrictedTraverse('@@contentlisting')(portal_type='Document')">
Batching can be done like this::
<ul tal:define="
Batch python:modules['Products.CMFPlone'].Batch;
b_size python:int(request.get('b_size', 20));
b_start python:int(request.get('b_start', 0));
results python:context.restrictedTraverse('@@contentlisting')(batch=True, b_size=b_size, b_start=b_start);
batch python:Batch(results, b_size, b_start);">
<li tal:repeat="item results"
tal:content="item/Title" />
<div metal:use-macro="context/batch_macros/macros/navigation" />
</ul>
Note that you iterate directly over the results that you get from
``@@contentlisting``. The definition of ``batch`` is only used in the
``batch_macros`` call.
In Python a ContentListing of a particular folder's contents can be fetched
by using::
>>> path.to.your.folder.restrictedTraverse('@@contentlisting')()
Exactly the same for collections::
>>> path.to.your.collection.restrictedTraverse('@@contentlisting')()
The contentlisting view called above implements all the logic the old
getFolderContents script in Plone used to do. The old script has been left in
place to not break compatibility for customizations and add-ons that might
depend on its particular return values.
Rolling your own with adaption
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
At the time of writing, all parts of Plone do not yet return 'contentlistings'
when asked for lists of content. It was impossible to change this everywhere
without breaking backwards compatibility. Therefore you may have to convert
your sequence of stuff to a contentlisting manually.
To do this, you need to import and adapt::
>>> from plone.app.contentlisting.interfaces import IContentListing
>>> catalog = getToolByName(self.portal, 'portal_catalog')
>>> results = catalog.searchResults()
>>> contentlist = IContentListing(results)
>>> print(contentlist)
<plone.app.contentlisting.contentlisting.ContentListing object ...>
The contentListing, its properties and behaviors
------------------------------------------------
Now, you no longer need to worry whether you have a bunch of catalog brains or
the actual objects (or fake objects for that sake). As long as you have a
contentlisting, you know what you can expect from it. You also know what you
can expect from each item within it - a content listing object.
The content listing is a normal iterator that we can loop over and do all sorts
of stuff you normally can do with sequences.
contentListingObjects, the items inside the sequence
-----------------------------------------------------
The `contentListingObjects` are wrapper objects, each representing a content
object in the site. Their intention is to be predictable so you can always call
at least a common base set of methods on the objects listed.
You do not have to be aware whether the object originates from a brain, a full
object or something else. If you try to call a method or access an attribute of
the object and the wrapper is not aware of it, it will silently fetch the real
object and delegate the call to it. This means you can treat your objects as
you would any other -- even writing to it.
Methods of contentlistingObjects
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
getId() -
Returns the object id in its container for example `my-example-page`.
getObject() -
Returns the real object
def getDataOrigin() -
The origin of the data for the object.
getPath() -
Path to the object, relative to the site root for example
``/artifacts/my-example-page``
getURL()-
Full url to the object, including the site root for example
``http://my.site.com/artifacts/my-example-page``
uuid() -
Unique content identifier for example an uuid from `plone.uuid` The only real
point of it is to be unique. It can for example look like this
`b0e80776-d41d-4f48-bf9e-7cb1aebabad5`.
getSize() -
Size in bytes for example `24`.
review_state() -
Workflow review state for example `published`.
ContentTypeClass() -
A normalized type name that identifies the object in listings. Used for CSS
styling, for example `content-type-page`.
Title() -
Return a single string, the DCMI Title element (resource name).
For example `My example page`.
Description() -
Return the DCMI Description element (resource summary). Result is a natural
language description of this object. Description is a plain text string
describing the object. It should not contain HTML or similar.
Type() -
Return the DCMI Type element (resource type). Result is a human-readable
message id for the resource (typically the Title of its type info object).
For example `u'Page'` from the `plone` domain.
listCreators() -
Return a sequence of DCMI Creator elements (resource authors).
Depending on the implementation, this returns the full name(s) of the
author(s) of the content object or their ids. For example `Jane Smith`.
Creator() -
Return the first DCMI Creator element, or an empty string.
For example `Jane Smith`.
Subject() -
Return a sequence of DCMI Subject elements (resource keywords).
Result is zero or more keywords associated with the content object.
These are the tags in Plone. For example ``['Ecology', 'Sustainability']``.
Publisher() -
Return the DCMI Publisher element (resource publisher). Result is the full
formal name of the entity or person responsible for publishing the resource.
For example `Plone Foundation`.
listContributors() -
Return a sequence of DCMI Contributor elements (resource collaborators).
Return zero or more collaborators (beyond those returned by `listCreators`).
Contributors() -
Deprecated alias for `listContributors`.
Date(zone=None) -
Return the DCMI Date element (default resource date). Result is a string,
formatted 'YYYY-MM-DD H24:MN:SS TZ'. The zone keyword is not yet supported
(but is part of the DublinCore interface and has to stay)
CreationDate(zone=None) -
Return the DCMI Date element (date resource created). Result is a string,
formatted 'YYYY-MM-DD H24:MN:SS TZ'. The zone keyword is not yet supported
(but is part of the DublinCore interface and has to stay)
EffectiveDate(zone=None) -
Return the DCMI Date element (date resource becomes effective). Result is a
string, formatted 'YYYY-MM-DD H24:MN:SS TZ', or None. The zone keyword is
not yet supported (but is part of the DublinCore interface and has to stay)
ExpirationDate(zone=None) -
Return the DCMI Date element (date resource expires). Result is a string,
formatted 'YYYY-MM-DD H24:MN:SS TZ', or None. The zone keyword is not yet
supported (but is part of the DublinCore interface and has to stay)
ModificationDate(zone=None) -
DCMI Date element - date resource last modified. Result is a string,
formatted 'YYYY-MM-DD H24:MN:SS TZ'. The zone keyword is not yet supported
(but is part of the DublinCore interface and has to stay)
Format() -
Return the DCMI Format element (resource format).
Result is the resource's MIME type (e.g. `text/html`, `image/png`, etc.).
Identifier() -
Return the DCMI Identifier element (resource ID). Result is a unique ID
(a URL) for the resource.
Language() -
DCMI Language element (resource language). Result it the RFC language code
(e.g. `en-US`, `pt-BR`) for the resource.
Rights() -
Return the DCMI Rights element (resource copyright). Return a string
describing the intellectual property status, if any, of the resource.
isVisibleInNav() -
Return whether this object will be visible in a navigation view.
MimeTypeIcon():
Return mimetype icon from mimetype registry if contenttype is
File else None.
Changelog
=========
.. You should *NOT* be adding new change log entries to this file.
You should create a file in the news directory instead.
For helpful instructions, please see:
https://github.com/plone/plone.releaser/blob/master/ADD-A-NEWS-ITEM.rst
.. towncrier release notes start
3.0.5 (2024-04-16)
------------------
Bug fixes:
- Support image_scales in RealContentListingObject. @davisagli (#64)
3.0.4 (2023-10-07)
------------------
Internal:
- Update configuration files.
[plone devs] (cfffba8c)
3.0.3 (2023-04-15)
------------------
Internal:
- Drop p.a.contenttypes install dependency, it is actually a soft one only.
This allows to break a cyclic dependency.
[gforcada] (#3764)
3.0.2 (2023-04-06)
------------------
Internal:
- Update configuration files.
[plone devs] (#47959565)
3.0.1 (2022-12-05)
------------------
Bug fixes:
- In RealContentListingObject.__getattr__ check attribute existence without acquisition but return the attribute with acquisition in case it is a method that needs acquisition. [gbastien] (#47)
3.0.0 (2022-11-30)
------------------
Bug fixes:
- Final release.
[gforcada] (#600)
3.0.0b1 (2022-08-30)
--------------------
Bug fixes:
- Build mime-type icon url with the absolute url. Fixes #44
[erral] (#44)
3.0.0a1 (2022-05-14)
--------------------
Breaking changes:
- Drop Python 2 and Plone 5.2, use plone.base.
[jensens] (#43)
2.0.7 (2022-03-09)
------------------
Bug fixes:
- realobject: Do not throw an AttributeError when accessing attributes which return ``None``. (#42)
2.0.6 (2022-01-07)
------------------
Bug fixes:
- Do not throw an error when the contenttype is not in the mimetypes_registry.
[tschorr] (#41)
2.0.5 (2021-11-23)
------------------
Bug fixes:
- Adapt the tests for Plone 6 [ale-rt] (#39)
2.0.4 (2021-09-15)
------------------
Bug fixes:
- Remove cyclic dependency with Products.CMFPlone
[ericof] (#37)
2.0.3 (2020-09-26)
------------------
Bug fixes:
- Fixed deprecation warning for LazyCat/LazyMap.
[maurits] (#3130)
2.0.2 (2020-04-20)
------------------
Bug fixes:
- Minor packaging updates. (#1)
2.0.1 (2020-03-21)
------------------
Bug fixes:
- Minor packaging updates. [various] (#1)
- Initialize towncrier.
[gforcada] (#2548)
2.0.0 (2018-10-30)
------------------
Breaking changes:
- Remove Python2.6 support.
[ale-rt]
New features:
- Python 3 support
[hvelarde, gforcada, davisagli]
- Use human_readable_size from Products.CMFPlone.utils to replace getObjSize
script. #1801
[reinhardt]
Bug fixes:
- In Zope4 brains can not longer acquire the REQUEST.
[pbauer]
- Fix tests after collective.indexing moved into core.
[pbauer]
1.3.1 (2017-08-08)
------------------
Bug fixes:
- fixes code conventions
[loechel]
- Fix Lookup of review_state on objects that do not have an review_state, example related_items that are files could be such.
[loechel]
1.3.0 (2017-07-03)
------------------
New features:
- provide Mimetype icon path for file types in contentlisting object
https://github.com/plone/Products.CMFPlone/issues/1734
[fgrcon]
1.2.9 (2017-05-06)
------------------
Bug fixes:
- Remove hasattr.
[ivanteoh]
1.2.8 (2016-11-19)
------------------
Bug fixes:
- Remove ZopeTestCase.
[ivanteoh, maurits]
1.2.7 (2016-08-19)
------------------
Bug fixes:
- Make ``getSize`` work on RealContentListingObject on types w/o any Primaryfield.
[jensens]
1.2.6 (2016-07-05)
------------------
Bug fixes:
- Added missing implementation for getSize on RealContentListingObject.
Interface was not fulfilled here.
[jensens]
1.2.5 (2016-05-12)
------------------
Fixes:
- Removed docstrings from some methods to avoid publishing them. From
Products.PloneHotfix20160419. [maurits]
1.2.4 (2016-02-08)
------------------
Fixes:
- Minor cleanup (decorator, utf8 header, ...), removed unused imports and
fixed dependencies.
[jensens]
1.2.3 (2015-11-25)
------------------
Fixes:
- In tests, use ``selection.any`` in querystrings.
Issue https://github.com/plone/Products.CMFPlone/issues/1040
[maurits]
- Cleanup and rework: contenttype-icons and showing thumbnails
for images/leadimages in listings
https://github.com/plone/Products.CMFPlone/issues/1226
[fgrcon]
1.2.2 (2015-09-20)
------------------
- ids_not_to_list has been removed. Use the exclude from navigation
setting instead.
[jensens]
1.2.1 (2015-09-11)
------------------
- Implement cropping for CroppedDescription.
[pbauer]
1.2 (2015-07-18)
----------------
- Introduce ``@@contentlisting`` view, which is also supports Collections from
plone.app.contenttypes including filtering of results. This gives us a
unified interface for listing content from Folders or Collections.
Deprecate ``@@folderListing``, which is kept for BBB compatibility.
[thet]
1.1.3 (2015-05-05)
------------------
- Make isVisibleInNav method read navigation displayed types settings from
plone.app.registry instead of portal properties. This fixes
https://github.com/plone/Products.CMFPlone/issues/454.
[timo]
1.1.2 (2015-05-05)
------------------
- Pep8.
[thet]
1.1.1 (2015-03-13)
------------------
- Add remaining, implemented but missing IContentListing interface methods.
[thet]
- forward getURL's relative kw for contentlistings (plone4 compat)
[kiorky]
1.1.0 (2014-04-16)
------------------
- Use proper styleguide for headings.
[polyester]
- Move README to /docs folder.
[polyester]
- Replace deprecated test assert statements.
[tisto]
- Removing language tests and fixing icon tests to get the correct images.
[bloodbare]
- Use PLONE_APP_CONTENTTYPES fixture for Plone 5.
[tisto]
1.0.5 (2013-08-13)
------------------
- Add missing getDataOrigin method to interfaces.
[timo]
1.0.4 (2013-01-01)
------------------
- Nothing changed.
1.0.3 (2012-10-29)
------------------
- Whoever heard I liked batching was wrong. The Catalog results are
already batched, so don't batch them again.
[lentinj]
1.0.2 (2012-10-15)
------------------
- Nothing changed.
1.0.1 (2012-04-15)
------------------
- Change ContentTypeClass to return contenttype-{portal_type} to match
what the rest of Plone expects. This fixes sprite based icons for
pages/documents.
[gaudenz]
1.0 - 2011-07-19
----------------
- Removed `searchResults` view and related code. Search is handled inside
`plone.app.search`.
[hannosch]
- Renamed `uniqueIdentifier` method to `uuid` for shorter and more consistent
naming with `plone.uuid`.
[hannosch]
0.1b2 - 2011-04-15
------------------
- Unit tests for appendViewAction, compare against portal_type rather than Type.
[lentinj]
- Handle RealContentListingObject objects in isVisibleFromNav,
appendViewAction. Remove memoise, isn't going to cache anything for a useful
amount of time.
[lentinj]
0.1b1 - 2011-04-15
------------------
- Add an isVisibleFromNav method, based on http://siarp.de/node/201, use
memoise to cache lookup of portal_properties
[lentinj]
- Add MANIFEST.in.
[WouterVH]
0.1a1 - 2011-03-02
------------------
- Initial release
Raw data
{
"_id": null,
"home_page": "https://pypi.org/project/plone.app.contentlisting",
"name": "plone.app.contentlisting",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": "content list Plone",
"author": "Plone Foundation",
"author_email": "plone-developers@lists.sourceforge.net",
"download_url": "https://files.pythonhosted.org/packages/62/a3/276070785e3fc766bad1d8b067548d18476eb2e3e2142bbfa14600d5b3df/plone.app.contentlisting-3.0.5.tar.gz",
"platform": null,
"description": "=============================================================================\nListing and working with Plone content objects using plone.app.contentlisting\n=============================================================================\n\nThis is valid for Plone 4.1 upwards.\n\nMany of the operations for customizations, templates, views and portlets in\nPlone are related to lists of content objects. Their sources can be different,\nalthough usually they are some sort of catalog search, the contents of a\nparticular folder or a list of objects from a relation.\n\nTo make it simpler to work with these, we have made plone.app.contentlisting,\nwhich ensures that lists of content objects always behave in the same way and\naccording to predefined interfaces, regardless of what the source of the\nobjects are. The integrator shouldn't have to care whether the list of objects\ncame from the catalog, an ORM or they are the actual objects.\n\n\nMaking or getting a contentListing\n----------------------------------\n\nThe typical way to get a contentlisting is to call one of two built-in views:\n\n\nListing the contents of a Folder or Collection\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nIn Page templates getting the contents of a folder or the results of a\ncollection is as simple as this::\n\n context/@@contentlisting\n\nEvery template-writer's dream ;)\n\n.. note::\n\n In previous versions there was only support to list the contents of a\n folder with ``context/@@folderListing``. There was no collection support.\n The ``@@folderListing`` view is kept for compatibility, but we encourage\n you to use the ``@@contentlisting`` instead.\n \n\n\nA real example of listing the titles of the content objects of a folder::\n\n <ul>\n <li tal:repeat=\"item context/@@contentlisting\" tal:content=\"item/Title\"/>\n </ul>\n\nThe context in which it is called defines which folder is listed or which\ncollection results are queried.\n\nYou can also use Python expressions to be able to pass parameters, like which\ncontent type or review state you want to use::\n\n <li tal:repeat=\"item python:context.restrictedTraverse('@@contentlisting')(portal_type='Document')\">\n\nBatching can be done like this::\n\n <ul tal:define=\"\n Batch python:modules['Products.CMFPlone'].Batch;\n b_size python:int(request.get('b_size', 20));\n b_start python:int(request.get('b_start', 0));\n results python:context.restrictedTraverse('@@contentlisting')(batch=True, b_size=b_size, b_start=b_start);\n batch python:Batch(results, b_size, b_start);\">\n <li tal:repeat=\"item results\"\n tal:content=\"item/Title\" />\n <div metal:use-macro=\"context/batch_macros/macros/navigation\" />\n </ul>\n\nNote that you iterate directly over the results that you get from\n``@@contentlisting``. The definition of ``batch`` is only used in the\n``batch_macros`` call.\n\nIn Python a ContentListing of a particular folder's contents can be fetched\nby using::\n\n >>> path.to.your.folder.restrictedTraverse('@@contentlisting')()\n\nExactly the same for collections::\n\n >>> path.to.your.collection.restrictedTraverse('@@contentlisting')()\n\nThe contentlisting view called above implements all the logic the old\ngetFolderContents script in Plone used to do. The old script has been left in\nplace to not break compatibility for customizations and add-ons that might\ndepend on its particular return values.\n\n\nRolling your own with adaption\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nAt the time of writing, all parts of Plone do not yet return 'contentlistings'\nwhen asked for lists of content. It was impossible to change this everywhere\nwithout breaking backwards compatibility. Therefore you may have to convert\nyour sequence of stuff to a contentlisting manually.\n\nTo do this, you need to import and adapt::\n\n >>> from plone.app.contentlisting.interfaces import IContentListing\n >>> catalog = getToolByName(self.portal, 'portal_catalog')\n >>> results = catalog.searchResults()\n >>> contentlist = IContentListing(results)\n >>> print(contentlist)\n <plone.app.contentlisting.contentlisting.ContentListing object ...>\n\n\nThe contentListing, its properties and behaviors\n------------------------------------------------\n\nNow, you no longer need to worry whether you have a bunch of catalog brains or\nthe actual objects (or fake objects for that sake). As long as you have a\ncontentlisting, you know what you can expect from it. You also know what you\ncan expect from each item within it - a content listing object.\n\nThe content listing is a normal iterator that we can loop over and do all sorts\nof stuff you normally can do with sequences.\n\n\ncontentListingObjects, the items inside the sequence\n-----------------------------------------------------\n\nThe `contentListingObjects` are wrapper objects, each representing a content\nobject in the site. Their intention is to be predictable so you can always call\nat least a common base set of methods on the objects listed.\n\nYou do not have to be aware whether the object originates from a brain, a full\nobject or something else. If you try to call a method or access an attribute of\nthe object and the wrapper is not aware of it, it will silently fetch the real\nobject and delegate the call to it. This means you can treat your objects as\nyou would any other -- even writing to it.\n\n\nMethods of contentlistingObjects\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\ngetId() -\n Returns the object id in its container for example `my-example-page`.\n\ngetObject() -\n Returns the real object\n\ndef getDataOrigin() -\n The origin of the data for the object.\n\ngetPath() -\n Path to the object, relative to the site root for example\n ``/artifacts/my-example-page``\n\ngetURL()-\n Full url to the object, including the site root for example\n ``http://my.site.com/artifacts/my-example-page``\n\nuuid() -\n Unique content identifier for example an uuid from `plone.uuid` The only real\n point of it is to be unique. It can for example look like this\n `b0e80776-d41d-4f48-bf9e-7cb1aebabad5`.\n\ngetSize() -\n Size in bytes for example `24`.\n\nreview_state() -\n Workflow review state for example `published`.\n\nContentTypeClass() -\n A normalized type name that identifies the object in listings. Used for CSS\n styling, for example `content-type-page`.\n\nTitle() -\n Return a single string, the DCMI Title element (resource name).\n For example `My example page`.\n\nDescription() -\n Return the DCMI Description element (resource summary). Result is a natural\n language description of this object. Description is a plain text string\n describing the object. It should not contain HTML or similar.\n\nType() -\n Return the DCMI Type element (resource type). Result is a human-readable\n message id for the resource (typically the Title of its type info object).\n For example `u'Page'` from the `plone` domain.\n\nlistCreators() -\n Return a sequence of DCMI Creator elements (resource authors).\n Depending on the implementation, this returns the full name(s) of the\n author(s) of the content object or their ids. For example `Jane Smith`.\n\nCreator() -\n Return the first DCMI Creator element, or an empty string.\n For example `Jane Smith`.\n\nSubject() -\n Return a sequence of DCMI Subject elements (resource keywords).\n Result is zero or more keywords associated with the content object.\n These are the tags in Plone. For example ``['Ecology', 'Sustainability']``.\n\nPublisher() -\n Return the DCMI Publisher element (resource publisher). Result is the full\n formal name of the entity or person responsible for publishing the resource.\n For example `Plone Foundation`.\n\nlistContributors() -\n Return a sequence of DCMI Contributor elements (resource collaborators).\n Return zero or more collaborators (beyond those returned by `listCreators`).\n\nContributors() -\n Deprecated alias for `listContributors`.\n\nDate(zone=None) -\n Return the DCMI Date element (default resource date). Result is a string,\n formatted 'YYYY-MM-DD H24:MN:SS TZ'. The zone keyword is not yet supported\n (but is part of the DublinCore interface and has to stay)\n\nCreationDate(zone=None) -\n Return the DCMI Date element (date resource created). Result is a string,\n formatted 'YYYY-MM-DD H24:MN:SS TZ'. The zone keyword is not yet supported\n (but is part of the DublinCore interface and has to stay)\n\nEffectiveDate(zone=None) -\n Return the DCMI Date element (date resource becomes effective). Result is a\n string, formatted 'YYYY-MM-DD H24:MN:SS TZ', or None. The zone keyword is\n not yet supported (but is part of the DublinCore interface and has to stay)\n\nExpirationDate(zone=None) -\n Return the DCMI Date element (date resource expires). Result is a string,\n formatted 'YYYY-MM-DD H24:MN:SS TZ', or None. The zone keyword is not yet\n supported (but is part of the DublinCore interface and has to stay)\n\nModificationDate(zone=None) -\n DCMI Date element - date resource last modified. Result is a string,\n formatted 'YYYY-MM-DD H24:MN:SS TZ'. The zone keyword is not yet supported\n (but is part of the DublinCore interface and has to stay)\n\nFormat() -\n Return the DCMI Format element (resource format).\n Result is the resource's MIME type (e.g. `text/html`, `image/png`, etc.).\n\nIdentifier() -\n Return the DCMI Identifier element (resource ID). Result is a unique ID\n (a URL) for the resource.\n\nLanguage() -\n DCMI Language element (resource language). Result it the RFC language code\n (e.g. `en-US`, `pt-BR`) for the resource.\n\nRights() -\n Return the DCMI Rights element (resource copyright). Return a string\n describing the intellectual property status, if any, of the resource.\n\nisVisibleInNav() -\n Return whether this object will be visible in a navigation view.\n\nMimeTypeIcon():\n Return mimetype icon from mimetype registry if contenttype is\n File else None.\n\nChangelog\n=========\n\n.. You should *NOT* be adding new change log entries to this file.\n You should create a file in the news directory instead.\n For helpful instructions, please see:\n https://github.com/plone/plone.releaser/blob/master/ADD-A-NEWS-ITEM.rst\n\n.. towncrier release notes start\n\n3.0.5 (2024-04-16)\n------------------\n\nBug fixes:\n\n\n- Support image_scales in RealContentListingObject. @davisagli (#64)\n\n\n3.0.4 (2023-10-07)\n------------------\n\nInternal:\n\n\n- Update configuration files.\n [plone devs] (cfffba8c)\n\n\n3.0.3 (2023-04-15)\n------------------\n\nInternal:\n\n\n- Drop p.a.contenttypes install dependency, it is actually a soft one only.\n This allows to break a cyclic dependency.\n [gforcada] (#3764)\n\n\n3.0.2 (2023-04-06)\n------------------\n\nInternal:\n\n\n- Update configuration files.\n [plone devs] (#47959565)\n\n\n3.0.1 (2022-12-05)\n------------------\n\nBug fixes:\n\n\n- In RealContentListingObject.__getattr__ check attribute existence without acquisition but return the attribute with acquisition in case it is a method that needs acquisition. [gbastien] (#47)\n\n\n3.0.0 (2022-11-30)\n------------------\n\nBug fixes:\n\n\n- Final release.\n [gforcada] (#600)\n\n\n3.0.0b1 (2022-08-30)\n--------------------\n\nBug fixes:\n\n\n- Build mime-type icon url with the absolute url. Fixes #44\n [erral] (#44)\n\n\n3.0.0a1 (2022-05-14)\n--------------------\n\nBreaking changes:\n\n\n- Drop Python 2 and Plone 5.2, use plone.base.\n [jensens] (#43)\n\n\n2.0.7 (2022-03-09)\n------------------\n\nBug fixes:\n\n\n- realobject: Do not throw an AttributeError when accessing attributes which return ``None``. (#42)\n\n\n2.0.6 (2022-01-07)\n------------------\n\nBug fixes:\n\n\n- Do not throw an error when the contenttype is not in the mimetypes_registry.\n [tschorr] (#41)\n\n\n2.0.5 (2021-11-23)\n------------------\n\nBug fixes:\n\n\n- Adapt the tests for Plone 6 [ale-rt] (#39)\n\n\n2.0.4 (2021-09-15)\n------------------\n\nBug fixes:\n\n\n- Remove cyclic dependency with Products.CMFPlone\n [ericof] (#37)\n\n\n2.0.3 (2020-09-26)\n------------------\n\nBug fixes:\n\n\n- Fixed deprecation warning for LazyCat/LazyMap.\n [maurits] (#3130)\n\n\n2.0.2 (2020-04-20)\n------------------\n\nBug fixes:\n\n\n- Minor packaging updates. (#1)\n\n\n2.0.1 (2020-03-21)\n------------------\n\nBug fixes:\n\n\n- Minor packaging updates. [various] (#1)\n- Initialize towncrier.\n [gforcada] (#2548)\n\n\n2.0.0 (2018-10-30)\n------------------\n\nBreaking changes:\n\n- Remove Python2.6 support.\n [ale-rt]\n\nNew features:\n\n- Python 3 support\n [hvelarde, gforcada, davisagli]\n- Use human_readable_size from Products.CMFPlone.utils to replace getObjSize\n script. #1801\n [reinhardt]\n\nBug fixes:\n\n- In Zope4 brains can not longer acquire the REQUEST.\n [pbauer]\n\n- Fix tests after collective.indexing moved into core.\n [pbauer]\n\n\n1.3.1 (2017-08-08)\n------------------\n\nBug fixes:\n\n- fixes code conventions\n [loechel]\n\n- Fix Lookup of review_state on objects that do not have an review_state, example related_items that are files could be such.\n [loechel]\n\n\n1.3.0 (2017-07-03)\n------------------\n\nNew features:\n\n- provide Mimetype icon path for file types in contentlisting object\n https://github.com/plone/Products.CMFPlone/issues/1734\n [fgrcon]\n\n\n1.2.9 (2017-05-06)\n------------------\n\nBug fixes:\n\n- Remove hasattr.\n [ivanteoh]\n\n\n1.2.8 (2016-11-19)\n------------------\n\nBug fixes:\n\n- Remove ZopeTestCase.\n [ivanteoh, maurits]\n\n\n1.2.7 (2016-08-19)\n------------------\n\nBug fixes:\n\n- Make ``getSize`` work on RealContentListingObject on types w/o any Primaryfield.\n [jensens]\n\n\n1.2.6 (2016-07-05)\n------------------\n\nBug fixes:\n\n- Added missing implementation for getSize on RealContentListingObject.\n Interface was not fulfilled here.\n [jensens]\n\n\n1.2.5 (2016-05-12)\n------------------\n\nFixes:\n\n- Removed docstrings from some methods to avoid publishing them. From\n Products.PloneHotfix20160419. [maurits]\n\n\n1.2.4 (2016-02-08)\n------------------\n\nFixes:\n\n- Minor cleanup (decorator, utf8 header, ...), removed unused imports and\n fixed dependencies.\n [jensens]\n\n\n1.2.3 (2015-11-25)\n------------------\n\nFixes:\n\n- In tests, use ``selection.any`` in querystrings.\n Issue https://github.com/plone/Products.CMFPlone/issues/1040\n [maurits]\n\n- Cleanup and rework: contenttype-icons and showing thumbnails\n for images/leadimages in listings\n https://github.com/plone/Products.CMFPlone/issues/1226\n [fgrcon]\n\n\n1.2.2 (2015-09-20)\n------------------\n\n- ids_not_to_list has been removed. Use the exclude from navigation\n setting instead.\n [jensens]\n\n\n1.2.1 (2015-09-11)\n------------------\n\n- Implement cropping for CroppedDescription.\n [pbauer]\n\n\n1.2 (2015-07-18)\n----------------\n\n- Introduce ``@@contentlisting`` view, which is also supports Collections from\n plone.app.contenttypes including filtering of results. This gives us a\n unified interface for listing content from Folders or Collections.\n Deprecate ``@@folderListing``, which is kept for BBB compatibility.\n [thet]\n\n\n1.1.3 (2015-05-05)\n------------------\n\n- Make isVisibleInNav method read navigation displayed types settings from\n plone.app.registry instead of portal properties. This fixes\n https://github.com/plone/Products.CMFPlone/issues/454.\n [timo]\n\n\n1.1.2 (2015-05-05)\n------------------\n\n- Pep8.\n [thet]\n\n\n1.1.1 (2015-03-13)\n------------------\n\n- Add remaining, implemented but missing IContentListing interface methods.\n [thet]\n\n- forward getURL's relative kw for contentlistings (plone4 compat)\n [kiorky]\n\n\n1.1.0 (2014-04-16)\n------------------\n\n- Use proper styleguide for headings.\n [polyester]\n\n- Move README to /docs folder.\n [polyester]\n\n- Replace deprecated test assert statements.\n [tisto]\n\n- Removing language tests and fixing icon tests to get the correct images.\n [bloodbare]\n\n- Use PLONE_APP_CONTENTTYPES fixture for Plone 5.\n [tisto]\n\n\n1.0.5 (2013-08-13)\n------------------\n\n- Add missing getDataOrigin method to interfaces.\n [timo]\n\n\n1.0.4 (2013-01-01)\n------------------\n\n- Nothing changed.\n\n\n1.0.3 (2012-10-29)\n------------------\n\n- Whoever heard I liked batching was wrong. The Catalog results are\n already batched, so don't batch them again.\n [lentinj]\n\n\n1.0.2 (2012-10-15)\n------------------\n\n- Nothing changed.\n\n\n1.0.1 (2012-04-15)\n------------------\n\n- Change ContentTypeClass to return contenttype-{portal_type} to match\n what the rest of Plone expects. This fixes sprite based icons for\n pages/documents.\n [gaudenz]\n\n\n1.0 - 2011-07-19\n----------------\n\n- Removed `searchResults` view and related code. Search is handled inside\n `plone.app.search`.\n [hannosch]\n\n- Renamed `uniqueIdentifier` method to `uuid` for shorter and more consistent\n naming with `plone.uuid`.\n [hannosch]\n\n\n0.1b2 - 2011-04-15\n------------------\n\n- Unit tests for appendViewAction, compare against portal_type rather than Type.\n [lentinj]\n\n- Handle RealContentListingObject objects in isVisibleFromNav,\n appendViewAction. Remove memoise, isn't going to cache anything for a useful\n amount of time.\n [lentinj]\n\n\n0.1b1 - 2011-04-15\n------------------\n\n- Add an isVisibleFromNav method, based on http://siarp.de/node/201, use\n memoise to cache lookup of portal_properties\n [lentinj]\n\n- Add MANIFEST.in.\n [WouterVH]\n\n\n0.1a1 - 2011-03-02\n------------------\n\n- Initial release\n\n",
"bugtrack_url": null,
"license": "GPL version 2",
"summary": "Listing of content for the Plone CMS",
"version": "3.0.5",
"project_urls": {
"Homepage": "https://pypi.org/project/plone.app.contentlisting"
},
"split_keywords": [
"content",
"list",
"plone"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "8bb186aaf023d030a3202d4c10ae4c179d4b5ec59efc26114dc45b5889049f7f",
"md5": "dc9cc038f926bd73123fe5120dc7d3ab",
"sha256": "b220264820e655edbb08f0f4ea236dc2500e9f11524a782abebc8b8aac5245d7"
},
"downloads": -1,
"filename": "plone.app.contentlisting-3.0.5-py3-none-any.whl",
"has_sig": false,
"md5_digest": "dc9cc038f926bd73123fe5120dc7d3ab",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 23314,
"upload_time": "2024-04-16T19:32:11",
"upload_time_iso_8601": "2024-04-16T19:32:11.369445Z",
"url": "https://files.pythonhosted.org/packages/8b/b1/86aaf023d030a3202d4c10ae4c179d4b5ec59efc26114dc45b5889049f7f/plone.app.contentlisting-3.0.5-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "62a3276070785e3fc766bad1d8b067548d18476eb2e3e2142bbfa14600d5b3df",
"md5": "f458ad464928ebf9b672ca8d67d420ce",
"sha256": "2dfd9b507bcd7a31620e561e29951d089b953a89c231b6181bab6afc8b59971d"
},
"downloads": -1,
"filename": "plone.app.contentlisting-3.0.5.tar.gz",
"has_sig": false,
"md5_digest": "f458ad464928ebf9b672ca8d67d420ce",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 35468,
"upload_time": "2024-04-16T19:32:13",
"upload_time_iso_8601": "2024-04-16T19:32:13.729582Z",
"url": "https://files.pythonhosted.org/packages/62/a3/276070785e3fc766bad1d8b067548d18476eb2e3e2142bbfa14600d5b3df/plone.app.contentlisting-3.0.5.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-04-16 19:32:13",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "plone.app.contentlisting"
}