use default sublayout if no suitable target layout is available; issue a warning if no target layout found
git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@3433 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
parent
a16fa69fe5
commit
e1c163c887
1 changed files with 18 additions and 2 deletions
|
@ -22,10 +22,12 @@ Layout node + instance implementations.
|
||||||
$Id$
|
$Id$
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
from logging import getLogger
|
||||||
from zope import component
|
from zope import component
|
||||||
from zope.component import adapts
|
from zope.component import adapts
|
||||||
from zope.cachedescriptors.property import Lazy
|
from zope.cachedescriptors.property import Lazy
|
||||||
from zope.interface import implements
|
from zope.interface import implements
|
||||||
|
from zope.traversing.api import getName
|
||||||
|
|
||||||
from cybertools.composer.layout.base import Layout, LayoutInstance
|
from cybertools.composer.layout.base import Layout, LayoutInstance
|
||||||
from cybertools.composer.layout.interfaces import ILayoutInstance
|
from cybertools.composer.layout.interfaces import ILayoutInstance
|
||||||
|
@ -34,6 +36,9 @@ from loops.layout.interfaces import ILayoutNode, ILayoutNodeContained
|
||||||
from loops.view import Node
|
from loops.view import Node
|
||||||
|
|
||||||
|
|
||||||
|
logger = getLogger('loops.layout')
|
||||||
|
|
||||||
|
|
||||||
class LayoutNode(Node):
|
class LayoutNode(Node):
|
||||||
|
|
||||||
pageName = u''
|
pageName = u''
|
||||||
|
@ -102,6 +107,7 @@ class TargetLayoutInstance(NodeLayoutInstance):
|
||||||
pageName = self.viewAnnotations.get('pageName', u'')
|
pageName = self.viewAnnotations.get('pageName', u'')
|
||||||
obj = self.target.context
|
obj = self.target.context
|
||||||
tp = obj.getType()
|
tp = obj.getType()
|
||||||
|
found = False
|
||||||
for n in obj.getClients() + tp.getClients():
|
for n in obj.getClients() + tp.getClients():
|
||||||
if not ILayoutNode.providedBy(n):
|
if not ILayoutNode.providedBy(n):
|
||||||
continue
|
continue
|
||||||
|
@ -113,8 +119,18 @@ class TargetLayoutInstance(NodeLayoutInstance):
|
||||||
name=layout.instanceName)
|
name=layout.instanceName)
|
||||||
li.template = layout
|
li.template = layout
|
||||||
result.append(li)
|
result.append(li)
|
||||||
# TODO: if not result: provide error info with names, pageName,
|
found = True
|
||||||
# info on client nodes
|
if not found:
|
||||||
|
if self.template.defaultSublayout is None:
|
||||||
|
logger.warn('No target layout found: pageName = %r, target = %r'
|
||||||
|
% (pageName, getName(obj)))
|
||||||
|
else:
|
||||||
|
layout = region.layouts.get(self.template.defaultSublayout)
|
||||||
|
if layout is not None:
|
||||||
|
li = component.getAdapter(self.context, ILayoutInstance,
|
||||||
|
name=layout.instanceName)
|
||||||
|
li.template = layout
|
||||||
|
result.append(li)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
@Lazy
|
@Lazy
|
||||||
|
|
Loading…
Add table
Reference in a new issue