implement skin switching in BaseView

git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@1134 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2006-03-21 16:46:39 +00:00
parent 273a05a5d1
commit e96289a34b
6 changed files with 48 additions and 7 deletions

View file

@ -34,6 +34,11 @@ class Loops(Folder):
implements(ILoops)
_skinName = ''
def getSkinName(self): return self._skinName
def setSkinName(self, skinName): self._skinName = skinName
skinName = property(getSkinName, setSkinName)
def getLoopsRoot(self):
return self

View file

@ -29,6 +29,8 @@ from zope.app.intid.interfaces import IIntIds
from zope.cachedescriptors.property import Lazy
from zope.dottedname.resolve import resolve
from zope.interface import implements
from zope.app.publisher.browser import applySkin
from zope.publisher.interfaces.browser import ISkin
from zope.schema.vocabulary import SimpleTerm
from zope.security.proxy import removeSecurityProxy
@ -39,8 +41,23 @@ class BaseView(object):
def __init__(self, context, request):
#self.context = context
# TODO: get rid of removeSecurityProxy() call
self.context = removeSecurityProxy(context)
self.request = request
skin = None
# TODO: get ISkinController adapter instead
skinName = self.loopsRoot.skinName
if skinName:
skin = zapi.queryUtility(ISkin, skinName)
if skin is not None:
applySkin(self.request, skin)
self.skin = skin
@Lazy
def resourceBase(self):
skinSetter = self.skin and ('/++skin++' + self.skin.__name__) or ''
# TODO: put '/@@' etc after path to site instead of directly after URL0
return self.request.URL[0] + skinSetter + '/@@'
@Lazy
def modified(self):

View file

@ -67,6 +67,21 @@
view="AddLoopsContainer.html"
/>
<containerViews
for="loops.interfaces.ILoops"
contents="zope.ManageContent"
add="zope.ManageContent"
/>
<editform
label="Edit Loops Container"
name="edit.html"
schema="loops.interfaces.ILoops"
fields="skinName"
for="loops.interfaces.ILoops"
permission="zope.ManageContent"
menu="zmi_views" title="Edit" />
<!-- concept manager -->
<addform

View file

@ -43,12 +43,6 @@
</div>
<div metal:fill-slot="footer">
<a href="#"
tal:attributes="href string:${view/menu/url}/impressum">Impressum</a>
</div>
</body>
</html>
</tal:show>

View file

@ -50,7 +50,11 @@
<require
permission="zope.View"
attributes="getLoopsUri loopsTraverse getConceptManager
getResourceManager getViewManager" />
getResourceManager getViewManager skinName" />
<require
permission="zope.ManageContent"
set_schema=".interfaces.ILoops" />
</content>

View file

@ -410,6 +410,12 @@ class ILoops(ILoopsObject):
"""
contains(IConceptManager, IResourceManager, IViewManager)
skinName = schema.ASCIILine(
title=_(u'Skin Name'),
description=_(u'Name of the skin to use'),
default='',
required=False)
def getLoopsUri(obj):
""" Return the relativ path to obj, starting with '.loops/...'.
"""