[Zope3-Users] Re: Skinning problem

Florian Lindner mailinglists at xgm.de
Sat Jan 20 05:08:07 EST 2007


Am Freitag, 19. Januar 2007 01:12 schrieb Philipp von Weitershausen:
> On 18 Jan 2007, at 22:10 , Florian Lindner wrote:
> > Am Donnerstag, 18. Januar 2007 16:24 schrieb Philipp von
> >
> > Weitershausen:
> >> Marius Gedminas wrote:
> >>> On Wed, Jan 17, 2007 at 09:50:58PM +0100, Florian Lindner wrote:
> >>>> Hello,
> >>>> I have a ressourceDirectory with a file styles.css
> >>>>
> >>>>     <resourceDirectory
> >>>>         directory="files"
> >>>>         name="files"
> >>>>     />
> >>>>
> >>>> I refer to it in my default template:
> >>>>
> >>>> <link rel="stylesheet" type="text/css" tal:attributes="href
> >>>> context/@@/files/styles.css" />
> >>>
> >>> That's no good.  The /@@/ view  only works when context is a site.
> >>> Besides, I'm not sure you can use it in a TALES expression like
> >>> this.
> >>>
> >>> You want
> >>>
> >>>   <link rel="stylesheet" type="text/css"
> >>>         tal:attributes="href context/++resource++files/
> >>> styles.css" />
> >>>
> >>> I think.  (I'm sure "href context/++resource++name.css" is the right
> >>> solution for plain resource files, but I haven't used
> >>> resourceDirectory
> >>> much.)
> >>
> >> It works like that for resourceDirectory resources as well.
> >
> > Yes, it works fine but now I have another problem:
> >
> > The tempate contains links like:
>
> Which template?
>
> > <a tal:attributes="href context/@@contact.html/
> > @@absolute_url">kontakt</a>
> >
> > contact.html is registered for the interface (IXGM) of the object
> > in which the
> > object that should use the template (IBlog) resides. But in the
> > IBlog context
> > there is no contact.html.
> > What is the best way to work around this?
> >
> > - Register contact HTML for all interfaces?
> > - Make them static (no TAL) links?
> >
> > Both are ways I don't really like.
>
> I'm not getting this. Before you asked about resources, now all of a
> sudden it's about a template?

Ok, the entire situation is:

I have a template template.pt which should be applied to all site watched in 
the skin xgm.

    <page
        for="*"
        name="standard_macros"
        permission="zope.Public"
        class=".views.StandardMacros"
        layer="xgm.interfaces.IXGMSkin"
        allowed_interface="zope.interface.common.mapping.IItemMapping"
    />

    <page
        for="*"
        name="skin_macros"
        permission="zope.Public"
        layer="xgm.interfaces.IXGMSkin"
        template="template.pt"
    />

and

class StandardMacros(BaseMacros):
    macro_pages = ('skin_macros', )


the template.pt is the one also used on xgm.de:

<metal:block define-macro="page">
<metal:block define-macro="view">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
  
    <head>
        <title metal:define-slot="title">Testtitle</title>
        <link rel="stylesheet" type="text/css" tal:attributes="href 
context/++resource++files/styles.css" />
    </head>
  
    <body>

        <ul id="navigation">
            <li>[ <a tal:attributes="href 
context/@@index.html/@@absolute_url">home</a> ]</li>
    
        </ul>
    
        <div id="content">
            <metal:block define-slot="body">
                This is the content.
            </metal:block>
        </div>

    </body>
</html>

</metal:block>
</metal:block>

(shortened a bit)

The styles.css is the ressource my last posts were about.

index.html is registered like that:

    <pages
        for="xgm.interfaces.IXGM"
        layer="xgm.interfaces.IXGMSkin"
        permission="zope.Public"
        class=".views.ViewClass" >

        <page
            name="index.html"
            template="index.pt" />

     </pages>

This works perfect as far as only pages use this template who are registered 
on the same interface like the other ines (IXGM).

Now I have a third party package (Blog) which should generally be independent 
to all that but should use the template.pt which called with ++skin++xgm.

<html metal:use-macro="views/standard_macros/view">
  <body>
    <div metal:fill-slot="body">
      <h1 tal:content="context/title"></h1>
      <div tal:content="context/description" />

      <div class="row" tal:repeat="item view/getSortedBlogEntries"
	   tal:content="structure item/@@details.html" />
    </div>
  </body>
</html>

is registered on the default layer. Since the xgm layer derives from the 
default layer it correctly uses my template.pt.
But the problem is now when a view from the Blog object are called links in 
the template like

<a tal:attributes="href context/@@index.html/@@absolute_url">home</a>

do not work anymore, since context is the Blog and not a IXGM object anymore. 
Therefore the lookup fails.

Sorry for the long mail, I hope I was able to explain what my problem is.

Thanks,

Florian


More information about the Zope3-users mailing list