Martin Aspeli schrieb:
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 did it - it works now!
the reason why it did not work for my code is a bug in five described
here: https://bugs.launchpad.net/zope2/+bug/176566
... i'm posting this here just to save time for people who fight against
the same problem
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
_______________________________________________
Product-Developers mailing list
[email protected]
http://lists.plone.org/mailman/listinfo/product-developers