Log message for revision 65693: Take the original view class for the 'view' object. In order to find it, we look for it at the global level (which might not be enough in the future). For this to work we also need to remember its view name.
Changed: U Products.Five/branches/philikon-local-components/component/browser.py U Products.Five/branches/philikon-local-components/component/component.txt -=- Modified: Products.Five/branches/philikon-local-components/component/browser.py =================================================================== --- Products.Five/branches/philikon-local-components/component/browser.py 2006-03-01 23:27:54 UTC (rev 65692) +++ Products.Five/branches/philikon-local-components/component/browser.py 2006-03-01 23:53:24 UTC (rev 65693) @@ -22,8 +22,8 @@ from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate from Products.PageTemplates.Expressions import SecureModuleImporter -from zope.interface import providedBy -from zope.component import getMultiAdapter +from zope.interface import Interface, providedBy +from zope.component import getMultiAdapter, getGlobalSiteManager from zope.component.globalregistry import base from zope.component.persistentregistry import PersistentComponents from zope.publisher.interfaces.browser import IBrowserRequest @@ -104,7 +104,8 @@ if reg.name == viewname: break - components.registerAdapter(viewFactory(viewzpt), required=reg.required, + view_factory = viewFactory(viewzpt, viewname) + components.registerAdapter(view_factory, required=reg.required, provided=reg.provided, name=viewname) #XXX info? return viewzpt @@ -113,22 +114,30 @@ #TODO use @@absolute_url view self.request.RESPONSE.redirect(viewzpt.absolute_url() + "/manage_workspace") -def viewFactory(viewzpt): +def viewFactory(viewzpt, viewname): def view(context, request): - return ZPTView(viewzpt, context, request) + return ZPTView(viewzpt, viewname, context, request) return view class ZPTView(BrowserView): - def __init__(self, viewzpt, context, request): + def __init__(self, viewzpt, viewname, context, request): self.viewzpt = viewzpt + self.viewname = viewname self.context = context self.request = request + def _findViewClass(self): + gsm = getGlobalSiteManager() + view = gsm.queryMultiAdapter((self.context, self.request), Interface, + name=self.viewname) + if view is not None: + return view + return self + def _zptNamespace(self): root = aq_acquire(self.context, 'getPhysicalRoot')() here = aq_inner(self.context) - view = self #XXX get the "real" view class return { 'template': self.viewzpt, 'nothing': None, @@ -136,7 +145,7 @@ 'here': here, 'context': here, 'container': here, - 'view': view, + 'view': self._findViewClass(), 'root': root, 'modules': SecureModuleImporter, } Modified: Products.Five/branches/philikon-local-components/component/component.txt =================================================================== --- Products.Five/branches/philikon-local-components/component/component.txt 2006-03-01 23:27:54 UTC (rev 65692) +++ Products.Five/branches/philikon-local-components/component/component.txt 2006-03-01 23:53:24 UTC (rev 65693) @@ -126,6 +126,7 @@ ... view: <tal:var replace="structure nocall:view" /> ... modules: <tal:var replace="structure modules" /> ... options: <tal:var replace="structure options" /> + ... nothing: <tal:var replace="structure nothing" /> ... """, content_type=None) In order to be able to look up the customized view now, we need to @@ -145,9 +146,10 @@ root: <Application at > template: <ZopePageTemplate at customizetemplate.html> request: <zope.publisher.browser.TestRequest instance URL=http://127.0.0.1> - view: <Products.Five.component.browser.ZPTView object at ...> + view: <Products.Five.metaclass.SimpleViewClass from .../Five/component/customizetemplate.pt object at ...> modules: <Products.PageTemplates.ZRPythonExpr._SecureModuleImporter instance at ...> options: {'args': ()} + nothing: <BLANKLINE> Clean up: _______________________________________________ Zope-Checkins maillist - Zope-Checkins@zope.org http://mail.zope.org/mailman/listinfo/zope-checkins