Re: Conditionally render viewlet
Jonathan Bowlas <j.bowlas-hclig2XLE9Zaa/[email protected]> Mon, 13 Jun 2011 13:43:35 +0100
| Newsgroups | gmane.comp.web.zope.silva.devel |
|---|---|
| Message-ID | <[email protected]> |
Hi Devs,
I've added this into my local version of silva.core.views view.py:
def isAvailable(viewlet):
try:
return viewlet.available
except AttributeError:
return True
class ConditionalViewletManager(ViewletManager):
"""A conditional viewlet manager in Silva.
"""
grok.baseclass()
grok.context(ISilvaObject)
grok.implements(IViewletManager)
def filter(self, viewlets):
viewlets =3D super(ConditionalViewletManager, self).filter(viewlets)
return [(name, viewlet) for name, viewlet in viewlets if
isAvailable(viewlet)]
Hopefully this can go into the core, although if you'd require any
modifications let me know so I can update our views.py file.
Usage in theme:
class LeftColumn(silvaviews.ConditionalViewletManager):
"""Left Content Area
"""
pass
class LeftTopPortlet(silvaviews.Viewlet):
"""Left Column Topper Viewlet
"""
grok.viewletmanager(LeftColumn)
grok.name('lefttopportlet')
available=3D False
class LeftNavigation(silvaviews.Viewlet):
"""Left Navigation Viewlet
"""
grok.viewletmanager(LeftColumn)
grok.name('leftnavigation')
available=3D True
#usage with a method
class LeftPortlet(silvaviews.Viewlet):
"""Left Portlet Viewlet
"""
grok.viewletmanager(LeftColumn)
grok.name('leftportlet')
@property
def available(self):
return self.layout.atts.ucl_left_col_include
HTH someone, thanks.
Jon
On 9 June 2011 12:41, Jonathan Bowlas <j.bowlas-hclig2XLE9Zaa/[email protected]> wrote:
> I think that would be best, I'm using it a lot and it seems a bit
> excessive to include a available() method to every viewlet I want
> included. (Although I have written a separate silvaviews.Viewlet class
> called IsAvailable with has the available() method which I subclass
> when I want a Viewlet available).
>
> Cheers
>
> J
>
> On 9 June 2011 12:28, Sylvain Viollon <[email protected]> wrote:
>> On Wed, 8 Jun 2011 15:54:05 +0200
>> Antonin AMAND <[email protected]> wrote:
>>
>> =A0Hello,
>>
>>> On Wed, Jun 8, 2011 at 1:37 PM, Jonathan Bowlas <j.bowlas-hclig2XLE9Zaa/[email protected]>
>>> wrote:
>>> > Is there an example infrae extension or theme where the filter
>>> > method is overridden?
>>> >
>>> > J
>>>
>>> Sorry. filter method takes the viewlets as parameter.
>>>
>>> def filter(self, viewlets):
>>> =A0 =A0viewlets =3D super(LeftColumn, self).filter(viewlets)
>>> =A0 =A0return [(name, viewlet) for name, viewlet in viewlets if
>>> viewlet.available()]
>>>
>>>
>>
>> =A0If this is often used, we could add a base class into
>> =A0silva.core.views that contains it by default.
>>
>> =A0Regards,
>>
>> =A0Sylvain,
>>
>>
>> --
>> Sylvain Viollon -- Infrae
>> t +31 10 243 7051 -- http://infrae.com
>> Hoevestraat 10 3033GC Rotterdam -- The Netherlands
>> _______________________________________________
>> silva-dev mailing list
>> silva-dev-IAPFreCvJWM6s/[email protected]
>> https://lists.infrae.com/mailman/listinfo/silva-dev
>>
>
>
>
> --
> Jonathan Bowlas
> Web Support Officer
> Media Services
> University College London
> Email: j.bowlas-hclig2XLE9Zaa/[email protected]
>
-- =
Jonathan Bowlas
Web Support Officer
Media Services
University College London
Email: j.bowlas-hclig2XLE9Zaa/[email protected]