[Zope-CMF] Re: Finding the current skin name
Florent Guillaume
fg at nuxeo.com
Wed Nov 2 19:35:13 EST 2005
Could you expand a bit on the use case ? I'm not sure I get what you
want do to, do you change skins several times in the middle of the
request ? In what way is this skin needed afterward, at what point ?
What's a "correct" skin ?
Florent
Laurence Rowe wrote:
> In Plone ResourceRegistries (1.1 branch) I need to get the current skin
> name so that the resource (a css or js file) is fetched from the correct
> skin. Unfortunately it seems that there is no easy way to get the
> current skin name (when it is not set by a cookie in the request). I can
> work around this like follows, but it's a bit ugly:
>
>
> security.declareProtected(permissions.View, 'getCurrentSkinName')
> def getCurrentSkinName(self):
> """Returns the id of the current skin.
>
> Ugh, there really should be a better way of doing this. This is
> depending on internals in CMFCore and should be added there.
> """
> skintool = getToolByName(self, 'portal_skins')
> default_skin_name = skintool.getDefaultSkin()
> tid = get_ident()
> if SKINDATA.has_key(tid):
> skinobj, ignore, resolve = SKINDATA.get(tid)
> current_skin_path = skinobj.getPhysicalPath()
>
> #
> # Perhaps test against default skin first?
> #
>
> skinnames = skintool.getSkinSelections()
>
> # loop through skin names looking for a match
> for name in skinnames:
> skin = skintool.getSkinByName(name)
> path = skin.getPhysicalPath()
> if current_skin_path == path:
> return name
>
> return default_skin_name
>
> Would it be reasonable to make
> Skinnable.SkinnableObjectManager.changeSkin set the skin request var
> name after changing the skin? Such as:
>
> security.declarePublic('changeSkin')
> def changeSkin(self, skinname):
> '''Change the current skin.
>
> Can be called manually, allowing the user to change
> skins in the middle of a request.
> '''
> skinobj = self.getSkin(skinname)
> if skinobj is not None:
> tid = get_ident()
> SKINDATA[tid] = (skinobj, {}, {})
> REQUEST = getattr(self, 'REQUEST', None)
> if REQUEST is not None:
> REQUEST._hold(SkinDataCleanup(tid))
> sfn = self.getSkinsFolderName()
> if sfn is not None:
> sf = getattr(self, sfn, None)
> if sf is not None:
> REQUEST.set(sf.getRequestVarname(), skinname)
>
> Then getSkinNameFromRequest would work happily. Or is the a better way
> to do this?
>
> Regards,
>
> Laurence
>
> _______________________________________________
> Zope-CMF maillist - Zope-CMF-lEa0QfImRKZ5o+NzvwT5Tw at public.gmane.org
> http://mail.zope.org/mailman/listinfo/zope-cmf
>
> See http://collector.zope.org/CMF for bug reports and feature requests
>
--
Florent Guillaume, Nuxeo (Paris, France) Director of R&D
+33 1 40 33 71 59 http://nuxeo.com fg at nuxeo.com
More information about the Zope-CMF
mailing list