[Zope3-dev] Resource Library Proposal

Garrett Smith garrett at mojave-corp.com
Fri Sep 16 17:20:00 EDT 2005


On Friday, September 16, 2005 4:05 PM, Benji York wrote:

> Garrett Smith wrote:
>> If it's just a patch to get 'rich' widgets working, I'll stick with
>> my initial impression of it being too magical.
> 
> The main reasons why this isn't a problem individual widgets
> can solve
> is that 1) they can't know if things that should only be done once
> have already been done (include JavaScript for example), 2) they can't
> directly add entries to the <head> section of the page, and 3) the
> components that require the JS or CSS might not be widgets at all.

That's right. But the view can solve these problems easily without a lot of other stuff like yet-another-ZCML directive and automagical transformation of the HTML head element.

This is what we have:

class IHeadContent(Interface):
    """Something that provides head content for a page."""

    def headContent():
        """Returns a sequence of HTML snippets to be added to the page head."""

class SomeView(BrowserView):

    def __init__(self, context, request):
        ...
        self.headContent = []
        for widget in self.widgets():
            hc = zapi.queryAdapter(widget, IHeadContent)
            if hc is not None:
                for content in hc.headContent:
                    if content not in self.headContent:
                        self.headContent.append(content)
        ...

The applicable PT:

    <head>
        <tal:block repeat="content view/headContent">
            <tal:block content="structure content" />
        </tal:block>
        ...
    </head>

This is a trivial change to the existing Zope code.

 -- Garrett


More information about the Zope3-dev mailing list