<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
>

<channel>
	<title>ITauthor &#187; Plone/Zope</title>
	<atom:link href="http://www.itauthor.com/category/plonezope/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.itauthor.com</link>
	<description>Stuff about technical writing and software</description>
	<lastBuildDate>Thu, 29 Jul 2010 07:27:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
<!-- podcast_generator="Blubrry PowerPress/1.0.8" mode="advanced" entry="normal" -->
	<itunes:summary>Talking about technical writing, software and technology in general. The ITauthor Podcast is an advert-free, irregularly published show by technical writers for technical writers or anyone interested in software documentation or IT generally.</itunes:summary>
	<itunes:author>Alistair Christie - ITauthor.com</itunes:author>
	<itunes:explicit>no</itunes:explicit>
	<itunes:image href="http://www.itauthor.com/images/ITauthor-PhotoLogo-300px.jpg" />
	<itunes:owner>
		<itunes:name>Alistair Christie - ITauthor.com</itunes:name>
		<itunes:email>comments@itauthor.com</itunes:email>
	</itunes:owner>
	<managingEditor>comments@itauthor.com (Alistair Christie - ITauthor.com)</managingEditor>
	<copyright>2006-2009</copyright>
	<itunes:subtitle>Talking about technical writing, software and technology in general.</itunes:subtitle>
	<itunes:keywords>itauthor, alistair christie, technology, writing, documentation </itunes:keywords>
	<image>
		<title>ITauthor &#187; Plone/Zope</title>
		<url>http://www.itauthor.com/images/ITauthor-PhotoLogo-144px.jpg</url>
		<link>http://www.itauthor.com/category/plonezope/</link>
	</image>
	<itunes:category text="Technology">
		<itunes:category text="Software How-To" />
		<itunes:category text="Tech News" />
		<itunes:category text="Podcasting" />
	</itunes:category>
		<item>
		<title>My old Plone site &#8211; preserved</title>
		<link>http://www.itauthor.com/2007/06/17/my-old-plone-site-preserved/</link>
		<comments>http://www.itauthor.com/2007/06/17/my-old-plone-site-preserved/#comments</comments>
		<pubDate>Sun, 17 Jun 2007 23:17:03 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[Plone/Zope]]></category>
		<category><![CDATA[View all]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/wordpress/2007/06/17/my-old-plone-site-preserved/</guid>
		<description><![CDATA[A couple of years ago the ITauthor web site was a combination of Plone (for articles), MovableType (for blog entries), WordPress/Loudblog (for podcasts) and various Perl-based pages or static HTML pages. Last year, when I finally gave up on Plone and decided&#160;to simplify everything by just using WordPress. I took&#160;snapshot HTML files of my Plone [...]]]></description>
			<content:encoded><![CDATA[<p>A couple of years ago the ITauthor web site was a combination of Plone (for articles), MovableType (for blog entries), WordPress/Loudblog (for podcasts) and various Perl-based pages or static HTML pages.</p> <p>Last year, when I finally gave up on Plone and decided&nbsp;to simplify everything by just using WordPress. </p> <p>I took&nbsp;snapshot HTML files of my Plone site, which you can access here:</p> <p><a title="http://plonesite2005.itauthor.com/" href="http://plonesite2005.itauthor.com/">http://plonesite2005.itauthor.com/</a></p> <p>Typically, for me, I then forgot I'd done this until this evening when I stumbled upon it while browsing around the command line of my web server.</p> <p>Note: Although it looks like a Plone site, and most (but not all) of the links work like they should, it's actually not using Plone/Zope at all. It's just a collection of static HTML pages. Because of this, it doesn't perform as nicely as Plone and clicking through it feels very clunky compared to how it worked when the pages were really being served up from the Zope database. However, it gives you an idea of what I had on there and how it looked.</p>]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2007/06/17/my-old-plone-site-preserved/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Showing a Plone tab as selected</title>
		<link>http://www.itauthor.com/2005/12/06/showing-a-plone-tab-as-selected/</link>
		<comments>http://www.itauthor.com/2005/12/06/showing-a-plone-tab-as-selected/#comments</comments>
		<pubDate>Tue, 06 Dec 2005 18:48:27 +0000</pubDate>
		<dc:creator>alistair at home</dc:creator>
				<category><![CDATA[Plone/Zope]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/wordpress/?p=171</guid>
		<description><![CDATA[I just added a "Podcasts" tab to ITauthor.com, but initially it wasn't displaying as selected. The &#60;li&#62; element should get class="selected" when it's selected, but it resolutely stayed class="plain" and so it didn't come to the front when clicked. After a lot of digging I discovered the solution in: http://plone.org/documentation/how-to/changing-tabs The trick is that you [...]]]></description>
			<content:encoded><![CDATA[I just added a "Podcasts" tab to ITauthor.com, but initially it wasn't displaying as selected. The &lt;li&gt; element should get class="selected" when it's selected, but it resolutely stayed class="plain" and so it didn't come to the front when clicked.

After a lot of digging I discovered the solution in:
<a href="http://plone.org/documentation/how-to/changing-tabs">http://plone.org/documentation/how-to/changing-tabs</a>

The trick is that you have to make sure that the ID for the tab is the same value as the short name you give the page you are linking to.]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2005/12/06/showing-a-plone-tab-as-selected/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Autostarting Zope</title>
		<link>http://www.itauthor.com/2005/03/13/autostarting-zope/</link>
		<comments>http://www.itauthor.com/2005/03/13/autostarting-zope/#comments</comments>
		<pubDate>Sun, 13 Mar 2005 18:03:03 +0000</pubDate>
		<dc:creator>alistair at home</dc:creator>
				<category><![CDATA[Plone/Zope]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/wordpress/?p=129</guid>
		<description><![CDATA[When you first install Plone/Zope on Linux, you stop and start the Zope server by going to the zope/bin directory and running the zopectl script: ./zopectl start or ./zopectl stop This is all right to begin with, but what you really want is for Zope to start up automatically when the machine boots up. One [...]]]></description>
			<content:encoded><![CDATA[When you first install Plone/Zope on Linux, you stop and start the Zope server by going to the <strong>zope/bin</strong> directory and running the <strong>zopectl</strong> script:

<strong>./zopectl start</strong>
or
<strong>./zopectl stop</strong>

This is all right to begin with, but what you really want is for Zope to start up automatically when the machine boots up. One way to do this is to edit the <strong>/etc/rc.local</strong> file and add a line such as:

<strong>su <em>&lt;zopeuser&gt;</em> -c "<em>&lt;path&gt;</em>/zope/bin/zopectl start"
</strong>

For example:
<strong>su joe -c "/usr/local/zope/bin/zopectl start"
</strong>

The <strong>su</strong> command switches to the specified user (in the above example joe). This is the user that zope is configured to run as. Typically, you will run the Zope server as a non-root user. 

<strong>su <em>&lt;user&gt;</em> -c <em>&lt;command&gt;</em></strong> means run the following single command as the specified user.]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2005/03/13/autostarting-zope/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>S5: A Simple Standards-Based Slide Show System</title>
		<link>http://www.itauthor.com/2005/02/24/s5-a-simple-standards-based-slide-show-system/</link>
		<comments>http://www.itauthor.com/2005/02/24/s5-a-simple-standards-based-slide-show-system/#comments</comments>
		<pubDate>Thu, 24 Feb 2005 21:19:49 +0000</pubDate>
		<dc:creator>alistair at home</dc:creator>
				<category><![CDATA[Plone/Zope]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/wordpress/?p=123</guid>
		<description><![CDATA[Browsing around looking for information about Plone and WebDAV, I came across Enfold Systems and their Plone Desktop, which sounds very promising (and the demo works well) but I assumed that it was Open Source and was disappointed to find out that it wasn't. I am concerned about the security aspects of this system, the [...]]]></description>
			<content:encoded><![CDATA[Browsing around looking for information about Plone and WebDAV, I came across <a href="http://www.enfoldsystems.com/">Enfold Systems</a> and their <a href="http://www.enfoldsystems.com/Products/Desktop">Plone Desktop</a>, which sounds very promising (and the demo works well) but I assumed that it was Open Source and was disappointed to find out that it wasn't. I am concerned about the security aspects of this system, the lack of documentation on Enfold's web site, and most of all by the inability to buy it - the listed UK reseller had nothing about Plone Desktop on their web site. I couldn't even find anything in a search. So I dropped any thoughts I had of using that.

However, the Enfold site mentions a slide show product for Plone, which uses something called S5, developed by none other than Eric Meyer. At the mention of this name my interest was well and truly pricked and I enjoyed browsing over to <a href="http://www.meyerweb.com/">meyerweb</a> for the first time in a while to check out S5. 

S5 is: "S5 is a slide show format based entirely on XHTML, CSS, and JavaScript. With one file, you can run a complete slide show and have a printer-friendly version as well." Judging by the demo, the slide shows look like they have to be kept pretty simple, without all the bells and whistles of PowerPoint, but that's a good thing! I may try this out at some point in the coming months.

Incidentally, I notice that Eric is using WordPress. WordPress is something that's bubbled to the surface of my attention pool with several mentions recently. My colleague Cary gave me a demo and it looks very nice, with a huge number of skins to choose from. I just wonder if WordPress is taking over from Blogger and Radio and MovableType as the preferred blog tool. But I think I'll stick with MovableType, at least for now. It may be horribly complicated to customize and has an interface that may look okay but is clunky* and unintuitive to use - however, it works for me, and I've got enough other stuff to do right now without thinking about migrating to a new blog system.

* e.g. having to scroll way down the page to save this entry!  8-(]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2005/02/24/s5-a-simple-standards-based-slide-show-system/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My first Python script &#8211; an HTML grabber</title>
		<link>http://www.itauthor.com/2005/02/22/my-first-python-script-an-html-grabber/</link>
		<comments>http://www.itauthor.com/2005/02/22/my-first-python-script-an-html-grabber/#comments</comments>
		<pubDate>Tue, 22 Feb 2005 01:35:26 +0000</pubDate>
		<dc:creator>alistair at home</dc:creator>
				<category><![CDATA[Plone/Zope]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/wordpress/?p=118</guid>
		<description><![CDATA[I've been looking for ways of getting content from other sites and inserting it into my site (properly credited, of course). Doing this with RSS feeds is easy - that's what they're made for - but doing it with any old web page that may not be made of well-formed XHTML, and may even be [...]]]></description>
			<content:encoded><![CDATA[I've been looking for ways of getting content from other sites and inserting it into my site (properly credited, of course). Doing this with RSS feeds is easy - that's what they're made for - but doing it with any old web page that may not be made of well-formed XHTML, and may even be very badly formed HTML, is much more tricky.

I wanted to do something I could use in Plone, so that pretty much meant Python - and I know very little about Python and have never written any Python, before this evening.

A big help came in the form of the weirdly named Beautiful Soup (see <a href="http://www.crummy.com/software/BeautifulSoup/examples.html">www.crummy.com/software/BeautifulSoup/examples.html</a>), although it's almost wholy undocumented, which means working out for yourself how to use it from the few examples out there.

Another big help was urllib (<a href="http://docs.python.org/lib/module-urllib.html">http://docs.python.org/lib/module-urllib.html</a>) and urllib2 (<a href="http://python.active-venture.com/lib/module-urllib2.html">http://python.active-venture.com/lib/module-urllib2.html</a>), which you can see in the code below.

So I wrote a test script (my first Python script) called grabber.py. What this script does is it calls a URL which runs a search of my Movable Type weblog, returning summaries of *all* the entries in the blog. The URL includes parameters, which are generated in the "params = urllib.urlencode(...)" line of code. The script then feeds this large chunk of HTML through Beautiful Soup, which uses the map function - "map(lambda x: x.first('a'), soup('h3'))" - to parse out just the &lt;a&gt;...&lt;/a&gt; elements within &lt;h3&gt;...&lt;/h3&gt; elements.

These anchor elements get put in an array called anchorelement, and I then iterate through the first 5 anchors, assigning them to a variable called newHTML, which I finally write out to a file called notesgrab.html.

You can view this file here: <a href="http://www.itauthor.com/notes/notesgrab.html">www.itauthor.com/notes/notesgrab.html</a>
<span id="more-118"></span>
<h3>grabber.py</h3>
<pre>import urllib, urllib2<br />from BeautifulSoup import BeautifulSoup<br /><br />url = 'http://localhost/cgi-bin/mt/mt-search.cgi'<br />params = urllib.urlencode({'IncludeBlogs': 1, 'Template': 'notes', 'RegexSearch': 1, 'search': '.*'})<br /><br />html = urllib2.urlopen(url, params).read()<br />soup = BeautifulSoup()<br />soup.feed(html)<br /><br />newHTML = '&lt;html&gt;\n&lt;body&gt;\n\n'<br />newHTML += '&lt;h1&gt;Grabbed HTML&lt;/h1&gt;\n\n'<br />counter = 0<br />for anchorelement in map(lambda x: x.first('a'), soup('h3')):<br />&nbsp;&nbsp;&nbsp;&nbsp;strAnchor = str(anchorelement)<br />&nbsp;&nbsp;&nbsp;&nbsp;counter += 1<br />&nbsp;&nbsp;&nbsp;&nbsp;if counter==1:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;continue #The first time round strAnchor always == 'None' so skip it.<br />&nbsp;&nbsp;&nbsp;&nbsp;elif counter&gt;6:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break #Stop after the first 5 anchors have been added.<br />&nbsp;&nbsp;&nbsp;&nbsp;else:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newHTML += ('&lt;p&gt;' + strAnchor + '&lt;/p&gt;\n\n')<br /><br />newHTML += '&lt;/body&gt;\n&lt;/html&gt;'<br />outfile = open ( 'notesgrab.html', 'w' )<br />outfile.write(newHTML) <br />outfile.close()</pre>

To run this on my Linux machine, I enter the command:
<b>python grabber.py</b>

The next thing to do is either to set this up as a cron job to run every half an hour or so, or to use the Zope Management Interface to incorporate this into my Plone site, so that I can use it (or other more useful variants of it) to deliver dynamically generated content.]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2005/02/22/my-first-python-script-an-html-grabber/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting content from an RSS feed</title>
		<link>http://www.itauthor.com/2005/02/20/getting-content-from-an-rss-feed/</link>
		<comments>http://www.itauthor.com/2005/02/20/getting-content-from-an-rss-feed/#comments</comments>
		<pubDate>Sun, 20 Feb 2005 22:52:14 +0000</pubDate>
		<dc:creator>alistair at home</dc:creator>
				<category><![CDATA[Plone/Zope]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/wordpress/?p=117</guid>
		<description><![CDATA[At http://wiley.ed.usu.edu/index_html/2004092301 David Wiley explains how to parse an RSS feed, extract content from it and render that content as HTML in a page in your Plone site. His explanation tells you all you need to know. All you then need to do is get feedparser from Sourceforge and install it. I used wget to [...]]]></description>
			<content:encoded><![CDATA[At <a href="http://wiley.ed.usu.edu/index_html/2004092301">http://wiley.ed.usu.edu/index_html/2004092301</a> David Wiley explains how to parse an RSS feed, extract content from it and render that content as HTML in a page in your Plone site.

His explanation tells you all you need to know. All you then need to do is get <a href="http://sourceforge.net/projects/feedparser/">feedparser from Sourceforge</a> and install it. I used wget to download it onto my Linux machine, but then found I couldn't unzip it with gunzip. So I had to use WinZip on my Windows PC and then copy the unzipped folder across to the Linux machine via SSH.

The install instructions in the README file are as follows:

To install:
$ python setup.py install

and it really is as simple as that. It works.

I then modified David Wiley's Python script a little (see below) because I wanted to use it for several pages of RSS-fed content. So I took the description out of the Python file (which I called rssfeed.py) and put it in the index.html page template instead. And that was about it. All I had to do then was choose a suitable RSS feed. The one I chose to try out was the list of most popular web pages in the "Programming" category at <a href="http://del.icio.us/rss/opencontent">http://del.icio.us</a>.

You can see the resulting dynamically generated page at <a href="http://www.itauthor.com/programming/popproglinks/">www.itauthor.com/programming/popproglinks</a>.
<span id="more-117"></span>
<h3>External method: doRSS</h3>
<pre>External method ID: doRSS
Title: Popular programming links
Module name: rssfeed
Function name: rssMagic</pre>

<h3>Python script: rssfeed.py</h3>
<pre>def rssMagic(myParam):
    import feedparser
    feed = feedparser.parse(myParam)
    html = ""
    for x in feed["items"]:
        html = html + "&lt;a href='" + unicode(x[ "link" ]).encode("iso-8859-2", "replace") +"'&gt;"
        html = html + unicode(x[ "title" ]).encode("iso-8859-2", "replace") + "&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;\n"
    return html</pre>

<h3>Page template: index.html</h3>
<pre>&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
      lang="en"
      metal:use-macro="here/main_template/macros/master"
      i18n:domain="plone"&gt;<br />
&lt;title&gt;Popular programming links&lt;/title&gt;<br />
&lt;body&gt;<br />
&lt;metal:main fill-slot="main"&gt;<br />
        &lt;h1 class="documentFirstHeading"&gt;
          Popular programming links
        &lt;/h1&gt;<br />    
        &lt;div metal:use-macro="here/document_actions/macros/document_actions"&gt;
            Document actions (print, sendto etc)
        &lt;/div&gt;<br />    
        &lt;div class="documentDescription"&gt;
            The following links are taken from an RSS feed of the Programming category at 
            &lt;a href='http://del.icio.us/rss/opencontent'&gt;del.icio.us&lt;/a&gt;.
        &lt;/div&gt;<br />        
            &lt;div tal:replace="structure python: here.doRSS(myParam='http://del.icio.us/rss/popular/programming')"/&gt;<br /><br />
        &lt;div metal:use-macro="here/document_byline/macros/byline"&gt;
          Get the byline - contains details about author and modification date.
        &lt;/div&gt;
&lt;/metal:main&gt;<br />
&lt;/body&gt;
&lt;/html&gt;</pre>]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2005/02/20/getting-content-from-an-rss-feed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Recent items for non-members</title>
		<link>http://www.itauthor.com/2005/02/16/recent-items-for-non-members/</link>
		<comments>http://www.itauthor.com/2005/02/16/recent-items-for-non-members/#comments</comments>
		<pubDate>Wed, 16 Feb 2005 22:40:35 +0000</pubDate>
		<dc:creator>alistair at home</dc:creator>
				<category><![CDATA[Plone/Zope]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/wordpress/?p=114</guid>
		<description><![CDATA[My Plone site is a non-member site - i.e. I can log on and change stuff, but everyone else just gets to look. The "Recent Items" portlet that comes with Plone is based on your last login date/time, so it doesn't show up if you aren't logged in. A simple method for getting a list [...]]]></description>
			<content:encoded><![CDATA[My Plone site is a non-member site - i.e. I can log on and change stuff, but everyone else just gets to look. The "Recent Items" portlet that comes with Plone is based on your last login date/time, so it doesn't show up if you aren't logged in.

A simple method for getting a list of recent items that everyone gets to see is very nicely explained at <a href="http://www.zettai.net/Forums/04/1081998202/view">www.zettai.net/Forums/04/1081998202/view</a>.

For a large, high-volume site you'd need to do something a bit smarter to work out the date 2 or 3 weeks ago (or less), but for my purposes using <pre>tal:define="last_login_time python:DateTime('1/1/2005'); ... </pre>works fine.]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2005/02/16/recent-items-for-non-members/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Displaying the 3 As for text sizing</title>
		<link>http://www.itauthor.com/2005/02/09/displaying-the-3-as-for-text-sizing/</link>
		<comments>http://www.itauthor.com/2005/02/09/displaying-the-3-as-for-text-sizing/#comments</comments>
		<pubDate>Wed, 09 Feb 2005 23:50:38 +0000</pubDate>
		<dc:creator>alistair at home</dc:creator>
				<category><![CDATA[Plone/Zope]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/wordpress/?p=111</guid>
		<description><![CDATA[The default Plone skin used to have 3 letter As at the top right corner for text sizing. These have been replaced by the words: "small text", "normal text", "large text" - as you can see at plone.org. However, I prefer the 3 As and I wanted to use them instead. Simple you might think. [...]]]></description>
			<content:encoded><![CDATA[<p>The default Plone skin used to have 3 letter As at the top right corner for text sizing. These have been replaced by the words: "small text", "normal text", "large text" - as you can see at <a href="http://plone.org/">plone.org</a>.</p>

<p>However, I prefer the 3 As and I wanted to use them instead. Simple you might think. I thought so too, but not so. One of the painful things about developing a web site using pages that are dynamically generated by something like Zope/Plone is that you can't look at other people's source and work out what they're doing.</p>

<p>I eventually *did* work out how it was done, but only after hours of trial and error and anguish, that required me piecing back together how the global_siteactions code (in /portal_skins in the ZMI) *used* to look. I did this using the Plone CVS logs on SourceForge. Not nice! I also made use of the Web Developer add-on for Firefox, which makes it easier to see what CSS styles a page is using.</p>

<p>In brief, the secret is to write a custom global_siteactions like this:</p>

<pre>&lt;html xmlns="http://www.w3.org/1999/xhtml"
      xml:lang="en"
      lang="en"
      i18n:domain="plone"&gt;

&lt;body&gt;
&lt;div metal:define-macro="site_actions"
      id="portal-siteactions"
      tal:define="site_actions actions/site_actions|nothing;
                  getIconFor nocall:putils/getIconFor"
      tal:condition="site_actions"&gt;
 
     &lt;tal:actions repeat="saction site_actions"&gt;&lt;a 
             href="" 
             i18n:attributes="title"
             tal:attributes="href saction/url;
                             style string:background: url($portal_url/$icon);
                             title title;"
             tal:define="title saction/name;
                         icon python:getIconFor('site_actions', saction['id'], None)"
             tal:condition="icon"
            &gt;&lt;/a&gt;&lt;/tal:actions&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>

<p>You then need to make/edit a custom plone.css stylesheet, removing all the existing styles for portal-siteactions ID styles, and replacing them with this:</p>

<pre>#portal-siteactions {
    position: absolute;
    top: 11px;
    right: 16px;
    width: 54px;
    margin: 0;
    padding: 0;
    z-index: 2;
}
#portal-siteactions a {
    display: block;
    float: left;
    padding: 18px 0 0 0;
    width: 18px;
    height: 0px !important;
    height /**/: 18px;
    overflow: hidden;
}</pre>

<p>There was lots of other stuff I changed along the way, but I think these were the important changes. I can't guarantee it though because this has taken me hours and hours of late evening work, and I'm too exhausted right now to try and retrace my steps. All to get 3 little As to appear. Would you believe it? </p>]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2005/02/09/displaying-the-3-as-for-text-sizing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Preventing visitors from finding users in a search</title>
		<link>http://www.itauthor.com/2005/02/08/preventing-visitors-from-finding-users-in-a-search/</link>
		<comments>http://www.itauthor.com/2005/02/08/preventing-visitors-from-finding-users-in-a-search/#comments</comments>
		<pubDate>Tue, 08 Feb 2005 10:10:50 +0000</pubDate>
		<dc:creator>alistair at home</dc:creator>
				<category><![CDATA[Plone/Zope]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/wordpress/?p=110</guid>
		<description><![CDATA[My Plone site is intended to be view-only to most of the world. So you can come and browse around, but you can't contribute unless I give you a logon. That part was easy to set up, but I also wanted to prevent non-contributors from seeing the Members list or members' pages. It's easy to [...]]]></description>
			<content:encoded><![CDATA[My Plone site is intended to be view-only to most of the world. So you can come and browse around, but you can't contribute unless I give you a logon. That part was easy to set up, but I also wanted to prevent non-contributors from seeing the Members list or members' pages. It's easy to prevent the Members folder from being displayed, but it's not quite so easy to prevent people from running a site-wide search that will hit on something within the Members area. 

I discovered how to do this on the following useful plone.org page:

<strong>Limiting Search to Sections of Site</strong>
<a href="http://plone.org/documentation/howto/how-to-limit-search">http://plone.org/documentation/howto/how-to-limit-search</a>

This page also reveals (part of) something else I wanted to do. I'd seen on other Plone site (e.g. <a href="http://scs.ictp.it/">http://scs.ictp.it/</a>) a search box with a drop-down list that allows you to search sections of the site, or other websites (Amazon, Google, etc). This page shows how to do the site-section part of this.

The relevant sections are:
<strong>As done on plone.org</strong> by Joel Burton and
<strong>Limiting search to a member's folder</strong> by Bill Page
<span id="more-110"></span>
One of the trickiest thing about following instructions for customizing Plone is to find stuff in the ZMI. I had to search a bit to find global_searchbox, and then how to add a script to the skins folder. Here's how it's done:

global_searchbox is in the portal_skins/plone_templates folder within your Plone site (for me this is /plone/portal_skins/plone_templates).

You make a copy for customizing, so the next time you want to edit this you can find it in your custom folder (e.g. for me /plone/portal_skins/custom).

To add the Python script to your skins folder, as directed in "Limiting search to a member's folder", you need to copy and paste the script into a text file, get rid of stray spaces at the start of the first few lines, then save the file locally. Then, in the ZMI, go to the portal_skins folder of your Plone site (in my case this is /plone/portal_skins). Click the Add button, top right. Scroll down until you can select Script (Python). You can then browse to the script file you want to upload, making sure you give the new object the correct name.

<strong>To do</strong>
I still need find out how to include extra-site searches within this drop-down.]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2005/02/08/preventing-visitors-from-finding-users-in-a-search/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Plone URLs without the Plone site ID</title>
		<link>http://www.itauthor.com/2005/02/07/plone-urls-without-the-plone-site-id/</link>
		<comments>http://www.itauthor.com/2005/02/07/plone-urls-without-the-plone-site-id/#comments</comments>
		<pubDate>Mon, 07 Feb 2005 22:45:00 +0000</pubDate>
		<dc:creator>alistair at home</dc:creator>
				<category><![CDATA[Plone/Zope]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/wordpress/?p=109</guid>
		<description><![CDATA[I've been chewing this one over for a few weeks now, prodding the Internet for answers whenever I get a spare half hour or so - with no luck, until this evening. I repeatedly skimmed back and forth through Andy McKay's Definitive Guide to Plone for the answer, but came up with nothing. But eventually [...]]]></description>
			<content:encoded><![CDATA[I've been chewing this one over for a few weeks now, prodding the Internet for answers whenever I get a spare half hour or so - with no luck, until this evening.

I repeatedly skimmed back and forth through Andy McKay's <em>Definitive Guide to Plone</em> for the answer, but came up with nothing. But eventually I decided to read through Chapter 10 "Integrating with Other Systems" carefully, and this led me to the answer. 

Actually, I didn't figure out what I'd been doing wrong from Andy McKay's book (although the answer <em>is</em> in there). In fact, I read through the stuff about creating a Virtual Host Monster to the point where he says "At this point, if you're using a proxy Web server in fron of Plone continue the configuration for that Web server in the 'Configuring the Proxy Server' section." I then decided to take a look at my own VHM.

I discovered that, if you have already created a VHM and, in the Zope Management Interface, you click Root Folder &gt; Virtual Host Monster, you get a helpful "About" page that told me all I needed to know. I quote:

<div>

The most common sort of virtual hosting setup is one in which you create a Folder in your Zope root for each domain that you want to serve. For instance <strong>http://www.buystuff.com</strong> is served from Folder /buystuff.com while <strong>http://www.mycause.org</strong> is served from /mycause.org.

A single Virtual Host Monster in your Zope root can handle all of your virtual hosting needs. It doesn't matter what Id you give it, as long as nothing else in your site has the same Id.

The VHM doesn't do anything unless it sees one of the following special path elements in a URL: <em>VirtualHostBase</em> sets the protocol and host, while <em>VirtualHostRoot</em> sets the path root.

If the URL path of a request begins with "/VirtualHostBase/http/www.buystuff.com", for instance, then URLs generated by Zope will start with <strong>http://www.buystuff.com</strong>. Since the port number was not specified, it is left unchanged. If your Zope is running on port 8080, and you want generated URLs not to include this port number, you must use "/VirtualHostBase/http/www.buystuff.com:80".

If the URL contains <em>VirtualHostRoot</em>, then all path elements up to that point are removed from generated URLs. For instance, a request with path "/a/b/c/VirtualHostRoot/d" will traverse "a/b/c/d" and then generate a URL with path <strong>/d</strong>.

Visitors to your site don't see these special names, of course. You insert them into the path using either an external rewriter, such as an Apache RewriteRule or ProxyPass directive, or by setting up a mapping on the "Mappings" tab.

For example, suppose Zope is running on port 8080 behind an Apache running on port 80. You place a Virtual Host Monster in the Zope root Folder, and use Apache to rewrite "/(.*)" to <strong>http://localhost:8080/VirtualHostBase/http/www.buystuff.
com:80/buystuff.com/VirtualHostRoot/$1</strong>.
<em>(Note: this is one long line.)</em>

You could get the same effect in a standalone Zope by adding the line www.buystuff.com/buystuff.com to the "Mappings" tab. In either case, requests for <strong>http://www.buystuff.com/anything</strong> will look for Zope object <strong>/buystuff.com/anything</strong>.

</div>

A quick look in my httpd.conf file and it became clear what my problem had been. I had:

<strong>RewriteRule ^(.*) http://localhost:8080/VirtualHostBase/http/www.itauthor.com:80/
VirtualHostRoot/plone$1 [L,P]</strong>

When I should have had:
<strong>
RewriteRule ^/(.*) http://localhost:8080/VirtualHostBase/http/www.itauthor.com:80/
plone/VirtualHostRoot/$1 [L,P]</strong>

<strong>plone</strong> was in the wrong place!
<span id="more-109"></span>
This highlights a problem with Andy Mckay's book. Okay, if I'd read it more carefully I wouldn't have made this mistake. But the fact is that, despite owning this book, I worked out the necessary rewrite rules from my own Internet research. So:

a) Something about the book meant I couldn't find out how to do this using the book - although the information *was* in there.

b) Having made a mistake, I couldn't easily find the solution in the book.

The obvious answer is that the index is not up to scratch. But I think there's more to it than that. I think there's a problem with the structure of Andy McKay's book - at least for me. Because what I wanted to do with Plone was install it and quickly customize it to look and behave according to my particular requirements.

Installing Plone was a problem on Fedora Core 3, and I had to delve deeply into obscure Internet sources to sort out the dependency problems Fedora threw up during installation. This wasn't the book's problem, but the fact that the book wasn't helpful here caused my first doubts about its reliability.

Having got Plone working I wanted to start customizing it. However, Andy McKay's book goes from installation to a sort of simple guide for contributor-only users. It's as if that bit of the book is written for someone else than the rest of the book. Personally, at that stage I didn't want to start adding content. I wanted to configure it first, so I skipped ahead. And as soon as readers start skipping ahead you'd better have a book that is robustly unreliant on being read sequentially. I don't think this book is. I think it suffers from the same problem a lot of software books are afflicted with. It tells you lots of things about the software - lots of things the software does - but doesn't arrange this information into topics that tell you how to achieve particular tasks.

So, for example, opening up the book in the middle, we have the following headers in a chapter on setting up users:

User Registration Tools
Portal Registration
Portal Member Data
Portal Membership
Useful APIs
Cookie Authentication
The Actual User Folder

None of these section headings leap out at me as "Here's something you want to do" or "How to do X". Okay, so I spend much of my time writing Online Help, which is very topic-oriented, but I really don't have the time or inclination to read an application manual from A to Z. I want to read the first chapter, then dip in and out as I use the software.

However, I don't think it's a bad book. If I had a PDF of it that I could search through (i.e. in the absense of a good index) I think the book would be extremely useful. While looking for Plone info I discovered that the book is available online at: <a href="http://www.jazkarta.com/technology/plone/plonebook">www.jazkarta.com/technology/plone/plonebook</a>, so perhaps I'll use that in future, rather than my printed copy.

Jazkarta is quite a nice example of a Plone site.
Other sites I've come across are:

<a href="http://plone.org/">http://plone.org/</a> - if you're into Plone you'll have been here already
<a href="http://www.isradiology.org/">http://www.isradiology.org/</a> - the International Society of Radiology
<a href="http://www.maenner-club.de/">http://www.maenner-club.de/</a> - "MÃƒ&nbsp;¤nner-Club - home is where you hang your @" (a nice-looking German-language site)
<a href="http://support.datasplice.com/">http://support.datasplice.com/</a> - The online support site for DataSplice mobile technology 

But my favourite Plone site is:
<a href="http://scs.ictp.it/">http://scs.ictp.it/</a>
Which is the Scientific Computer Section of the ICTP (the International Centre for Theoretical Physics) in Trieste in Italy. It's very well structured and looks beautiful (most of the work seems to be by Sabrina Visintin), and I'm going to be going back to look at the contents of this site in more detail, it has a lot of interesting-looking topics.]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2005/02/07/plone-urls-without-the-plone-site-id/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Doing away with the Plone site ID in the URL</title>
		<link>http://www.itauthor.com/2005/02/02/doing-away-with-the-plone-site-id-in-the-url/</link>
		<comments>http://www.itauthor.com/2005/02/02/doing-away-with-the-plone-site-id-in-the-url/#comments</comments>
		<pubDate>Wed, 02 Feb 2005 22:53:44 +0000</pubDate>
		<dc:creator>alistair at home</dc:creator>
				<category><![CDATA[Plone/Zope]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/wordpress/?p=107</guid>
		<description><![CDATA[OK, so I'm part of the way there. I had a static home page URL of http://www.itauthor.com/index.html I have a Plone site whose site ID is "plone". You can access my Plone site using the URL http://www.itauthor.com/plone and once in there, anything within the Plone site has the URL http://www.itauthor.com/plone/something I have a MovableType blog [...]]]></description>
			<content:encoded><![CDATA[OK, so I'm part of the way there.

I had a static home page URL of http://www.itauthor.com/index.html

I have a Plone site whose site ID is "plone".
You can access my Plone site using the URL http://www.itauthor.com/plone and once in there, anything within the Plone site has the URL http://www.itauthor.com/plone/<em>something</em>

I have a MovableType blog with the URL http://www.itauthor.com/notes

What I wanted was to replace the static home page with the Plone site - doing away with the "/plone" bit in the URL, but still be able to access my MovableType blog with the same URLs as before.

I have achieved this much by adding the following bits in bold to my Apache httpd.conf file:

&nbsp;&nbsp;&nbsp;&nbsp;RewriteEngine On
&nbsp;&nbsp;&nbsp;&nbsp;<strong>RewriteCond %{REQUEST_URI} !^/notes.*</strong>
&nbsp;&nbsp;&nbsp;&nbsp;<strong>RewriteCond /var/www/%{REQUEST_FILENAME} !-f</strong>
&nbsp;&nbsp;&nbsp;&nbsp;RewriteRule ^(.*) http://localhost:8080/VirtualHostBase/http/www.itauthor.com:80/VirtualHostRoot/plone$1 [L,P]
<span id="more-107"></span>
The existing rewrite rule says take everything in the URL after the domain name and, provided the preceding rewrite conditions are met, put this at the end of a new URL (pointing to the Zope server on port 8080) and redirect the request to that URL.

The two conditions say that for this to happen:

a) the requested URL cannot have "/notes" immediately after the domain. This ensures that http://www.itauthor.com/notes is not rewritten and instead causes the current index page of my MovableType blog to be displayed.

b) the requested page cannot be a file within /var/www. This allows CGI requests to avoid URL rewriting. So, for example, a request for http://www.itauthor.com/cgi-bin/lets/pretend.cgi does not get rewritten and forwarded to the Zope server if the file /var/www/cgi-bin/lets/pretend.cgi exists.

All fine and dandy, except this doesn't really do what I want, because although you can now enter http://www.itauthor.com in a browser address bar and get the page you previously only got by entering http://www.itauthor.com/plone, once you are in the Plone site, all the links use the superfluous "/plone" in their path. This Zope object is required because it allows me to create as many different Plone sites as I want to. 

But in my case I just have one site, so I want links to my stuff about authoring tools to use the URL http://www.itauthor.com/authtools rather than http://www.itauthor.com/plone/authtools.

Andy McKay's book provides no clue, that I can find, as to how to do this, and I have spent many unfruitful hours scouring pages of semi-related internet pages without success - so far.

I'm sure it's possible because I've looked at other Plone sites that use nice small URLs in links. I just can't for the life of me find the answer.

Needless to say, I'll post the details here when I do.]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2005/02/02/doing-away-with-the-plone-site-id-in-the-url/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Speeding up Plone</title>
		<link>http://www.itauthor.com/2005/01/04/speeding-up-plone/</link>
		<comments>http://www.itauthor.com/2005/01/04/speeding-up-plone/#comments</comments>
		<pubDate>Tue, 04 Jan 2005 17:46:15 +0000</pubDate>
		<dc:creator>alistair at home</dc:creator>
				<category><![CDATA[Plone/Zope]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/wordpress/?p=99</guid>
		<description><![CDATA[http://poked.org/entries/needforspeed has some well written instructions for setting up caching of Plone objects. The idea is that you can speed up your Plone site by getting Apache to cache pages that are normally dynamically generated by the Zope server. When someone requests a page that has recently been accessed, they get the copy that was [...]]]></description>
			<content:encoded><![CDATA[<a href="http://poked.org/entries/needforspeed">http://poked.org/entries/needforspeed</a> has some well written instructions for setting up caching of Plone objects.

The idea is that you can speed up your Plone site by getting Apache to cache pages that are normally dynamically generated by the Zope server. When someone requests a page that has recently been accessed, they get the copy that was placed in the cache, rather than having to wait slightly longer for Zope to build the page again.]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2005/01/04/speeding-up-plone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting Apache virtual hosting working with Plone</title>
		<link>http://www.itauthor.com/2004/12/09/getting-apache-virtual-hosting-working-with-plone/</link>
		<comments>http://www.itauthor.com/2004/12/09/getting-apache-virtual-hosting-working-with-plone/#comments</comments>
		<pubDate>Thu, 09 Dec 2004 22:46:06 +0000</pubDate>
		<dc:creator>alistair at home</dc:creator>
				<category><![CDATA[Plone/Zope]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/wordpress/?p=90</guid>
		<description><![CDATA[I've just spent the last couple of hours faffing around trying to get virtual hosting working for my Plone site (which will eventually replace the current incarnation of www.itauthor.com). www.zopewiki.org/ZopeAndApache gives the best explanation I could find of how to set things up, using a RewriteRule in Apache's httpd.conf file. However, neither the instructions there, [...]]]></description>
			<content:encoded><![CDATA[I've just spent the last couple of hours faffing around trying to get virtual hosting working for my Plone site (which will eventually replace the current incarnation of <strong>www.itauthor.com</strong>).

<a href="http://www.zopewiki.org/ZopeAndApache">www.zopewiki.org/ZopeAndApache</a> gives the best explanation I could find of how to set things up, using a RewriteRule in Apache's <strong>httpd.conf</strong> file. However, neither the instructions there, nor in Andy McKay's <em>Definitive Guide to Plone</em> (which I recently bought, and which seems to be a bit of a curate's egg) gave the instructions I needed to get things working.

Both sources say to use something along the lines of:
<em>(Note: RewriteRule is split between 3 lines here, for readability. In reality it's one very long line.)</em>

&lt;VirtualHost *&gt;
&nbsp;&nbsp;&nbsp;&nbsp;ServerName www.itauthor.com
&nbsp;&nbsp;&nbsp;&nbsp;RewriteEngine On
&nbsp;&nbsp;&nbsp;&nbsp;RewriteRule ^/(.*)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://localhost:8080/VirtualHostBase/http/www.
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;itauthor.com:80/plone/VirtualHostRoot/$1 [L,P] 
&lt;/VirtualHost&gt;

When what I really needed was: 

&lt;VirtualHost *&gt;
&nbsp;&nbsp;&nbsp;&nbsp;ServerName www.itauthor.com
&nbsp;&nbsp;&nbsp;&nbsp;RewriteEngine On
&nbsp;&nbsp;&nbsp;&nbsp;RewriteRule ^/plone(.*)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://localhost:8080/VirtualHostBase/http/www.
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;itauthor.com:80/VirtualHostRoot/plone/$1 [L,P]
&lt;/VirtualHost&gt;

Note the subtle differences with "plone" in the RewriteRule.

After lots of trial and error and Holmesian deduction of how RewriteRule worked, I finally figured out the solution and it now works fine - so I can go to bed!

One point worth noting, however - something that isn't spelled out in the McKay book or anywhere else I looked - is that the VirtualHost element, i.e.
&nbsp;&nbsp;&lt;VirtualHost *&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...
&nbsp;&nbsp;&lt;/VirtualHost&gt;
may already have other stuff in it (it will if, like me, you've just installed Fedora Core 3).

Rather than writing a new VirtualHost element, you just add the ServerName, RewriteEngine and RewriteRule attributes to the existing element. My VirtualHost element already had ServerSignature, DirectoryIndex, LogLevel and HostNameLookups attributes. Once I'd figured out that you didn't need a new VirtualHost element, I just added the rewrite attributes underneath the existing attributes.
<span id="more-90"></span>
##################
 Correction 
##################

I found out a couple of months after writing this that the rewrite rule in here was wrong.

See <a href="http://www.itauthor.com/notes/archives/2005/02/plone_urls_with.html">www.itauthor.com/notes/archives/2005/02/plone_urls_with.html</a> for details.]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2004/12/09/getting-apache-virtual-hosting-working-with-plone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting Plone to work on Fedora Core 3</title>
		<link>http://www.itauthor.com/2004/12/05/getting-plone-to-work-on-fedora-core-3/</link>
		<comments>http://www.itauthor.com/2004/12/05/getting-plone-to-work-on-fedora-core-3/#comments</comments>
		<pubDate>Sun, 05 Dec 2004 18:13:06 +0000</pubDate>
		<dc:creator>alistair at home</dc:creator>
				<category><![CDATA[Plone/Zope]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/wordpress/?p=86</guid>
		<description><![CDATA[When I tried to install Plone 2.0.3 I got an error message error: Failed dependencies: python2.3 &#62;= 2.3.3 is needed by Plone2-2.0.3-2.i386 even though Fedora Core 3 comes with Python 2.3.4 A comment on this site: http://longsleep.org/howto/rh9-python233/talkback/1101860526 suggests that it's a common-or-garden bug in the RPM file. So (rather than wait for the next Plone [...]]]></description>
			<content:encoded><![CDATA[When I tried to install Plone 2.0.3 I got an error message 

<strong>error: Failed dependencies:
    python2.3 &gt;= 2.3.3 is needed by Plone2-2.0.3-2.i386 </strong>
    
even though Fedora Core 3 comes with Python 2.3.4

A comment on this site:
<a href="http://longsleep.org/howto/rh9-python233/talkback/1101860526">http://longsleep.org/howto/rh9-python233/talkback/1101860526</a>
suggests that it's a common-or-garden bug in the RPM file.

So (rather than wait for the next Plone RPM) I thought I'd try and use Python 2.3.3, rather than 2.3.4

<a href="http://longsleep.org/howto/rh9-python233">http://longsleep.org/howto/rh9-python233</a>
gives excellent installation instructions for Python 2.3.3.

However, the first time I tried this process I got an error message about more failed dependencies:
<strong>libstdc++.so.5
libstdc++.so.5(CXXABI_1.2)
libstdc++.so.5(GLIBCPP_3.2)</strong>

So I then tried getting and installing these, using the RPM:
<strong>libstdc++-3.2-1.i386.rpm</strong>

To do this I used the commands:
<strong># wget ftp://ftp.pbone.net/mirror/www.haoli.org/pub/redhat-7.x/RPMS/i386/libstdc++-3.2-1.i386.rpm	
# rpm -ivh libstdc++-3.2-1.i386.rpm</strong>

But, no luck here either, 2.3.3 won't install if you already have 2.3.4 installed, all you get are lots of messages like:
<strong>file /usr/lib/python2.3/idlelib/textView.pyo from install of python2.3-tools-2.3.3-2pydotorg conflicts with file from package python-2.3.4-11</strong>

So I tried using <strong>-U</strong> for update
rather than <strong>-i</strong> for install:

<strong>rpm -Uvh db4-4.1.25-14.i386.rpm python2.3-*</strong>

But this generated, wait for it ... failed dependency error messages:

<strong>error: Failed dependencies:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;libdb-4.2.so is needed by (installed) perl-5.8.5-9.i386
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;libdb-4.2.so is needed by (installed) python-2.3.4-11.i386
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;libdb-4.2.so is needed by (installed) pam_ccreds-1-3.i386
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;... and so on ...
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db4 = 4.2.52 is needed by (installed) pam-0.77-65.i386
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db4 = 4.2.52-6 is needed by (installed) db4-devel-4.2.52-6.i386
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db4 = 4.2.52-6 is needed by (installed) db4-utils-4.2.52-6.i386</strong>

So I tried installing the db4 RPM, using:
<strong># wget ftp://ftp.pbone.net/mirror/download.fedora.redhat.com/pub/fedora/linux/core/3/i386/os/Fedora/RPMS/db4-4.2.52-6.i386.rpm
# rpm -ivh db4-4.2.52-6.i386.rpm</strong>

To which I got: 

<strong>Preparing...                ########################################### [100%]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;package db4-4.2.52-6 is already installed</strong>
        
Which is weird, because why was the previous error message
complaining about something that was already installed?

I then searched for installed packages mentioning "python":

<strong># rpm -qa|grep -i python
python-2.3.4-11
libxml2-python-2.6.14-2
gnome-python2-canvas-2.6.0-3
dbus-python-0.22-10
rpm-python-4.3.2-21
gnome-python2-2.6.0-3
python-devel-2.3.4-11
python-ldap-2.0.1-2
mod_python-3.1.3-5
gnome-python2-bonobo-2.6.0-3
gnome-python2-gtkhtml2-2.6.0-3
MySQL-python-0.9.2-4</strong>

and I tried to delete python-2.3.4-11:

<strong># rpm -e python-2.3.4-11</strong>

but this just - yep, you've guessed it:
<strong>error: Failed dependencies:</strong>
followed by lots of lines like:

<strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/usr/bin/python2 is needed by (installed) system-config-rootpassword-1.1.6-1.noarch
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/usr/bin/python2 is needed by (installed) system-config-soundcard-1.2.10-1.noarch
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/usr/bin/python2 is needed by (installed) system-config-users-1.2.25-1.noarch
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/usr/bin/python2 is needed by (installed) system-config-display-1.0.23-1.noarch</strong>

At which point I decided it was time to give up on RPMs and try another way - namely installing from source files.

To do this, first get the tar files for Zope and Plone:
<strong># wget http://zope.org/Products/Zope/2.7.3/Zope-2.7.3-0.tgz
# wget http://heanet.dl.sourceforge.net/sourceforge/plone/Plone-2.0.5.tar.gz</strong>

Then unpack them:
<strong># gunzip Zope-2.7.3-0.tgz
# tar -xvf Zope-2.7.3-0.tar
# gunzip Plone-2.0.5.tar.gz
# tar -xvf Plone-2.0.5.tar</strong>

I then installed Zope (following the INSTALL.txt instructions).

[I also read WEBSERVER.txt, with a view to integrating Zone
with Apache at a later date] 

<strong># ./configure --prefix=/opt/zope
# make
# make install
# /opt/zope/bin/mkzopeinstance.py
Please choose a directory in which you'd like to install
Zope "instance home" files such as database files, configuration
files, etc.

 /home/ac/zope
<strong>Please choose a username and password for the initial user.
These will be the credentials you use to initially manage
your new Zope instance.

 <em>&lt;name&gt;</em>
<strong>Password:</strong> <em>&lt;password&gt;</em>

<strong># cd /home/ac/zope
# ./runzope</strong>

At this point I realised that Zope won't run as root
and I should have installed it as a non-root user
(as the instructions said!).

So:
<strong># cd /home/ac
# chown -R ac:ac zope
# cd /home/ac/zope
# su ac
% ./runzope &amp;</strong>
 
Then Ctrl-Z out of there.

Then browse to:
http://<em>&lt;IP address of host machine&gt;</em>/manage
and log in using the login details I'd specified earlier.

Next, I moved everything in the /home/ac/zope/Products</strong> directory.

I then restarted Zope as follows:
<strong># ps -ef | grep zope
ac       13694     1  7 17:29 ?        00:01:27 /usr/bin/python /opt/zope/lib/python/Zope/Startup/run.py -C /home/ac/zope/etc/zope.conf
root     13701 13608  0 17:48 pts/1    00:00:00 grep zope
# kill -15 13694
# su ac
% /home/ac/zope/runzope &amp;</strong>

Then refresh the browser at 
http://<em>&lt;IP address of host machine&gt;</em>/manage
and the new products appear in the left pane of the browser:
<strong>Root Folder &gt; Control Panel &gt; Products</strong>

Click on <strong>Root Folder</strong>.
In the <strong>Add</strong> drop-down list, select <strong>Plone Site</strong>.
Click <strong>Add</strong>.

Complete the "Add Plone Site" form that is displayed, and click <strong>Add Plone Site</strong>.

After a couple of minutes, the Welcome page of the new Plone site was displayed.

Success!]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2004/12/05/getting-plone-to-work-on-fedora-core-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
