add pageName field to layout node interface, use for selecting suitable layouts; let traversal adapter store page name in request annotation
git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@3005 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
		
							parent
							
								
									73042183b3
								
							
						
					
					
						commit
						267bc66b92
					
				
					 5 changed files with 43 additions and 6 deletions
				
			
		|  | @ -35,6 +35,8 @@ from loops.view import Node | ||||||
| 
 | 
 | ||||||
| class LayoutNode(Node): | class LayoutNode(Node): | ||||||
| 
 | 
 | ||||||
|  |     pageName = u'' | ||||||
|  | 
 | ||||||
|     implements(ILayoutNode, ILayoutNodeContained) |     implements(ILayoutNode, ILayoutNodeContained) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -42,6 +44,10 @@ class LayoutNode(Node): | ||||||
| 
 | 
 | ||||||
| class NodeLayoutInstance(LayoutInstance): | class NodeLayoutInstance(LayoutInstance): | ||||||
| 
 | 
 | ||||||
|  |     @Lazy | ||||||
|  |     def viewAnnotations(self): | ||||||
|  |         return self.view.request.annotations.get('loops.view', {}) | ||||||
|  | 
 | ||||||
|     @Lazy |     @Lazy | ||||||
|     def target(self): |     def target(self): | ||||||
|         return adapted(self.context.target) |         return adapted(self.context.target) | ||||||
|  | @ -81,6 +87,7 @@ class TargetLayoutInstance(NodeLayoutInstance): | ||||||
|         """ Return sublayout instances specified by the target object. |         """ Return sublayout instances specified by the target object. | ||||||
|         """ |         """ | ||||||
|         target = self.target |         target = self.target | ||||||
|  |         pageName = self.viewAnnotations.get('pageName', u'') | ||||||
|         if region is None or target is None: |         if region is None or target is None: | ||||||
|             return [] |             return [] | ||||||
|         result = [] |         result = [] | ||||||
|  | @ -88,17 +95,20 @@ class TargetLayoutInstance(NodeLayoutInstance): | ||||||
|         tp = target.context.conceptType |         tp = target.context.conceptType | ||||||
|         for n in tp.getClients(): |         for n in tp.getClients(): | ||||||
|             if n.nodeType == 'info' and n.viewName in names: |             if n.nodeType == 'info' and n.viewName in names: | ||||||
|  |                 if pageName != n.pageName: | ||||||
|  |                     continue | ||||||
|                 layout = region.layouts[n.viewName] |                 layout = region.layouts[n.viewName] | ||||||
|                 li = component.getAdapter(n, ILayoutInstance, |                 li = component.getAdapter(n, ILayoutInstance, | ||||||
|                                           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, | ||||||
|  |         #       info on client nodes | ||||||
|         return result |         return result | ||||||
| 
 | 
 | ||||||
|     @Lazy |     @Lazy | ||||||
|     def target(self): |     def target(self): | ||||||
|         viewAnnotations = self.view.request.annotations.get('loops.view', {}) |         target = self.viewAnnotations.get('target') | ||||||
|         target = viewAnnotations.get('target') |  | ||||||
|         if target is None: |         if target is None: | ||||||
|             target = adapted(self.context.target) |             target = adapted(self.context.target) | ||||||
|         return target |         return target | ||||||
|  |  | ||||||
|  | @ -18,11 +18,11 @@ | ||||||
|       name="AddLoopsLayoutNode.html" |       name="AddLoopsLayoutNode.html" | ||||||
|       content_factory="loops.layout.base.LayoutNode" |       content_factory="loops.layout.base.LayoutNode" | ||||||
|       schema="loops.layout.interfaces.ILayoutNode" |       schema="loops.layout.interfaces.ILayoutNode" | ||||||
|       fields="title description nodeType viewName body" |       fields="title description nodeType viewName pageName body" | ||||||
|       template="../../browser/add.pt" |       template="../../browser/add.pt" | ||||||
|       permission="zope.ManageContent"> |       permission="zope.ManageContent"> | ||||||
|     <widget field="description" height="2" /> |     <widget field="description" height="2" /> | ||||||
|     <widget field="body" height="8" /> |     <widget field="body" height="3" /> | ||||||
|   </browser:addform> |   </browser:addform> | ||||||
| 
 | 
 | ||||||
|   <browser:addMenuItem |   <browser:addMenuItem | ||||||
|  | @ -32,6 +32,19 @@ | ||||||
|       permission="zope.ManageContent" |       permission="zope.ManageContent" | ||||||
|       view="AddLoopsLayoutNode.html" /> |       view="AddLoopsLayoutNode.html" /> | ||||||
| 
 | 
 | ||||||
|  |   <browser:editform | ||||||
|  |       label="Edit Node" | ||||||
|  |       name="edit.html" | ||||||
|  |       schema="loops.layout.interfaces.ILayoutNode" | ||||||
|  |       fields="title description nodeType viewName pageName body" | ||||||
|  |       for="loops.layout.interfaces.ILayoutNode" | ||||||
|  |       template="../../browser/edit.pt" | ||||||
|  |       permission="zope.ManageContent" | ||||||
|  |       menu="zmi_views" title="Edit Node"> | ||||||
|  |     <widget field="description" height="2" /> | ||||||
|  |     <widget field="body" height="3" /> | ||||||
|  |   </browser:editform> | ||||||
|  | 
 | ||||||
|   <!-- target views --> |   <!-- target views --> | ||||||
| 
 | 
 | ||||||
|   <zope:adapter |   <zope:adapter | ||||||
|  |  | ||||||
|  | @ -25,6 +25,7 @@ $Id$ | ||||||
| from zope.app.container.traversal import ItemTraverser | from zope.app.container.traversal import ItemTraverser | ||||||
| from zope.cachedescriptors.property import Lazy | from zope.cachedescriptors.property import Lazy | ||||||
| from zope.component import adapts | from zope.component import adapts | ||||||
|  | from zope.publisher.interfaces import NotFound | ||||||
| 
 | 
 | ||||||
| from loops.common import adapted | from loops.common import adapted | ||||||
| from loops.i18n.browser import LanguageInfo | from loops.i18n.browser import LanguageInfo | ||||||
|  | @ -38,6 +39,7 @@ class NodeTraverser(ItemTraverser): | ||||||
|     adapts(ILayoutNode) |     adapts(ILayoutNode) | ||||||
| 
 | 
 | ||||||
|     def publishTraverse(self, request, name): |     def publishTraverse(self, request, name): | ||||||
|  |         viewAnnotations = request.annotations.setdefault('loops.view', {}) | ||||||
|         if name.startswith('.'): |         if name.startswith('.'): | ||||||
|             if len(name) > 1: |             if len(name) > 1: | ||||||
|                 if '-' in name: |                 if '-' in name: | ||||||
|  | @ -54,5 +56,9 @@ class NodeTraverser(ItemTraverser): | ||||||
|                 viewAnnotations['target'] = target |                 viewAnnotations['target'] = target | ||||||
|                 #return target |                 #return target | ||||||
|                 return self.context |                 return self.context | ||||||
|  |         try: | ||||||
|             obj = super(NodeTraverser, self).publishTraverse(request, name) |             obj = super(NodeTraverser, self).publishTraverse(request, name) | ||||||
|  |         except NotFound, e: | ||||||
|  |             viewAnnotations['pageName'] = name | ||||||
|  |             return self.context | ||||||
|         return obj |         return obj | ||||||
|  |  | ||||||
|  | @ -24,6 +24,7 @@ $Id$ | ||||||
| 
 | 
 | ||||||
| from zope.app.container.constraints import contains, containers | from zope.app.container.constraints import contains, containers | ||||||
| from zope.interface import Interface | from zope.interface import Interface | ||||||
|  | from zope import schema | ||||||
| 
 | 
 | ||||||
| from loops.interfaces import INodeSchema, IBaseNode, INode, IViewManager | from loops.interfaces import INodeSchema, IBaseNode, INode, IViewManager | ||||||
| 
 | 
 | ||||||
|  | @ -33,6 +34,13 @@ class ILayoutView(INodeSchema): | ||||||
|         presentation mechanism. |         presentation mechanism. | ||||||
|     """ |     """ | ||||||
| 
 | 
 | ||||||
|  |     pageName = schema.TextLine( | ||||||
|  |         title=_(u'Page name'), | ||||||
|  |         description=_(u'Name that may be used to identify the layout ' | ||||||
|  |                       u'via a name in the URL.'), | ||||||
|  |         default=u'', | ||||||
|  |         required=False) | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| class ILayoutNode(ILayoutView, INode): | class ILayoutNode(ILayoutView, INode): | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -21,7 +21,7 @@ loops version specifications. | ||||||
| """ | """ | ||||||
| 
 | 
 | ||||||
| revision = '$Id$' | revision = '$Id$' | ||||||
| shortVersion = '0.8' | shortVersion = '0.9' | ||||||
| longVersion = '%s-%s' % (shortVersion, ' '.join(revision.split()[2:5])) | longVersion = '%s-%s' % (shortVersion, ' '.join(revision.split()[2:5])) | ||||||
| 
 | 
 | ||||||
| versions = dict(loops=shortVersion) | versions = dict(loops=shortVersion) | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 helmutm
						helmutm