Source code for plone.app.blocks.tiles

from urlparse import urljoin

from zope.component import queryUtility

from plone.registry.interfaces import IRegistry

from plone.tiles.interfaces import ESI_HEADER, ESI_HEADER_KEY

from plone.app.blocks.interfaces import IBlocksSettings
from plone.app.blocks import utils


[docs]def renderTiles(request, tree): """Find all tiles in the given response, contained in the lxml element tree `tree`, and insert them into the ouput. Assumes panel merging has already happened. """ # Optionally enable ESI rendering in tiles that support this if not request.getHeader(ESI_HEADER): registry = queryUtility(IRegistry) if registry is not None: if registry.forInterface(IBlocksSettings).esi: request.environ[ESI_HEADER_KEY] = 'true' root = tree.getroot() headNode = root.find('head') baseURL = request.getURL() for tileNode in utils.headTileXPath(tree): tileHref = urljoin(baseURL, tileNode.attrib[utils.tileAttrib]) tileTree = utils.resolve(tileHref) if tileTree is not None: tileRoot = tileTree.getroot() utils.replace_content(tileNode, tileRoot.find('head')) for tileNode in utils.bodyTileXPath(tree): tileHref = urljoin(baseURL, tileNode.attrib[utils.tileAttrib]) tileTree = utils.resolve(tileHref) if tileTree is not None: tileRoot = tileTree.getroot() tileHead = tileRoot.find('head') if tileHead is not None: for tileHeadChild in tileHead: headNode.append(tileHeadChild) utils.replace_content(tileNode, tileRoot.find('body')) return tree