I'm not sure wether this is the right way to do it, but you can set up the
skin with a traverse-subscriber:

def myAppTraverseSubscriber(event):
    """A subscriber to BeforeTraverseEvent.

    Sets the "AC" skin if the object traversed is a "MyApp"
    if (IMyApp.providedBy(event.object) and
        applySkin(event.request, AC)

and then in the configure.zcml

      for="zope.app.publication.interfaces.IBeforeTraverseEvent" />

with this subscriber you don't have to explicitly set the skin: it will be
set "automatically" when you look up a url inside your application.
Theoretically you could set up the skin for individual objects like this,
but I don't know if it would be practical in real life... setting the skin
on an per-application basis is good enough for me though.

regards. luis

Philippe Clérié wrote:

> Hello list,
> As the title says I am somewhat confused by the skinning system in Zope3.
> I am following the example in "Web Component" (great book by the way) and
> at the time creating another app along the same lines. Now I set up both
> skins for each package and I _expected_ that each would pick up its own
> skin. So a recipe object would show with the worldcookery skin and my app
> would show with its skin (zsoc). Instead it seems that:
> a) skins are applied globally and not locally to the packages that own
> them;
> b) skins are not *picked up* unless directly referenced in the URL.
> Somehow that does not feel *natural*. Am I missing something?
> There's always a chance that I don't have the macros right, but I did copy
> worldcookery/browser/skin, just to make sure I made no mistakes.
> Thanks in advance
> Philippe

Zope3-users mailing list

Reply via email to