Last active
July 8, 2020 07:54
-
-
Save thomasmassmann/96e8844d7b93ea3774237c0b6faae3f8 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
"""Collection tiles.""" | |
from Acquisition import aq_inner | |
from plone.app.contenttypes.behaviors.collection import ICollection | |
from plone.app.standardtiles import PloneMessageFactory as PMF # noqa: N814 | |
from plone.app.standardtiles.contentlisting import IContentListingTileLayer | |
from plone.subrequest.interfaces import ISubRequest | |
from plone.supermodel.model import Schema | |
from plone.tiles import Tile | |
from plone.tiles.interfaces import ITile | |
from zope import schema | |
from zope.component import getMultiAdapter | |
from zope.interface import alsoProvides | |
from zope.interface import implementer | |
class ICollectionResultsTile(Schema): | |
"""Collection resutls tile schema.""" | |
title = schema.TextLine( | |
required=False, | |
title=PMF(u'label_title', default=u'Title'), | |
) | |
description = schema.Text( | |
description=PMF( | |
u'help_description', | |
default=u'Used in item listings and search results.' | |
), | |
missing_value=u'', | |
required=False, | |
title=PMF(u'label_description', default=u'Summary'), | |
) | |
view_template = schema.Choice( | |
required=True, | |
source='Available Listing Views', | |
title=PMF(u'Display mode'), | |
) | |
@implementer(ITile) | |
class CollectionResultsTile(Tile): | |
"""Collection results tile.""" | |
@property | |
def title(self): | |
return self.data.get('title') | |
@property | |
def description(self): | |
return self.data.get('description') | |
@property | |
def view_template(self): | |
return self.data.get('view_template') | |
def contents(self): | |
"""Search results""" | |
view = self.view_template or 'listing_view' | |
view = view.encode('utf-8') | |
options = dict(original_context=self.context) | |
alsoProvides(self.request, IContentListingTileLayer) | |
return getMultiAdapter( | |
(self.results(), self.request), | |
name=view)(**options) | |
@property | |
def collection_behavior(self): | |
return ICollection(aq_inner(self.context)) | |
@property | |
def b_size(self): | |
return getattr(self, '_b_size', self.collection_behavior.item_count) | |
@property | |
def b_start(self): | |
request = self.request | |
if ISubRequest.providedBy(request): | |
request = request.PARENT_REQUEST | |
b_start = getattr(request, 'b_start', None) or 0 | |
return int(b_start) | |
def results(self, **kwargs): | |
"""Return a content listing based result set with results from the | |
collection query. | |
:param **kwargs: Any keyword argument, which can be used for catalog | |
queries. | |
:type **kwargs: keyword argument | |
:returns: plone.app.contentlisting based result set. | |
:rtype: ``plone.app.contentlisting.interfaces.IContentListing`` based | |
sequence. | |
""" | |
# Extra filter | |
request = self.request | |
if ISubRequest.providedBy(request): | |
request = request.PARENT_REQUEST | |
content_filter = dict(request.get('contentFilter', {})) | |
content_filter.update(kwargs.get('contentFilter', {})) | |
kwargs.setdefault('custom_query', content_filter) | |
kwargs.setdefault('batch', True) | |
kwargs.setdefault('b_size', self.b_size) | |
kwargs.setdefault('b_start', self.b_start) | |
results = self.collection_behavior.results(**kwargs) | |
return results | |
def batch(self): | |
# collection is already batched. | |
return self.results() |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html xmlns="http://www.w3.org/1999/xhtml" | |
xml:lang="en" | |
lang="en" | |
xmlns:tal="http://xml.zope.org/namespaces/tal" | |
xmlns:i18n="http://xml.zope.org/namespaces/i18n" | |
i18n:domain="Plone"> | |
<body> | |
<h2 class="tileHeader" | |
tal:condition="view/title" | |
tal:content="view/title">Title</h2> | |
<div class="documentDescription" | |
tal:condition="view/description" | |
tal:content="view/description">Description</div> | |
<div id="content-core" tal:define="batch view/batch" tal:condition="batch"> | |
<tal:contents tal:replace="structure python:view.contents()">Listing</tal:contents> | |
<div metal:use-macro="context/batch_macros/macros/navigation" /> | |
</div> | |
</body> | |
</html> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<configure | |
xmlns="http://namespaces.zope.org/zope" | |
xmlns:browser="http://namespaces.zope.org/browser" | |
xmlns:plone="http://namespaces.plone.org/plone"> | |
<include package="plone.tiles" /> | |
<include package="plone.tiles" file="meta.zcml"/> | |
<plone:tile | |
add_permission="cmf.ModifyPortalContent" | |
class=".collection.CollectionResultsTile" | |
description='Display the results of a saved search of the site content' | |
for="plone.app.contenttypes.interfaces.ICollection" | |
name="plone.tiles.collection_results" | |
permission="zope2.View" | |
schema=".collection.ICollectionResultsTile" | |
template="templates/collection_results.pt" | |
title="Collection results" | |
/> | |
</configure> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment