[Zope-CMF] Re: Finding the current skin name
Tres Seaver
tseaver at palladion.com
Wed Nov 2 18:56:26 EST 2005
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Alexander Limi wrote:
> Can anybody from the CMF team give some guidance to Laurence here?
>
> -- Alexander
>
> On Fri, 28 Oct 2005 06:31:42 -0700, Laurence Rowe <l at lrowe.co.uk> 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.
I don't understand the use case, but I will take your word for it.
Normally, you would look up the component CSS / JS files using the same
skin settings as the "base" page.
> 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:
I think it would be better to add the skin name to the tuple cached in
the module global ('SKINDATA[tid]'). This change would involve
overriding or monkeypatching both 'changeSkin' and '__getattr__' in the
Skinnable class, and then add a method, 'getCurrentSkinName', which
returned it.
I would be happy to merge a patch for this into the 1.5 branch and the
trunk, given tests which show correct behavior.
Tres.
- --
===================================================================
Tres Seaver +1 202-558-7113 tseaver at palladion.com
Palladion Software "Excellence by Design" http://palladion.com
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org
iD8DBQFDaVIp+gerLs4ltQ4RAoALAJ9Wj3cEmZt90xDkEZGOcjhcov94qACgsWu+
BRuBS9ep3wsrAPfVnuauLe0=
=FciV
-----END PGP SIGNATURE-----
More information about the Zope-CMF
mailing list