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

Reply via email to