Daniel Widerin wrote:
Martin Aspeli schrieb:
Daniel Widerin wrote:
Hello,

I need some portlets to be rendered (i need their rendered html code) in browser view. these portlets expect only one parameter, an object_uid, which i passed to portlet renderer successfully.
Why? :)

It sounds to me like you should just do this with views or ViewPageTemplateFiles or viewlets.

i want to select portlets in kupu using mediaobjects to make "content portlets" being rendered in kupu-text.

i added some of my custom types (which all have a portlet too) to mediaobject resource types in kupu configuration to make them selectable using the place-image-button.

i added these types into the action-url table in kupu configuration
preview: string:++resource++gesundesleben.theme.images/contentPluginPreview_${portal_type}.gif?ContentPluginUrl=${object_url}
normal image:
string:++resource++gesundesleben.theme.images/contentPlugin_${portal_type}.gif?ContentPluginUrl=${object_url}

now i can add my types using placeholder images into my kupu text, and give them image-left, image-right classes to make text float around.

on save i replace ${object_url} with physicalpath of the selected object. (sorry, but only portal_type and object_url are available in kupu resource types configuration).

in my browser view, i parse the kupu-text and replace all images with img-tags which use the contentPlugin_${portal_type}.gif?ContentPluginUrl=${object_url} scheme with the rendered portlet code. through the physicalpath i can locate the object and then get the rendered portlet using an adapter with my own factory.

i hope you understand what i'm trying to do here, i know it's not a nice way but using the kupu place-image-button makes it very simple for reviewers to add such content portlets

Interestingly, this is a lot like something we've talked about doing in Plone proper. See http://limi.net/articles/simplify-plones-editing-experience.

The way I thought about implementing that would be to have a special contextual portlet manager, much like collective.portletpage does. We'd extend it so that it had a way to render one particular portlet, rather than just looping through all its portlets and rendering them one by one.

In kupu, you'd actually get an <img /> tag with particular attributes (e.g. rel="widget" if that's allowed, or something similar, and id="some-portlet-id"). Upon rendering of the page, a new transform would replace such img tags with their respective portlets, by asking the portlet manager to render them.

i tried to call the portlet directly and construct the parameters for the render method, but still failed.
You need to be more specific about what you tried.

The general approach should be to get the portlet assignment, make sure it's acquisition-wrapped, and then adapt to IPortletRenderer, making sure the portlet renderer is acquisition wrapped in the context, and then call update() and then render() on it.

You'll need to look at the portlet manager code, in particular _lazyLoadPortlets().

i get a Unauthorized Exception in DC.Bindings as described here: http://plone.org/documentation/error/unauthorized-not-authorized-to-access-binding-context

i still get the unauthorized exception - but it works if i do a
except Unauthorized:
     pass

instead of raising the UnauthorizedBindingException. I think i have to search the right context for doing such things...

Mmm that doesn't sound right. :)

I think you need to use the portlet manager setup code and just extend it (you can register a custom portlet manager) to be able to render just one portlet by id.

Look at collective.portletpage for some more inspiration.

Martin

--
Author of `Professional Plone Development`, a book for developers who
want to work with Plone. See http://martinaspeli.net/plone-book


_______________________________________________
Product-Developers mailing list
[email protected]
http://lists.plone.org/mailman/listinfo/product-developers

Reply via email to