make zpt implementation basically working
git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@1522 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
		
							parent
							
								
									5f9675c871
								
							
						
					
					
						commit
						f072c6b7f9
					
				
					 7 changed files with 105 additions and 5 deletions
				
			
		| 
						 | 
				
			
			@ -15,7 +15,7 @@ calls a `main` macro and fills a slot there. But at least the template
 | 
			
		|||
implementation is decoupled from the view, so we are able to put a lot of
 | 
			
		||||
generic functionality into the view.
 | 
			
		||||
 | 
			
		||||
But in order to make a ZPT work we need a Zope-compatible request, so we use
 | 
			
		||||
In order to make a ZPT work we need a Zope-compatible request, so we use
 | 
			
		||||
the standard Zope 3 TestRequest.
 | 
			
		||||
 | 
			
		||||
  >>> from zope.publisher.browser import TestRequest
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										10
									
								
								web/configure.zcml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								web/configure.zcml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,10 @@
 | 
			
		|||
<!-- $Id$ -->
 | 
			
		||||
 | 
			
		||||
<configure
 | 
			
		||||
    xmlns:zope="http://namespaces.zope.org/zope"
 | 
			
		||||
    xmlns:browser="http://namespaces.zope.org/browser"
 | 
			
		||||
    i18n_domain="zope">
 | 
			
		||||
 | 
			
		||||
  <zope:include package=".zpt" />
 | 
			
		||||
 | 
			
		||||
</configure>
 | 
			
		||||
| 
						 | 
				
			
			@ -22,6 +22,9 @@ Generic template base class.
 | 
			
		|||
$Id$
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
from zope.app.traversing.adapters import DefaultTraversable
 | 
			
		||||
from zope import component
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Template(object):
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -33,3 +36,4 @@ class Template(object):
 | 
			
		|||
    def render(self, *args, **kw):
 | 
			
		||||
        return u''
 | 
			
		||||
 | 
			
		||||
component.provideAdapter(DefaultTraversable, (Template,))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										16
									
								
								web/zpt/configure.zcml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								web/zpt/configure.zcml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,16 @@
 | 
			
		|||
<!-- $Id$ -->
 | 
			
		||||
 | 
			
		||||
<configure
 | 
			
		||||
    xmlns:zope="http://namespaces.zope.org/zope"
 | 
			
		||||
    xmlns:browser="http://namespaces.zope.org/browser"
 | 
			
		||||
    i18n_domain="zope">
 | 
			
		||||
 | 
			
		||||
  <browser:page
 | 
			
		||||
      for="*"
 | 
			
		||||
      name="dummy.html"
 | 
			
		||||
      class="cybertools.web.view.View"
 | 
			
		||||
      attribute="render"
 | 
			
		||||
      permission="zope.View"
 | 
			
		||||
      />
 | 
			
		||||
 | 
			
		||||
</configure>
 | 
			
		||||
| 
						 | 
				
			
			@ -1,14 +1,14 @@
 | 
			
		|||
<html x_metal:use-macro="context/@@skin_macros/page"
 | 
			
		||||
<html metal:use-macro="options/template/main_macro"
 | 
			
		||||
      i18n:domain="zope">
 | 
			
		||||
<head></head>
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  <x_metal:body fill-slot="body">
 | 
			
		||||
  <metal:body fill-slot="body">
 | 
			
		||||
    <div>
 | 
			
		||||
      This is the body
 | 
			
		||||
    </div>
 | 
			
		||||
  </x_metal:body>
 | 
			
		||||
  </metal:body>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
</body>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										54
									
								
								web/zpt/main.pt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								web/zpt/main.pt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,54 @@
 | 
			
		|||
<metal:block define-macro="page"><metal:block define-slot="doctype"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"></metal:block>
 | 
			
		||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
 | 
			
		||||
      i18n:domain="zope">
 | 
			
		||||
 | 
			
		||||
  <head metal:define-macro="head">
 | 
			
		||||
    <title metal:define-slot="title"
 | 
			
		||||
           tal:content="options/title|view/headTitle|view/title|context/title|default">
 | 
			
		||||
      Powered by Zope 3
 | 
			
		||||
    </title>
 | 
			
		||||
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
 | 
			
		||||
 | 
			
		||||
    <metal:block define-slot="ecmascript_slot" />
 | 
			
		||||
 | 
			
		||||
    <link rel="icon" type="image/png"
 | 
			
		||||
          tal:attributes="href string:${options/template/resourceBase}favicon.png" />
 | 
			
		||||
  </head>
 | 
			
		||||
 | 
			
		||||
  <body metal:define-macro="body">
 | 
			
		||||
 | 
			
		||||
    <div id="global">
 | 
			
		||||
      <div class="top" metal:define-slot="top">
 | 
			
		||||
        <a href="#" name="top" metal:define-slot="logo"
 | 
			
		||||
           tal:attributes="href string:request/URL/1"><img class="logo"
 | 
			
		||||
               src="logo.gif" border="0" alt="Home"
 | 
			
		||||
               tal:attributes="src string:logo.gif" /></a>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <div id="menu">
 | 
			
		||||
      <metal:menu define-slot="navigators">
 | 
			
		||||
      </metal:menu>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <div id="content">
 | 
			
		||||
 | 
			
		||||
      <metal:message metal:define-slot="message" />
 | 
			
		||||
 | 
			
		||||
      <metal:content define-slot="body">Here comes the body</metal:content>
 | 
			
		||||
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <div id="sub-section">
 | 
			
		||||
      <metal:sub define-slot="context_information"></metal:sub>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <div id="footer" class="footer">
 | 
			
		||||
      <metal:footer define-slot="footer" />
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
  </body>
 | 
			
		||||
 | 
			
		||||
</html>
 | 
			
		||||
</metal:block>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -23,6 +23,7 @@ $Id$
 | 
			
		|||
"""
 | 
			
		||||
 | 
			
		||||
from zope.app.pagetemplate import ViewPageTemplateFile
 | 
			
		||||
from zope.cachedescriptors.property import Lazy
 | 
			
		||||
from cybertools.web import template
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -30,6 +31,21 @@ class Template(template.Template):
 | 
			
		|||
 | 
			
		||||
    zpt = ViewPageTemplateFile('content.pt')
 | 
			
		||||
 | 
			
		||||
    macroTemplate = ViewPageTemplateFile('main.pt')
 | 
			
		||||
 | 
			
		||||
    skin = None
 | 
			
		||||
 | 
			
		||||
    @Lazy
 | 
			
		||||
    def main_macro(self):
 | 
			
		||||
        return self.macroTemplate.macros['page']
 | 
			
		||||
 | 
			
		||||
    @Lazy
 | 
			
		||||
    def resourceBase(self):
 | 
			
		||||
        skinSetter = self.skin and ('/++skin++' + self.skin.__name__) or ''
 | 
			
		||||
        # TODO: put '/@@' etc after path to site instead of directly after URL0
 | 
			
		||||
        return self.request.URL[0] + skinSetter + '/@@/'
 | 
			
		||||
 | 
			
		||||
    def render(self, *args, **kw):
 | 
			
		||||
        kw['template'] = self
 | 
			
		||||
        return self.zpt(*args, **kw)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue