plone.app.discussion/docs/source/howtos/howto_override_comments_viewlet.txt
Timo Stollenwerk 432f015fe4 howto override the comments viewlet js section added.
svn path=/plone.app.discussion/trunk/; revision=51797
2011-08-26 10:34:36 +00:00

127 lines
3.4 KiB
Plaintext

================================================================================
How to override plone.app.discussion's comments viewlet
================================================================================
Override the comments template through-the web
----------------------------------------------
* go to the ZMI
* click on portal_view_customizations
* customize plone.comments (plone.app.discussion.interfaces.IDiscussionLayer)
Override the comments template with z3c.jbot on the file system
---------------------------------------------------------------
http://pypi.python.org/pypi/z3c.jbot
setup.py::
install_requires=[
...
'z3c.jbot',
],
configure.zcml::
<include package="z3c.jbot" file="meta.zcml" />
<browser:jbot
directory="overrides"
layer="<layer>" />
Replace <layer> with a custom browserlayer of your package.
Create template directory::
$ mkdir overrides
Copy comments viewlet template to overrides directory::
$ cp ../parts/omelette/plone/app/discussion/browser/comments.pt overrides/plone.app.discussion.browser.comments.pt
Restart your Plone instance and you can start to customize your copy of the comments viewlet.
Override the comments viewlet class on the file system
------------------------------------------------------
interfaces.py::
from plone.app.discussion.interfaces import IDiscussionLayer
class IMyDiscussionLayer(IDiscussionLayer):
"""Marker interface for browser layer
"""
profiles/default/browserlayer.xml::
<?xml version="1.0"?>
<layers>
<layer name="my.discussion"
interface="my.discussion.interfaces.IMyDiscussionLayer" />
</layers>
configure.zcml::
<!-- Override plone.app.discussion's comments viewlet -->
<browser:viewlet
name="plone.comments"
for="Products.CMFCore.interfaces.IContentish"
layer="plone.app.discussion.interfaces.IDiscussionLayer"
manager="plone.app.layout.viewlets.interfaces.IBelowContent"
view="plone.app.layout.globals.interfaces.IViewView"
class=".comments.CommentsViewlet"
permission="zope2.View"
/>
comments.py::
from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
from plone.app.discussion.browser.comments import CommentsViewlet as PloneAppDiscussionCommentsViewlet
from plone.app.discussion.browser.comments import CommentForm
class CommentsViewlet(PloneAppDiscussionCommentsViewlet):
form = CommentForm
index = ViewPageTemplateFile('comments.pt')
def get_commenter_home_url(self, username=None):
if username is None:
return None
else:
return "%s/memberhome/%s" % (self.context.portal_url(), username)
comment.pt::
...
Override the comments viewlet Javascript
----------------------------------------
profiles/default/jsregistry.xml::
<?xml version="1.0"?>
<object name="portal_javascripts">
<javascript
id="++resource++plone.app.discussion.javascripts/comments.js"
remove="True"
/>
<javascript
id="++resource++example.myaddonproduct.javascripts/comments.js" />
</object>
browser/configure.zcml::
<!-- Resource directory for javascripts -->
<browser:resourceDirectory
name="example.myaddonproduct.javascripts"
directory="javascripts"
layer="example.myaddonprocuts.interfaces.IBrowserLayer"
/>