From f3be97ef4d4ce829bdf69b1fe84516cf0b977272 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Sun, 30 Oct 2011 10:10:55 +0100 Subject: [PATCH] Comments viewlet howto updated. --- .../howto_override_comments_viewlet.txt | 78 +++++++++++++++---- 1 file changed, 61 insertions(+), 17 deletions(-) diff --git a/docs/source/howtos/howto_override_comments_viewlet.txt b/docs/source/howtos/howto_override_comments_viewlet.txt index f766799..0fd424b 100644 --- a/docs/source/howtos/howto_override_comments_viewlet.txt +++ b/docs/source/howtos/howto_override_comments_viewlet.txt @@ -2,27 +2,51 @@ How to override plone.app.discussion's comments viewlet ================================================================================ +This document explains how to override the plone.app.discussion comments +viewlet that controls the way existing comments are displayed. + +There are three different ways to override plone.app.discussion's comments +viewlet: through-the-web, on the file system with z3c.jbot, and by overriding +the comments viewlet class on the file system. + +Overriding the comments viewlet template throught-the-web is the quick and +dirty approach. Using z3c.jbot is the recommended approach if you just want to +override the comments viewlet template. If you want full control over the +comments viewlet class, for instance if you want to add/customize view methods, +overriding the comments viewlet class on the file system is the recommended +approach. + + Override the comments template through-the web ---------------------------------------------- - * go to the ZMI - * click on portal_view_customizations - * customize plone.comments (plone.app.discussion.interfaces.IDiscussionLayer) +Overriding the comments template through-the web is the easiest way to +customize the comments viewlet:: + + * Go to the ZMI (http://localhost:8080/Plone/manage_main) + * 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 +The easiest way to override the comments template on the file +system is with `z3c.jbot`_. `z3c.jbot`_ allows you to override any +Plone template just by putting a file in a specific directory. -setup.py:: +`z3c.jbot`:: http://pypi.python.org/pypi/z3c.jbot + +Add z3c.jbot to the dependencies of your package by adding a +line to your setup.py file:: install_requires=[ ... 'z3c.jbot', ], -configure.zcml:: +Register an overrides directory where you can put your file +overrides in your configure.zcml file:: @@ -32,51 +56,66 @@ configure.zcml:: Replace with a custom browserlayer of your package. -Create template directory:: +Create the template directory we just registered:: $ mkdir overrides -Copy comments viewlet template to overrides directory:: +Copy the comments viewlet template we want to override to the +overrides directory we just created and registered:: $ 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. +Restart your Plone instance and you can start to customize +the plone.app.discussion.browser.comments.pt we just created. Override the comments viewlet class on the file system ------------------------------------------------------ -interfaces.py:: +Overriding/subclassing the comments viewlet class is allows you not only to +override the comments viewlet template, but also the comment viewlets view +methods. There are many ways to override components in Plone with the Zope +Component Architecture (ZCA), which is beyond the scope of this howto. + +We are going to register our own browserlayer + +First we define our browser layer in interfaces.py:: from plone.app.discussion.interfaces import IDiscussionLayer class IMyDiscussionLayer(IDiscussionLayer): - """Marker interface for browser layer + """Marker interface for a custom plone.app.discussion browser layer """ -profiles/default/browserlayer.xml:: +Next, we register the browserlayer in our generic setup (GS) setup in the +profiles/default/browserlayer.xml file:: - + + configure.zcml:: -comments.py:: +note: Note that we override the comments viewlet by using the my.discussion.interfaces.IMyDiscussionLayer browser layer and not the default plone.app.discussion.interfaces.IDiscussionLayer browser layer. + +Once we registered the custom discussion browser layer and the viewlet, we can create a +comments.py file with our custom version of the comments viewlet:: from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile @@ -95,8 +134,8 @@ comments.py:: else: return "%s/memberhome/%s" % (self.context.portal_url(), username) - -comment.pt:: +To override the comments viewlet template, we create a comment.pt file in the +same directory and copy the contents from:: ... @@ -104,14 +143,19 @@ comment.pt:: Override the comments viewlet Javascript ---------------------------------------- +Overriding the comments viewlet javascript works just like overriding the +comments viewlet. We register the javascript file for our custom browser +layer and remove the existing javascript file in profiles/default/jsregistry.xml:: + +