[Zope3-Users] z3c:layout - not working with z3c.form.EditForm
    kevin gill 
    kevin at movieextras.ie
       
    Tue Jan 29 09:24:35 EST 2008
    
    
  
I am having a problem configuring a layout template. It works with
z3c.form.DisplayForm but not with z3c.form.EditForm.
formdemo works fine for me. It seems to use an identical approach.
Thanks, Kevin
-------------------------------------------------------------------
Here is the details to recreate the problem:
http://localhost:8080/++skin++MySkin/@@index.html does not use the template.
http://localhost:8080/++skin++MySkin/@@index2.html uses the template.
I added these packages (setup.py):
    'z3c.pagelet',
    'z3c.layer',
    'z3c.form',
    'z3c.formui',
I configured these packages:
  <!-- Add your own component registrations here -->
  <include package="zope.viewlet" file="meta.zcml"/>
  <include package="zope.contentprovider" />
  <include package="zope.viewlet" />
  <include package="z3c.form" file="meta.zcml" />
  <include package="z3c.macro" file="meta.zcml" />
  <include package="z3c.pagelet" file="meta.zcml" />
  <include package="z3c.template" file="meta.zcml" />
  <include package="z3c.form" />
  <include package="z3c.formui" />
  <include package="z3c.layer.pagelet"/>
  <include package="z3c.macro" />
  <include package="z3c.pagelet"/>
I created a new layer (layer.py):
    from z3c.form.interfaces import IFormLayer
    from z3c.layer.pagelet import IPageletBrowserLayer
    class IMyBrowserLayer(IFormLayer, IPageletBrowserLayer):
        pass
And a new skin (skin.py):
    import z3c.formui.interfaces
    import layer
    class IMyBrowserSkin(z3c.formui.interfaces.IDivFormLayer,
                           layer.IMyBrowserLayer):
       pass
I registered the above:
    <interface
        interface=".layer.IMyBrowserLayer"
        type="zope.publisher.interfaces.browser.IBrowserSkinType"
        />
    <interface
        interface=".skin.IMyBrowserSkin"
        type="zope.publisher.interfaces.browser.IBrowserSkinType"
        name="MySkin"
        />
I create a layout (template.pt):
    <h1>TEMPLATE</h1>
    <tal:block replace="structure provider:pagelet" />
I register it:
    <z3c:layout
        for="*"
        layer=".layer.IMyBrowserLayer"
        template="template.pt"
        />
I create two new pages (browser.py):
    from z3c.form import form
    class IndexForm(form.EditForm):
        pass
    class IndexForm2(form.DisplayForm):
        pass
I match these with templates (index.pt and index2.pt):
    index.pt
    index2.pt
I register the new views:
   <z3c:pagelet
        name="index.html"
        for="*"
        permission="zope.Public"
        layer=".layer.IMyBrowserLayer"
        class=".browser.IndexForm"
        />
    <z3c:template
        template="index.pt"
        for=".browser.IndexForm"
        layer=".layer.IMyBrowserLayer"
        />
    <z3c:pagelet
        name="index2.html"
        for="*"
        permission="zope.Public"
        layer=".layer.IMyBrowserLayer"
        class=".browser.IndexForm2"
        />
    <z3c:template
        template="index2.pt"
        for=".browser.IndexForm2"
        layer=".layer.IMyBrowserLayer"
        />
    
    
More information about the Zope3-users
mailing list