FAQs

Frequently Asked Questions.

Sections
  1. General
  2. About Plone
  3. Getting Plone
  4. Installing Plone
  5. Configuring Plone
  6. Administering Plone
  7. Customizing Plone
  8. Add-On Products
  9. Templates / Changing Visual Design
  10. Plone CSS
  11. Creating New Content Types
  12. Security
  13. Users and Groups
  14. Internationalization
  15. Workflow
  16. Plone and Relational Databases
  17. Licensing & Legal Questions
  18. Contributing
  19. Documentation
  20. Various

General

Does Plone do what I'm looking for?

I'm evaluating a system to do X, Y and Z, can Plone do that? Is Plone the right tool for the job?

The short answer is, yes — Plone can almost certainly do what you want to accomplish. The more interesting part of the answer is whether Plone is the right solution to your problem.

It may be easier to think of Plone as an operating system like Windows/Mac OS X/Linux: It ships with some basic tools and functionality, but a lot of its strength come from the specialized applications that run inside it. You can find examples of these applications in the Products area.

Good matches for Plone

  • If you are happy with the functionality that Plone provides out-of-the-box or with some of the available add-on products.
  • If you are a small-to-medium sized business and don't mind doing some of the technical stuff yourself.
  • If you are a large business or non-profit, and don't mind spending some money/resources on training your staff or hiring consultants.
  • If you need a good, low-maintenance intranet/portal system.
  • If you are producing a dynamic, content-rich web presence for a community.
  • If you are willing to spend some time learning about the underlying technologies when you want to change its behaviour radically or are doing very specialized things with it.

Not-so-good matches for Plone

  • If you don't have a dedicated server and still want full control of your instance.
  • If your server has limited CPU or RAM - you should at least have a 1GHz server with 512MB RAM to use it comfortably.
  • If you need to change Plone, but are unwilling or unable to invest time or resources to learn about the underlying technology - or not willing pay one of the many Plone consulting/training companies to help you.
  • If your solution should have been in place yesterday (aren't they all like this ;) and Plone doesn't do what you need out-of-the-box. Plone is not a trivial software stack, although it does make a lot of complex operations incredibly easy for developers. There is no silver bullet in software development (well - maybe except for unit testing ;) - and you should plan on investing some time to understand the system completely before going live with a deployment - or have a good Plone company to support you.
  • If your main concern is low-cost hosting á la $5/month PHP hosting (Plone is a content management server and an application server - not only a simple scripting language paired with a database). There is a lot of Plone hosting alternatives out there, but they will never be as low-margin as simple PHP/MySQL hosting.
  • If you are looking for a simple weblog or forum or web publishing solution (simple in this context meaning technically less demanding, not usability and ease-of-use, which Plone excels at).

Summary

Plone is excellent for application oriented jobs and Your Average PHP/Java CMS™(1) is good for page oriented jobs. If what you need to produce is a "brochure site", then Plone is probably a bit overkill for your needs - although people use Plone for this too.

If users of the system need to add, modify, and delete content, or if the content is not always table oriented, but requires a process, a workflow, and complex content types with business logic, Plone may be a better choice.

As a decision maker, you should know that there is a learning curve with Plone if you want to know the inner details, although this investment normally pays off in cost savings over the system's lifetime.

As a consultant/developer, an important point is that the knowledge you gain is reusable. That means that over time, you can increase your productivity - sometimes substantially - as you become more adept with Plone. Other systems' architectures are frequently easier to get into, but after an initial gain, the productivity curve flattens.

Plone is certainly capable of most tasks, but that doesn't mean it's the best suited for all of them. Make sure you ask around and have a good plan for what you need right now and in the future - and don't be afraid to ask on the mailing lists if you need advice. We're professional enough to point out when a different solution would be a better match for your requirements.

(1) No offense intended, we're just trying to avoid mentioning specific names. We are absolutely aware that there are systems written in PHP and Java that do not suck - however, these systems are normally not the ones we are asked to compare with Plone.

What does Plone mean? How is it pronounced?

Does the word Plone mean anything, and where does it come from? Why is Plone called Plone?

The word Plone originally comes from the electronic band Plone that used to exist on the Warp record label. The music is playful and minimalistic.

The founders of Plone-the-Software (Alan Runyan and Alexander Limi) were listening to Plone-the-Band when they met (as well as during the initial coding/design of Plone) - and one of the original quotes floating around at the time was that "Plone should look and feel like the band sounds". Thus, a legend was born. ;)

The current status of Plone-the-Band is not known.

Plone is pronounced in the same manner as the word "grown". It is not spelled out when you say it, and is not an abbreviation for anything.

What browsers does Plone work with?

Since Plone is web-based, what kind of browsers does it work with?

Plone supports information access to its pages for all browsers, and as long as the browser isn't parsing and interpreting something it doesn't know how to handle, it's fully functional in any browser. This means you can read content, add content and do all Plone operations from all browsers - although it might be a bit more cumbersome on older browsers.

You will get some additional benefits and ease of use if you have a standards-compliant browser. We have defined four levels of support, and will list some of the common browsers according to these levels, so you know what level you can expect in a particular browser.

The Four Levels of Plone browser support

  1. Information Access
    • Browser prerequisites: (X)HTML parsing, optional CSS1 support
    • This enables:
      • All information and functionality accessible by any user agent.
      • Basic CSS 1 visual appearance (where capable)
  2. Graphical Styling
    • Browser prerequisites: CSS2 support
    • This enables:
      • Plones visual appearance
    • Includes Level 1
  3. Extra UI Features
    • Browser prerequisites: Basic DOM2 support
    • This enables:
      • Action menus
      • Date widget
    • Includes Level 1 and Level 2
  4. Advanced UI Features
    • Browser prerequisites: Full DOM2 support, plus the following built-in features:
      • XmlHttpRequest
      • contentEditable/Midas
    • This enables:
      • Visual Editor for content
      • Information retrieval without reloading entire page
    • Includes Level 1, 2 and 3

Plone does not rely on any external plugins, Flash, Java or similar. It is possible to use these technologies in Plone, but it's not a requirement.

Browser List

Specifies which browsers are capable of a specific level.

Level 4

  • Internet Explorer 6.0 and up
  • Mozilla and Firefox: 1.0 and up
  • Opera 8 and up (Opera 9 and up for the visual editor)
  • Safari 2.0 and up (Safari 3 and up for the visual editor)
  • Chrome 0.2 and up

Level 3

  • Safari 1 and up
  • Opera 7 and up
  • OmniWeb 4.5 and up
  • Mozilla (based) Browsers: ~0.9
  • Internet Explorer 5.5
  • Konqueror 3.2.1 and up

Level 2

  • Opera 5 and 6
  • Windows Internet Explorer 5.0

Level 1

  • Macintosh Internet Explorer 5.x
  • Netscape 4.x
  • Text-mode browsers like lynx and w3m.
  • Everything Else

Are there any online chat rooms for Plone?

Is there any online chat room for Plone, where I can get instant help or ask some questions?

There is a very active Plone IRC chat room located at #plone on the Freenode IRC network. (The link will only work if your browser and IRC client supports it - either Mozilla with Chatzilla or Internet Explorer with mIRC installed.)

The founders of Plone are known as limi and runyaga, and operate on PST (USA) and CST (USA) timezones, respectively. Anyone with operator status is usually a Plone developer.

You can also use the plone.org web/java applet interface to directly connect to the chat server - Click here.

Some simple rules

  • Please note that this is a volunteer service, so be polite - you won't get much help by being rude.
  • Please do your research before you ask questions. Search the mailing lists for questions that have been asked in the past, and also use the search box in the top right with the Documentation pulldown selected before you ask.
  • Also remember that the level of activity varies, so if you don't get help at once, stay online for a while. People will answer if they know, or ask for more details if they need it. Repeating the same question again and again won't help.
  • Don't ask if you can ask a question - just ask it. We know why you are here. :)
  • Don't send private messages to people unless they have asked you to - it's considered rude in the same way as telemarketing calls are. ;)
  • Don't paste code into the chat room - use pastie.org and paste the URL of the result to the channel instead.
  • Chances are that people have had the same challenges as you at some point - so following the above points will ensure a good experience, both for you and for us.

Are there any news groups for Plone?

I prefer newsgroups over mailing lists. Are there any news groups for Plone that I can use with my favorite news reader?

The Plone news groups are actually news group versions of the mailing lists. You can find a list of these groups here, and they can be accessed using any standard news reader.

Should I learn Zope and/or CMF before I start with Plone?

There is so much software here! Is it easier if I try to learn myself Zope of CMF before using the full Plone stack?

In general, it's easier to start with Plone. Lots of effort has been made to smooth out the steep learning curve of Zope and the CMF, so Plone should be considerably easier to work with if you're new to the whole technology stack.

Starting with Plone, you can get the basics up and running, and be productive — then you can start digging downwards from there, and learn stuff like Python, ZPT and how Zope works as you go along.

You don't need to understand the whole software package to be productive and effective with it — that's part of why Plone exists, to make the process less complex, and to make it easier to do the common tasks.

What is Zope 3, and how does it relate to Plone?

There seems to be two different versions of Zope, 2 and 3, which both seem to be under development. I can't install Plone on Zope 3, but need Zope 2. What's up? Should I write my application in Zope 3 instead of Zope 2?

Zope 3 was originally intended as a ground-up rewrite of Zope, and although it borrowed a lot of experience from Zope 2, it is an entirely separate product. Zope 3 never achieved wide adoption, and never fully supplanted Zope 2.  Instead, many pieces of Zope 3 were incorporated into Zope 2, and Zope 3 itself has evolved into a framework known as BlueBream.  Zope 2 continues to be actively developed, and like BlueBream, it draws on the common set of components provided by the Zope Toolkit.

What does this mean for me?

Zope 3 does not exist anymore.  It is not a "newer version of Zope 2."  Zope 2 is still a live and actively developed project, and is one part of a vibrant Zope ecosystem.  Plone still uses Zope 2, which incorporates many of the technologies and coding techniques that were originally developed for Zope 3.

If you are using Plone, you will be using Zope 2, and do not have to worry about "Zope 3."  You will encounter some pieces of the Zope Toolkit as part of Zope 2.

More background

If you're really interested check out:

Importing existing HTML content into Plone

I have an existing site consisting of HTML files, folders and images. Now I'd like to manage that site in Plone. How can I get my existing content into Plone?

The simple answer is just to use FTP or WebDAV. You may need to turn the FTP or DAV server on in etc/zope.conf, but once it is enabled, you should be able to access your site over the FTP or DAV port (set in zope.conf), log in with your Zope or Plone username and password (note: Plone usernames will only work if the path you are connecting to is inside your Plone site), and drag-and-drop content in. Folders should become folders in plone, images should become images, and HTML files should become Pages.

If you have limited amount of content, you can also just create the folders and pages in Plone yourself, and copy-and-paste the content in.

However, that may not get you exactly what you want. Most flat-file sites in HTML contain a lot of formatting and navigation, the equivalents to the navtree and tabs and general styling of Plone. You probably want to move to a CMS precisely because you don't want to manually maintain all that. Unfortunately, Plone has no ways of knowing which parts of your HTML file are real content and which parts are navigation. If your content is poorly structured, e.g. it contains a lot of <font> tags or other non-structural markup, or it depends on particular CSS styles being available in an external stylesheet, it may be hard to make the content look like it fits into the rest of your site.

The long answer, therefore, is that you need to ensure you have structural HTML - markup that only describes your text with <p>'s for paragraphs and <em> for emphasis and so on, without navigation structures or visual markup. Then, the import procedure above should work.

To get the same look-and-feel as your site, you will need to develop a Plone theme (aka "skin" or "style") that themes the whole Plone site to be in line with your desired design. There are several how-tos and tutorials on this subject.

Can I format text such and so in the visual editor?

By design, Plone's visual editor (Kupu) does not allow a full range of formatting options such as font colour or size. However, Plone supports custom styles that can be used as follows:

  • The site administrator defines styles in the editor's configuration (Site Setup > Visual editor > Config > Styles). A paragraph style consists of a name, the HTML element it applies to and optionally a CSS class name.
  • The site's designer assigns CSS properties to these styles in a custom stylesheet (e.g. ploneCustom.css).
  • The author assigns styles to text using the style selection pulldown in the visual editor.

In this way, only semantic mark-up ends up being stored in the content, so that the site can be styled or re-styled consistently using CSS. It's up to the site administrator and the designer to provide authors with a rich set of meaningful styles.

As of Plone version 3, you can create custom styles for:

  • entire block level elements, such as headings and paragraphs (HTML elements: h1..h6, p, div, pre, blockquote)
  • text within a paragraph: character styles, also known as inline styles (HTML element: span)
  • tables and rows and cells within tables (HTML elements: table, tr, th, td)

In Plone 2.1 and 2.5, only block level elements and tables could be styled.

In the visual editor's configuration, table styles are defined in the list under the heading "Tables", and all other styles (including character styles) in the list under "Paragraph styles".

Other options

If you do not want to enforce consistency, and you would like a more traditional editing environment, it's possible to plug in another editor, such as FCKEditor, instead of Kupu.

What does the Plone logo mean?

What is the meaning behind the three dots in the Plone logo?

The Plone logo has several connotations:

Plone

Find what you're looking for
The original draft of the logo singled out the three dots within the circle from other dots. The outside dots were later removed, since it makes for a cleaner logo.
Collaboration
The logo has three dots in a group, representing collaboration.
Pluggable, extensible, amplifies your voice
The Plone logo looks like a plug, signifying that it works well with other systems, that they can be integrated and talk to Plone, and that Plone can be extended easily. The fact that it looks like an XLR plug — a common connector for microphones — has also been noted.
Open
The Plone logo is the Braille (a system used by blind people to read and write) letter "O" for Open. Plone has a special focus on accessibility for the blind and motor impaired, as well as translations for all major languages (over 35 different translations exist as of 2006) — aiming to make Plone accessible to people of all languages, and regardless of motor or sight impairment.

There's also a few sillier explanations: Petri dish (representing the organic community and culture), the right angle bracket ">" (which is important in HTML, which is the language Plone's web pages are using), and others.

Of course — as with all good logos — the explanation/rationale/associations always come after the logo has been created. What associations did you get when you first saw the logo?


How can I find a Plone consultant or developer to work on my project?

Sometimes you just need to hire someone to get something done. The Plone community is full of smart, friendly consultants and firms who make a living "doing Plone." Here's how to find one.

In early 2007, the Plone Foundation launched Plone.net, which provides a comprehensive listing of Plone consultants around the world.  It's a great place to start your search.

It's also appropriate to post a short RFP (request for proposals) or description of your project on Plone's "General Questions" discussion forum/email list.  A good RFP will be as specific as possible about:

  • The scope of your project, e.g. what you need help with and how large a project this is
  • A brief sketch of the project's requirements
  • The timeframe for your project
  • Any other details that will help a prospective consultant understand whether your project is a good fit for their skills.

How do I restart Zope?

How do I restart Zope on my local machine, or on my server?

Plone 3.x from the controlpanel

  1. Click 'site setup' (or go to yourSite/plone_control_panel)
  2. Click maintenance (or go to yourSite/@@maintenance-controlpanel
  3. Click 'Restart' (wait for it to finish the 'restart' as it may take a little while)

NOTE: If you started your instance in 'fg' mode, you will not see the 'restart' button. To see the 'restart' button you must start your instance with the 'start' command.

If you're using buildout, type:

bin/instance start

If you're using a traditional instance:

 bin/zopectl start

 

Plone 2.x from the controlpanel

1. Go to the Control Panel in the Zope Management Interface (ZMI):
  • On your local machine/computer, typically (you might have different port number):

    If you are signed in on your local, this link should take you to the zope restart.

    http://localhost:8080/Control_Panel/manage
  • On your server:
    http://yourServer.address.com/Control_Panel/manage

2. Click 'Restart'

 

What is a CMS?

Just what is a content management system, anyway?

A content management system, or CMS, is a web application designed to make it easy for non-technical users to add, edit and manage a website.

Not only do content management systems help website users with content editing, they also take care of a lot of "behind the scenes" work such as:

  • Automatically generate navigation elements
  • Making content searchable and indexable
  • Keeping track of users, their permissions and security settings
  • And much, much more.

What language translations are available for Plone?

What languages are available for Plone?

Plone is available in over 40 languages, but we are interested in adding more! If your language isn't in the list below — or you want to help improve an existing translation — contact the Plone internationalization team

Plone is translated to the following languages per March 2009:

  • Afrikaans (af)
  • Arabic (ar)
  • Armenian (hy)
  • Basque (eu)
  • Bulgarian (bg)
  • Burmese (my)
  • Catalan (ca)
  • Chinese (China) (zh-cn)
  • Chinese (Taiwan) (zh-tw)
  • Czech (cs)
  • Danish (da)
  • Dutch (nl)
  • English (en)
  • Esperanto (eo)
  • Estonian (et)
  • Finnish (fi)
  • French (fr)
  • Furlan (fu)
  • Galician (gl)
  • German (de)
  • Greek (el)
  • Hebrew (he)
  • Hungarian (hu)
  • Italian (it)
  • Indonesian (id)
  • Japanese (ja)
  • Latvian (lv)
  • Lithuanian (lt)
  • Norwegian (no)
  • Persian (fa)
  • Polish (pl)
  • Portuguese (Brazil) (pt-br)
  • Portuguese (pt)
  • Russian (ru)
  • Serbian (sr)
  • Slovak (sk)
  • Slovenian (sl)
  • Spanish (es)
  • Swedish (sv)
  • Turkish (tr)
  • Ukrainian (uk)
  • Vietnamese (vi)
  • Welsh (cy)

About Plone

How scalable is Plone?

How scalable is Plone? Can I use it to host a very large site?

Very scalable, but that is a relative statement. You can use load balancing, caching (Squid), ZEO (Zope Enterprise Objects) and other techniques to drastically improve the performance and scalability of Plone. Keep in mind though, that more than often, one of the easiest and cheapest methods (as apposed to many hours of consultant fees) is to add hardware. Memory is cheap, and the newest processors are fast. Size-wise, the ZODB handles pretty much anything you throw at it, and repositories in the hundreds of gigabytes are not uncommon.

What is Plone?

What is Plone?

Plone is an open source Content Management System (CMS) built on top of Zope and CMF. For more information see http://plone.org/about/

What is a CMS?

What is a CMS?

CMS stands for Content Management System. A CMS is a web content publishing and management system that allows normal content originators to create, submit, and publish their content directly within a web application/site without any development tools or knowledge of HTML.

What is Zope?

What is Zope?

Zope is a web application framework that Plone runs on top of. Zope is an open source product from Zope Corporation and many independent contributors. It provides the core functionlity layer of Plone. Information on Zope can be found at http://www.zope.org.

What is Zope CMF?

What is Zope CMF?

CMF (Content Management Framework) is an add-on product for Zope to build Content Management Systems. It provides some basic tools for handling metadata, members, etc., but is not a CMS itself. Plone is an example of a sophisticated CMS built using the CMF, and, as such, Plone uses the CMF. More information about the CMF can be found at http://cmf.zope.org.

What is the history of Plone?

What is the history of Plone? When did it start?

Plone was an idea that started maturing in late 1999, and had its first release in 2001, and has been rapidly gaining friends around the world since then.

For a complete treatise on Plone, its history and the people involved, a good starting point is Martin Aspeli's dissertation Plone: A model of a mature open source project.

What license is Plone governed by?

What license is Plone governed by?

The GNU General Public License (GPL) version 2. This is the same license used for the Linux operating system. See LICENSE.txt and LICENSE.GPL in the Plone distribution, or see http://www.gnu.org/licenses/gpl.html and http://www.gnu.org/licenses/gpl-faq.html for further information.

For more in-depth information, see the dedicated license FAQ.

Who uses Plone?

Who uses Plone?

Plone can be used to solve several different CMS and web application related use cases. A list of sites could be found here: http://plone.org/about/sites.

When was version "x" of Plone released?

The official release date for any major or minor version of Plone can be found at http://plone.org/products/plone/releases/ by clicking on the version in question.

Getting Plone

Where can I host my Plone site?

To make your site available for Internet, Plone requires a Plone friendly hosting provider of a virtual private server (VPS) minimum.

Plone is an application that runs its own daemon processes (background services). These usually require admin level access to the server to run, or at least Plone friendly hosting provider. Please see the minimum system requirements.

This isn't that big a deal for large Plone projects, who typically run on one or more dedicated servers, and have IT staff (or outsourced) with the appropriate skills. For small scale Plone hosting you might need to do some work to select a good hosting solution.

Check whether a hosting provider supports Plone

Ask them!  Say "Hey, [friendly tech support person], does [your web hosting provider] support Plone? Here are the minimum system requirements."

If your web hosting provider does not explicitly mention that they support Plone, then they probably don't.

Plone hosting companies

Plone's popularity has led a number of web hosting companies to specialize in hosting Plone (and applications that have similar slightly-out-of-the-mainstream server requirements like Django, Turbogears and Ruby on Rails).

Typically, these companies offer a variety of service plans in the $30 and upwards/month range.  More money gets you: more RAM (which supports a larger, more complex site), more bandwidth, more disk space, support options, backup solutions etc.

Hosting from your Plone consultant

Virtually every professional Plone consulting shop out there has dedicated servers on which they can host their clients' projects. So, if you're working with an established Plone consulting shop, you probably don't have to worry about setting up your own hosting. Ask you consultant what they can do for you.

Of course, if you're self-implementing Plone, then you may need to consider other options.

Virtual private servers

If you're more technically inclined, and would rather accept a greater amount of responsibility in exchange for greater control over the fine details of your hosting environment, you might want to consider a virtual private server (aka a "managed virtual server") for hosting your Plone site.

A virtual private server hosting arrangement uses "virtualization" software to split a single physical machine into several completely independent systems that share only processor cycles, disk space and RAM. A virtual private server environment thus fills a very important niche in between inexpensive shared server webhosting accounts (your typical $5-20/month special) and more expensive dedicated servers.

You can expect to spend $20-$100/month for a virtual private server environment that is suitable for hosting one or more small-to-medium Plone sites.

Virtual private servers are a fast-growing segment of the web hosting provider market, thanks in large part to the fast-growing popularity of non-LAMP environments such as Plone, Django, Turbogears, Ruby on Rails, Pylons and more.

Dedicated Hosting

Dedicated hosting is the same concept as the virtual private server, except instead of buying a part of a server, you are renting an entire machine in a remote location. Dedicated hosting is often price competitive with virtual private servers and in some cases might actually offer more memory/processor speed/transfer at the same price level.

Inexpensive, commodity dedicated hosting providers can provide machines for as little as $100 a month. More expensive and hands-on offerings can run into as much you want to pay.

Cloud Hosting

You can run Plone on Amazon EC2 cloud.

Why not use my current $5/month hosting provider?

It's an old adage: "you get what you pay for."  More accurately, though, you don't get what you don't pay for.

In the case of "el cheapo"1 web hosting providers, what you're not paying for is any kind of helpful support. That's labor, and labor is expensive. The entire business model of commodity hosting providers is to gamble that you won't have any tech support questions, and to provide the least amount of help possible if you do. This might be fine if all you're trying to do is host a few static web pages, or run a simple PHP script. But in the long run, ultra-low-cost commodity hosting providers are rarely a good value.

1 Which we define as $5-20/month hosting providers selling shared LAMP instances.

This FAQ applies to: Plone 4, Plone 3, Plone 2.5.x, Plone 2.1.x, Plone 2.0.x

Installing Plone

What kind of server is recommended for Plone?

When setting up Plone, what kind of server is recommended?

The first thing to remember is that Plone is not an "I just want to host my weblog" or "I simply need a web forum" or "I need a wiki" kind of product. It is a powerful (but easy-to-use and extend) system which demands quite a lot from the server. It's more like an operating system than an application, to use an analogy. Therefore, if you are just looking to solve a simple problem, there are probably less demanding and better suited applications out there.

Plone is heavier on RAM and CPU usage than your run-off-the-mill web system. It's built to do a lot of different things, and should preferably be hosted on a dedicated server if possible.

The most important consideration when building a Plone server is to have enough RAM. The more RAM you have, the more Plone can hold in memory, and the faster it will be. For a straightforward Plone site (such as a small- or medium-sized department intranet for a company), 200-300MB of memory will do. For a large, complex site with heavy traffic (such as plone.org), you'll want more, perhaps as much as 1-2GB of RAM.

It's also helpful to have fast processor. Again, a smaller site could use a 1-2GHz machine, but for larger sites, it's helpful to have a multi-processor, high-speed machine.

Also remember that the way Plone ships by default, it's not set up for deployment, but for development and flexibility. Before you let your site go live, you should read up on caching and optimization. The out-of-the-box Plone installation is set for ease-of-development, not speed. Typically, you'll use CacheFu, along with a proxy, like Apache or Squid. With minimal effort, a Plone site can go 10-40x faster (or more) than the out-of-the-box settings.

Plone has a technology, ZEO, which allows you to operate several Plone servers (either on different physical machines, or several servers on the same machine) so that they can use the same database. With a load-balancer in front, this is an excellent way to scale your site and build availability.

Plone will run excellently on all modern operating systems: Windows, Linux, OS X, and other Unix variants. Most people run Plone on Linux, so will probably hear the most talk about this, but, rest assured, there are plenty of people running Plone on your operating system, whatever that is.

I add a plone site: Error Type: Attribute Error, Error Value: get

I add a plone site: Error Type: Attribute Error, Error Value: get

This can happen if you run Plone with the wrong version of CMF. Plone 1.x needs CMF 1.3.x, and Plone 2.0.x needs CMF 1.4.x.

The correct version of CMF comes bundled with Plone releases, so unless you have changed this manually, you should have the correct version.

Check the release notes for your version to see the exact version recommendation.

What are the recommended versions of Zope, CMF and Python required to run Plone?

Which versions of the stack go together?

The recommended versions for the current versions of Plone are outlined below.

Note that this document exists for packagers and for informational purposes only. You should really stick to what you get in the Plone installer that corresponds to your platform. The number of dependencies is complex and nothing you really want to handle on your own.

Plone 2.5.x
Use Python 2.4.4 and Zope 2.8.x or 2.9.x. Zope 2.9.x is recommended.
Plone 3.x
Use Python 2.4.4 and Zope 2.10.x
Plone 4.x
Use Python 2.6.x and Zope 2.12.x

When it comes to CMF versions, always use the one bundled with the Plone download, not a separate install. This dependency is pretty tight, so you can't expect Plone to work with a version of CMF that is different from the one Plone ships with.

Standalone Zope downloads can be found at http://www.zope.org/Products/Zope — but the Plone installers ship with the optimal version of Zope on all platforms.

How do I upgrade to a newer release of Plone?

If I already have a version of Plone installed, how can I upgrade to a more recent release?

When upgrading to a newer release of Plone, it is important to run the migration procedure, since internal structures in Plone might have changed since the last version. This is the general procedure for upgrading.

Before you start upgrading anything, make sure you have a backup.

  • If you're upgrading to a new minor version of Plone (e.g. from 2.5.1 to 2.5.2), the general upgrade procedure should be sufficient.
  • If you are upgrading to a new major version of Plone (e.g. from 2.5.x to 3.0.x or from 3.0.x to 3.5.x), make sure you read the Plone Upgrade Guide, and especially the version-specific upgrade notes.

How do I tell which version of Plone I am running?

Where can I see which version of Plone/Zope/Python I have installed?

Login to Plone as admin.

Plone 2.1 and later

  • Goto Site Setup

At the bottom of the page the versions will be displayed (e.g.):

Plone version overview
Plone 2.1.2,
Zope (Zope 2.8.6-final, python 2.3.5, linux2),
Python 2.3.5 (#1, Nov 9 2005, 05:59:32) [GCC 3.4.4 20050721 (Red Hat 3.4.4-2)],
PIL 1.1.5

 

Why won't Plone start on Windows 2003?

After installing the Windows installer for Plone, I can't access Zope at http://hostname:8080/ even though the Zope appears to be running.

If you're running IIS, it may be the culprit as it sometimes likes to take over port 8080, the default port that Zope runs on. You can either:

  1. Shut down IIS if it's not needed (or possibly replace it with Apache)
  2. Change the port that Zope uses (via the Plone Controller)

This FAQ applies to: Plone 2.5.x, Plone 2.1.x

On Windows XP I get "No python installation found in the registry" when installing certain Products

Some Products need to know which Python to use and on Windows, will check the registry to determine that. When using the Windows installer for Plone 2.5 or newer, Python is not automatically added to the Windows registry. You can add the installer's version of Python to the registry through Plone menu from the Windows Start menu:

Start menu / Plone / Development / Set InstallPath

Alternatively (and this might be needed for Plone 2.1 and older Windows installers), you can install the same version of Python via a Windows installer which will add itself to the registry.

This FAQ applies to: Plone 2.5.x, Plone 2.1.x, Plone 3, Plone 2.0.x

How Do I Install Python Modules To The Unified Installer?

Plone's "Unified Installer" installation script compiles its own copy of Python, because many systems do not include an appropriate version. This can create a bit of confusion you want to install additional Python modules for this copy of Python. Here's how to sort it out.

Using buildout

Just add the name of the eggs you want to the eggs section of the [buildout] part in your buildout.cfg file and run bin/buildout. It's also good to specify a version number. Example, to add python-ldap:

[buildout]

...

eggs =
    Plone
    python-ldap==2.3.10

Working manually with the Python installation provided by the Unified Installer

The easiest way to work with a particular Python for a particular Plone installation is to put that Python first on your PATH:

$ export PATH=/opt/Plone-3.0.4/Python-2.4.4/bin:$PATH
$ which python
/opt/Plone-3.0.4/Python-2.4.4/bin/python

Note that this example is for Plone 3, which runs on Python 2.4. Plone 4 runs on Python 2.6 so, if you're using Plone 4, replace all references to Python 2.4 above and below to Python 2.6.

For python-ldap you should then be able to to:

$ python setup.py install

Note that this is basically the same as this:

$ /opt/Plone-3.0.4/Python-2.4.4/bin/python setup.py install

But manipulating your PATH environment variable just saves you a lot of typing. You can also create aliases in your shell profile (~/.bashrc on linux, ~/.profile on Mac OS X) to make it easier to put a particular Python first on your PATH:

# in your .bashrc or .profile
alias py4prod="export PATH=/opt/Plone-3.0.4/Python-2.4.4/bin:$PATH"
alias py4dev="export PATH=/opt/Plone-3.1/Python-2.4.4/bin:$PATH"

Then on your shell just type:

$ py4prod
$ echo $PATH
$ /opt/Plone-3.0.4/Python-2.4.4/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin

 

Credits

This FAQ is reproduced from a forum message by Kevin Teague.  Thanks, Kevin, for all your great, detailed explaining! 

I see <Products.Five.metaclass.Plone object at ...> when trying to access my Plone instance

I've installed Plone using the Unified Installer or Debian packages. When I access http://localhost:8080/plone I see a white page with the text "<Products.Five.metaclass.Plone object at ...>" in it. Where's my Plone site?

Zope is case-sensitive, so it's returning a different object instead of the Plone site.

Try http://localhost:8080/Plone instead (notice the capital P).

SyntaxErrors while running buildout tool

There are several SyntaxErrors while running buildout. Are these actual errors?

These errors are not actual errors.

Plone uses RestrictedPython internally. RestrictedPython scripts have minor difference from vanilla Python source code modules, though both have .py extension.

Buildout uses setuptools to install Python packages. Setuptools wants to peak inside every .py file, including RestrictedPython files, even though it does not understand about them. This is why setuptools gives SyntaxError and it's not dangerous.

Plone 4.0.x does not start on Windows

Plone 4 does not start on Windows. After pressing start button in Plone controller, the start process seem to be running but comes back to a stopped state after a while.

Command-line usage is needed in order to get further information about a possible problem.

  • Start command prompt
  • Go to C:\Program Files\Plone
  • Try starting Zope process in foreground mode from the command line. All error output comes into your command window and you can copy-paste this information to your question on a mailing list or IRC:
bin\instance.exe fg

Windows related bugs

Please see this bug regarding Zope and Windows (plone.org account needed).

Configuring Plone

How do I integrate with LDAP / Active Directory / Open Directory?

PloneLDAP integrates LDAP fully into your Plone 3 site.

This FAQ applies to: Plone 2.5.x, Plone 3

Plone slow? How to make a small Plone site go fast!

One of the most overlooked features of Plone is the fact that you can make a simple Plone site go a lot faster without any complicated configuration. How? Just activate plone.app.caching.

Plone 4.1 and above ships with plone.app.caching, but it is disabled by default.  Activate it and configure it for Zope-only mode. Even if you don't have a proxy cache like Squid or Varnish in front, plone.app.caching makes a huge difference in Plone's performance. Low traffic sites will immediately experience much faster page-load times, even for logged-in users.

Of course, if you're getting a lot of site traffic, you'll want to invest some additional effort in configuring plone.app.caching more carefuly, along with a "proper" caching proxy server like Squid or Varnish. But a small site doesn't need to go to all this effort to get huge benefits from plone.app.caching.  You'll get a 5x (or more) speed up with zero configuration!

If you've got a small Plone site and you're not running plone.app.caching, go give it a whirl, you'll be amazed at how quickly you can make Plone fast!

Note: plone.app.caching requires Plone 4 or newer.  If you're using Plone 3 or older, use CacheFu instead.

This FAQ applies to: Plone 4, Plone 3, Plone 2.5.x

How scalable is Plone?

How scalable is Plone? Can I use it to host a very large site?

Very scalable, but that is a relative statement. You can use load balancing, caching (Squid), ZEO (Zope Enterprise Objects) and other techniques to drastically improve the performance and scalability of Plone. Keep in mind though, that more than often, one of the easiest and cheapest methods (as apposed to many hours of consultant fees) is to add hardware. Memory is cheap, and the newest processors are fast. Size-wise, the ZODB handles pretty much anything you throw at it, and repositories in the hundreds of gigabytes are not uncommon.

How do you allow Anonymous posting of the News section?

How do you allow Anonymous posting of the News section?

Enable "Anonymous" in Reply to Item in the permissions section, the Securities Tab.

What does "Allow discussion" mean?

What does "Allow discussion" mean?

You can attached threaded discussions to any content object in CMF. If you allow discussion on a object there will be a add comment button that appears at the bottom of the content.

How do I turn off Member area creation?

Is there any way to turn off the creation of the Member folders that are generated when a user first logs in?

Yes - go to the Zope Management Interface, click the portal_membership tool, click the Turn folder creation off button.

If there are already existing Member areas you want to get rid of, delete them in the normal way, and they won't be re-created on login.

Can I create a Plone site inside my existing Plone site?

Can I nest several Plone sites inside each other?

Use collective.lineage or other subsite addon. Though Zope Management Interface allow creating nested Plone sites inside each other, this arrangement results broken sites.

This FAQ applies to: Plone 4, Plone 3

The setup of Plone and Zope on Windows isn't the same as regular Zope. How is it set up?

Help! I'm used to how Zope is set up on Windows, and the dual-port separation in the Windows installer version of Plone is confusing me. How can I make it behave like Zope normally does?

Plone by default binds to port 80 for the Plone root and port 8080 for the Zope Management Interface root. This can be a bit confusing if you're used to plain Zope - and is controlled by the accessRule.py in the Zope root.

For example, if you access Zope via FTP, you will end up inside Plone. If this is not what you want, you can modify accessRule.py or just remove it altogether.

To make Plone run on http://localhost/Plone instead of http://localhost, log in at http://localhost:8080/manage and delete the accessRule.py object.

In addition, if you want to bind it to a different port than port 80, stop Plone via the Plone Controller and put in (for instance) port 81 in the Ports page and start it again. For other platforms, this is usually controlled from the etc/zope.conf file.

The reason the access rule is enabled by default is because we want people to easily be able to serve their Plone pages off (for example) their home DSL connection, should they want that. The people who know enough to use it in a server setting of course know how to set up the surrounding software appropriately, but the Windows installer aims to be as easy to use as possible - hence the default access rule in place.

Can I change the default language?

Can I change the default language of the Plone interface?

Yes, you can. Plone is fully internationalised.

Go to: Site setup > Language settings. Choose your language in the dropdown "Default language".

If your language is not in the dropdown 'Default language', first make it an 'Allowed language'.

If Language settings is missing from Site setup

In older versions of Plone the Language tool is not bundled with Plone and you have to install it as an optional product.

Download and install the latest version of Plone Language Tool that is compatible with your version of Plone. Then perform the steps described above.

How do I add a role?

In Plone 2.5 and using PAS, there is an additional step required to add a role. Here's how to make it work.

If you want to add a role to your plone site, you need to do two things:

  1. Add the role in the ZMI, under the Security Tab.
  2. Add the role in the portal_role_manager, which is available under acl_users.
If only step 1 is executed, you will not be able to assign the role to groups using the "Users and Groups Administration" in site setup - the checkboxes for each role will be disabled. There are probably other things that fail to work as well.

This FAQ applies to: Plone 2.5.x

How can I securely manage Plone remotely over SSL?

One way is to set your plone installation to run behind apache (over SSL), secure the plone install so that it only listens on non-routable interfaces, and never log in to plone over a non secure connection. So for instance, if you're running linux, you could log into your server using SSH and:
  • install plone using the universal installer (which has one server and two clients)
  • change the client1 and client2 configuration to only listen on the localhost (check the .conf files for how to set this up)
  • set up apache with SSL, mod_rewrite and mod_proxy, see http://plone.org/documentation/how-to/apache-ssl

Where did the Navigation portlet go in Plone 3.0?

When I start up Plone 3.0, the Navigation portlet no longer shows up! Where did it go and how do I get it back?

From version 3.0 onwards, the default behavior for the Navigation portlet has changed. By default, it will not show up until the user navigates to one of the top-level folders or deeper into the site. In other words, the nav portlet is now used for secondary navigation, whereas the tabs are used for the top-level navigation. You can of course customize this to match your needs.

If you want the old behavior back, login as a Site Manager and click on the "Manage portlets" link.

In the left slot, you'll see a Navigation portlet link. Click on that to access the Navigation settings. Use the following:

  1. Tick the "Include top node" check box if you want "Home" to show up in the Navigation portlet
  2. Change the "Start level" to 0

Click "Save", then return to the home page, and the Navigation portlet is restored.

This FAQ applies to: Plone 3

How do I enable Wiki-style markup?

Wiki-style markup is not enabled by default (Plone 3.0) -- to enable it, go to the Plone Control Panel (via the Site Setup link) and click on Markup. From there you can configure "Wiki behavior" by selecting from the three possible content types (Pages, News Items and Events).

Note: "Wiki links" are triggered by enclosing text with double parenthesis, e.g:

Visit my ((new page)) for more information.

 

 

This FAQ applies to: Plone 3

What do I paste into the "JavaScript for web statistics support" box in Plone 3?

Plone 3's "Site Settings" control panel has a box labeled "JavaScript for web statistics support" -- but it's not obvious what to put in there.

Plone 3.0.1 and above includes built-in support for Javascript based web statistics services, such as Google Analytics.

To enable statistics collection, go to Site Setup -> Site -> JavaScript for web statistics support.

Sign up for Google Analytics, and after you complete the setup wizard there, cut and paste Google's code snippet into the JavaScript box.

Copy-paste the web statistics script including all <script>..</script> tags.

This FAQ applies to: Plone 3

How do I enable the syndication tab in Plone 3.0?

By default, outgoing syndication is enabled in Plone 3.0. However, you must explicitly configure Plone to display the syndication tab.

In the ZMI, go to portal_actions / object / syndication and then tick the Visible checkbox and click on the Save Changes button.

Now when you're on a folder in Plone, the syndication tab will show up as you expect.

 

This FAQ applies to: Plone 3

How can I change reStructuredText header levels?

Plone generates Pages out of reStructuredText nicely. The initial header levels, can be set via zmi.

By default, the level of the first header tag in reStructuredText is set to the XHTML <h2>. You may change that by using the Zope Management Interface to edit the portal_transforms object in your Plone site root.

Steps, to change initial header levels:

  1. specify initial header level: portal_transforms/rest_to_html
  2. update transformation: portal_transforms/rest_to_html/manage_reloadTransform

To rerender an existing document, go to its edit tab and save it.

This FAQ applies to: Plone 2.5.x, Plone 3

Administering Plone

Plone slow? How to make a small Plone site go fast!

One of the most overlooked features of Plone is the fact that you can make a simple Plone site go a lot faster without any complicated configuration. How? Just activate plone.app.caching.

Plone 4.1 and above ships with plone.app.caching, but it is disabled by default.  Activate it and configure it for Zope-only mode. Even if you don't have a proxy cache like Squid or Varnish in front, plone.app.caching makes a huge difference in Plone's performance. Low traffic sites will immediately experience much faster page-load times, even for logged-in users.

Of course, if you're getting a lot of site traffic, you'll want to invest some additional effort in configuring plone.app.caching more carefuly, along with a "proper" caching proxy server like Squid or Varnish. But a small site doesn't need to go to all this effort to get huge benefits from plone.app.caching.  You'll get a 5x (or more) speed up with zero configuration!

If you've got a small Plone site and you're not running plone.app.caching, go give it a whirl, you'll be amazed at how quickly you can make Plone fast!

Note: plone.app.caching requires Plone 4 or newer.  If you're using Plone 3 or older, use CacheFu instead.

This FAQ applies to: Plone 4, Plone 3, Plone 2.5.x

I need to upload lots of images/files to my Plone site, what's the best way?

You can access your Plone site via WebDAV (Web Folders in MS Windows) or FTP, which makes it easy to add a lot of content to your site.

Plone can be configured to start running a WebDAV server (see the docs/INSTALL.txt in the root of your Plone software folder, or the WebDav How-to for help). This will let you connect via WebDAV and Microsoft Web Folders (which use WebDAV as their protocol for connecting).

Although less secure and a little bit less feature-rich, Plone can also be send/receive content via FTP (again, see docs/INSTALL.txt). The Plone FTP server normally runs on port 8021, and you connect with your normal Plone username/password.

There are also several add-on products available to make uploading easier:

  • Enfold Desktop is a commercial product (free for non-commercial usage) which adds integration with Windows explorer. (MS Windows only)
  • Plone flash upload adds a Flash interface for batch-uploading
  • collective.uploadify also offers a Flash interface for batch-uplaoding, and is powered by the jQuery uploadify plugin.
  • PloneJUpload adds a Java applet for batch-uploading

Why is the Plone Controller causing ZoneAlarm (or other firewall) to raise a warning?

Why is the Plone Controller causing ZoneAlarm (or other firewall) to raise a warning?

The Plone Controller on Windows needs to check the status of Plone. The easiest and most reliable way to do this is to connect to the server by a HTTP connection. It does not connect to anything other than your local Plone instance and allowing the connection should cause no security issues.

How do you specify who is the reviewer of the site?

How do you specify who is the reviewer of the site?

In acl_users, you should give them the role "Reviewer".

I added the product X to zope but I can't add it to plone.

I added the product X to zope but I can't add it to plone.

Use the QuickInstallerTool or the external method install to register this product.

I want to translate my site to an another language, how?

I want to translate my site to an another language, how do I approach this?

There are two main components to having a translated and/or multilingual site: 1. The user interface translation 2. The content translation User interface translation -- If you just want to keep your site in a single language, you can download "Plone Language Tool":/products/plonelanguagetool (only necessary if you are running Plone 2.0 — Plone 2.1 and up have this included), and install it from the 'Add/Remove Products' control panel. This will give you a 'Language Settings' control panel, where you can restrict what languages are available. If Plone is not already translated to your language (over 50 translations exist at the time of writing), and you have strong language skills, talk to the internationalization (“i18n” for short) team.

Content translation -- If you additionally need to maintain several translations of the same content, you will need to install an add-on product for multilingual content. "LinguaPlone":/products/linguaplone is the most commonly used product for this.

Where is my site actually stored? How can I move my Plone instance between different servers? What should I back up?

In which directories on the local host are the elements of the site actually stored? Which files do I need to back up? How do I move my Plone instance to a different server?

Content

Plone stores objects in a Zope Object Database (ZODB).

Approches to ZODB storage include:

  • FileStorage — a single .fs file
  • binary large objects (BLOBs).

Plone 3 always uses:

  • FileStorage, normally var/filestorage/Data.fs

In addition, Plone 3 may use:

Plone 4 uses:

  • BLOBs for file and image content, normally within var/blobstorage
  • FileStorage for all other content types.

Backups

Backup of FileStorage and BLOBs is critical.

For sane backup of FileStorage whilst Plone is running, a script is provided. To simplify scripted backups, recent versions of Plone use a recipe: collective.recipe.backup.

In addition, to ensure correct versions should you need to restore, you may back up:

  • your buildout.cfg file
  • products and src directories.

For details, see Backup Plone.

Moving content

To move from one server to another (for example, from a local Windows-based laptop to a centrally hosted Linux server), with identical product versions on each server, you should move:

  • at least, Data.fs
  • plus, any BLOBS.

If you have a locally hosted Plone site and want to transfer it to your ISP, please be aware that your ISP has to support Plone hosting. It is possible to render a Plone site to static HTML using tools like CMFDeployment, but it is not recommended, as you lose a lot of the advantage of Plone's dynamic nature - and it is also a non-trivial setup exercise.

For details, see Upgrading and moving.

This FAQ applies to: Plone 4, Plone 3

I can't seem to log out of my Plone site - what's wrong?

When i try to log out from my Plone site, it displays a message saying that I've logged out, but doesn't actually log me out. I have no way of logging in as another user.

The reason for this is that you have logged in to the ZMI using something called HTTP authentication - the dialog box that pops up asking you for username and password.

This is different from the standard Plone login that uses a cookie to keep track of your login status. Because of the way web browsers are constructed, you can't log out from HTTP authentication - you need to close your browser to do that.

We recommend keeping two separate browser instances (one Firefox and one Internet Explorer, for example) open if you want to have one HTTP login and one cookie-based login. Another option is to use different ways to access the site — http://localhost and http://127.0.0.1 are equivalent ways of accessing Plone on your local computer, but will seem like two different sites to your browser — hence allowing you to log in with HTTP authentication on one, and cookie-based authentication on the other.

Additional tips

  1. If you install Firefox Web Developer Extensions, you can clear the HTTP login data without closing the browser.
  2. You can use acquisition to get to the Control Panel even if you are inside your Plone site. It will then use cookie-based login to authenticate you, meaning you can log out again. This also makes it unnecessary to have a special open port on port 8080 to let you get to the ZMI for normal tasks like restarting the server.

Example:

If your Plone site is http://localhost:8080/plonesite and mapped to the domain myplonesite.com, you can do:

http://myplonesite.com/Control_Panel/manage_main

which will give you the Control Panel, so you can pack the DB, restart, refresh products, etc. This assumes you have a user at the root level, but will still use cookie auth to log you in - so you can have a user at the root called "admin" to perform these tasks, and still log out afterwards.

I locked myself out from my Plone instance; what can I do?

I locked myself out from my Plone instance or need to reset my password without knowing my old one. Is there any way I can get access again?

Stop your Plone instance (if running). Then, go to your buildout directory and run the following command:

bin/instance adduser user1 password1

This will start Zope and add a manager user with the username 'user1' and the password 'password1'. You can now start your instance and log in with the user you just created. Note that if you try to create a user that already exists, it will fail silently.

The above assumes that your instance start script is called "instance", which is common for standalone installations. If you're using ZEO, you'll typically be using a client name, like 'client1':

bin/client1 adduser user1 password1

If your buildout names your instance or client parts differently, you will need to adjust the command to match.

Non-buildout version

If you're not using buildout to manage your Zope instance, try the following instead, from your instance directory:

bin/zopectl adduser user1 password1

Older versions

If the above didn't work (try it first, it won't do anything if it's not supported), you might be using an old version of Zope.

You can create an "emergency user" that will let you into the system. To do this, you'll need the ability to create files in your $INSTANCE_HOME, and to restart Plone.

If this is the case, you can create a temporary user to reset your password with if you have filesystem access to the server your Plone is running on. Here's how:

  1. Go to your Zope's INSTANCE_HOME directory. This is the same directory as the one where your 'Products' directory is located in. On Windows, this is c:\Program Files\Plone 2\Data\.

  2. Run the zpasswd.py file with an argument of access.

    This is located in Zope's bin directory. Remember that you need to qualify the path to your Python if it's not in your path. A typical example from Windows with full paths shown would look like this:

    C:\Program Files\Plone 2\Data> ..\Python\python.exe ..\Zope\bin\zpasswd.py access
    Username: tempuser
    Password:
    Verify password:
    
    Please choose a format from:
    
    SHA - SHA-1 hashed password (default)
    CRYPT - UNIX-style crypt password
    CLEARTEXT - no protection
    
    Encoding: SHA
    Domain restrictions:
    

    The approach on a typical Linux/UNIX or Mac OS X operating system would look like this:

    $ python [your zope]/bin/zpasswd.py access
    

    If you can't run zpasswd.py, you can also create the access file by hand. The simplest format is just a single line, in the format "username:password". In our example, that would be:

    tempuser:mypassword
    
  3. Restart your Zope, you should now have an account 'tempuser' that can log in and create a proper user for you inside the instance or reset your existing password. Please note that this temporary manager user cannot create content or do most actions -- they exist just for you to create a normal Manager user in the Zope acl_users folder.

  4. Remember to delete the 'access' file you created after you're done -- leaving it around after you have fixed things is not a good idea, and might be a potential security risk, should someone come along and read this file.

This FAQ applies to: Plone 4, Plone 3, Plone 2.5.x

How can I find the items over a particular size?

I want to locate all items that are bigger than 500 KB - how can I do this?

The easiest way is to use a Collection (earlier known as "Smart Folder"). If you need to do it with every object, not just content items, you can do this from ZMI → Find → Advanced.

In the expr field, enter get_size() > 500000 - and press search. This will search all subfolders and return objects that are larger than 500 000 bytes.

Where are the Plone logs stored?

Where does Plone and Zope log error and request information to?

Plone - or rather Zope - logs all requests to log files in a standard format that can be read by most traffic analysis software (standard Apache log format). The logs are by default within the var/log directory of your buildout.

Within the log directory are two files - instance-Z2.log for traffic analysis and instance.log where errors and system messages from Zope are output.

If the information within instance.log appears incomplete, then ensure that you're running your instance in debug mode. This is automatically done up when you run it via bin/instance fg.

Help! Zope won't start!

Help! I've tried starting Zope, but I still cannot access my site and no Zope process seems to be running. What should I do?

Start Zope using the following command:

bin/zopectl fg

and watch the messages shown on the console. That should give you a hint about what's happening. If not, send the output to the plone-users list and someone may be able to help you.

How do I set the default index document

How do I define the document or item that is displayed by default for a given folder.

The folder should first contain the item (page, smartfolder etc...) that you would like to use as the default page. To define the default item go to 'display' -> 'change content item as default view'.

From the menu provided select the item of your choice and click 'save'.

Navigating to that folder will now show the item which you defined.


This FAQ applies to: Plone 2.1.x

How do I add MyType as a default page for a folder?

A MyType content object exists in the folder, but it doesn't show up when I use the "select content as default view" action.

You have to add MyType to the list of default page types (default_page_types lines property) in the ZMI at:

http://your.plone.site/portal_properties/site_properties/manage_propertiesForm

Add the friendly name for MyType to the list. You have to check the "Title" property for the MyType in the portal_types tool (in the ZMI) to get its friendly name. Now you should be able to add your custom type as the default content for a folder using the display menu.

See also the FAQ for setting the default index document. and "How do I add to the list of default display choices for a folder?"



I get memory errors running Plone on NetBSD, why?

Zope likes lots of RAM, your server may have lots, but NetBSD limits it to 128MB by default. Memory errors? Here's how to fix it

NetBSD (3.1, i386 in this case)  limits process memory, and the limit is pretty tight.  by default, it's 128MB.  Your zope process, if it's anything like mine, will soon eat that up and you'll start to see memory errors and your site visitors will complain.

You can check how much memory your zope process is using with ps or top, have a look at the sysctl limits for it, by feeding sysctl the following arguments:

# sysctl proc.<zope PID>.rlimit

The ones I think you're most interested in are (in my experience)

datasize.soft
memoryuse.soft
There's a number of ways to change a processes limits, you can do it with sysctl on the fly (you can only change soft limits)

eg :

sysctl -w proc.<PID>.rlimit.datasize.soft=<new number of bytes>

which will get you out of gaol without a restart of zope, but isn't, of course, persistant.

You can also set the limit for the zope process at start-time.  Unfortunatly, it seems the best place to do this is in your zopectl or runzope script.  If you have a plone/zope startup script in rc.d, it might not work as you expect.  I did this to my zopectl script to give my instance of zope & plone 356MB:

#! /bin/sh
# let zope use 356MB
ulimit -d 393216
PYTHON=...
etc

I didn't want to do it there, but that seems the safest - yes, you'll have to maintain this script now, but you probably had to anyway if you've been upgrading zope regularly anyway.

How do I put Plone into read-only mode?

When performing certain tasks (upgrades, for instance), it might make sense to put the production site into read-only mode to make sure no content is added while upgrade/migration is performed on a parallel instance, and then overwrite the old database file with the new version.

To set Zope into read-only mode, do the following:

  • find all zope.conf files — maybe more than one, could be in the etc or parts/instance directory, probably at parts/instancename/etc/zope.conf — one per zope client
  • within each zope.conf file, add the following line:
  • enable-product-installation off
  • within each zope.conf file, find first the <zodb_db main> section, then find either the zeoclient node (if using ZEO) or the filestorage node (if not using ZEO). There should only be one per zope.conf file. Add the "read-only true" option, the resut should look something like this:
    <filestorage>
      path /path/to/your/buildout/var/filestorage/Data.fs
      read-only true
    </filestorage>
  • restart the Zope instance — if you have a ZEO setup, remember to restart both the clients and the server (run the restartcluster.sh script, if you have it).

Your Plone setup should now be fully functional, but whilst read-only it will be impossible to add content or change settings.

You may wish to customize your ReadOnlyError error message to indicate the reason for the restriction.

If you use buildout to control your Plone configuration (very likely for Plone 3.2+): the zope.conf file is generated by buildout, and may be overwritten when you run buildout.
For now: following any buildout, be prepared to re-apply the changes outlined above.
(For the future: https://bugs.launchpad.net/collective.buildout/+bug/712204 proposes an improvement to plone.recipe.zope2instance.)

This FAQ applies to: Plone 4, Plone 3, Plone 2.5.x

How do I restart Zope?

How do I restart Zope on my local machine, or on my server?

Plone 3.x from the controlpanel

  1. Click 'site setup' (or go to yourSite/plone_control_panel)
  2. Click maintenance (or go to yourSite/@@maintenance-controlpanel
  3. Click 'Restart' (wait for it to finish the 'restart' as it may take a little while)

NOTE: If you started your instance in 'fg' mode, you will not see the 'restart' button. To see the 'restart' button you must start your instance with the 'start' command.

If you're using buildout, type:

bin/instance start

If you're using a traditional instance:

 bin/zopectl start

 

Plone 2.x from the controlpanel

1. Go to the Control Panel in the Zope Management Interface (ZMI):
  • On your local machine/computer, typically (you might have different port number):

    If you are signed in on your local, this link should take you to the zope restart.

    http://localhost:8080/Control_Panel/manage
  • On your server:
    http://yourServer.address.com/Control_Panel/manage

2. Click 'Restart'

 

How do I pack the ZODB?

How do I pack the Zope Object Database? Also, why should I pack the zodb?

This FAQ assumes you have manager role and proper permissions to work in the ZODB.

  • Packing the ZODB removes old copies of objects, so once it is done, you can no longer undo them.
  • There may be a little performance benefit.
  • There is a disk space benefit.

 

Note: for automatic packing information please see Plone Developer Documentation page.

 

Go Direct

On your local machine, click

http://localhost:8080/Control_Panel/Database/main/manage_main (you might have different port number)

  1. choose how many days of undo-data you wish to leave in the system in the box provided
  2. click pack

 

On your Server

go to yourSite/Control_Panel/Database/main/manage_main)

  1. choose how many days of undo-data you wish to leave in the system in the box provided
  2. click pack

 

Plone 3.0.x from the controlpanel

  1. click 'site setup' (or go to yourSite/plone_control_panel)
  2. click maintenance (or go to yourSite/@@maintenance-controlpanel
  3. choose how many days of undo-data you wish to leave in the system in the box provided
  4. click 'Pack database now' (wait for it to finish the pack as it may take a little while)

 

From The Top

Starting from the Plone UI (user interface):

  1. sign in with your 'admin' role
  2. click 'site setup' (or go to yourSite/plone_control_panel)
  3. click 'Zope Management Interface' (or go to yourSite/manage_main)
  4. click on the '/' at the top left where it says 'Plone Site at'
  5. click 'Control_Panel' (or go to yourSite/Control_Panel/manage_main)
  6. click 'Database Management' (or go to yourSite/Control_Panel/Database/manage_main)
  7. click 'main' (or go to yourSite/Control_Panel/Database/main/manage_main)
  8. choose how many days of undo-data you wish to leave in the system in the box provided
  9. click 'pack' (wait for it to finish the pack as it may take a little while)

How Do I Install Python Modules To The Unified Installer?

Plone's "Unified Installer" installation script compiles its own copy of Python, because many systems do not include an appropriate version. This can create a bit of confusion you want to install additional Python modules for this copy of Python. Here's how to sort it out.

Using buildout

Just add the name of the eggs you want to the eggs section of the [buildout] part in your buildout.cfg file and run bin/buildout. It's also good to specify a version number. Example, to add python-ldap:

[buildout]

...

eggs =
    Plone
    python-ldap==2.3.10

Working manually with the Python installation provided by the Unified Installer

The easiest way to work with a particular Python for a particular Plone installation is to put that Python first on your PATH:

$ export PATH=/opt/Plone-3.0.4/Python-2.4.4/bin:$PATH
$ which python
/opt/Plone-3.0.4/Python-2.4.4/bin/python

Note that this example is for Plone 3, which runs on Python 2.4. Plone 4 runs on Python 2.6 so, if you're using Plone 4, replace all references to Python 2.4 above and below to Python 2.6.

For python-ldap you should then be able to to:

$ python setup.py install

Note that this is basically the same as this:

$ /opt/Plone-3.0.4/Python-2.4.4/bin/python setup.py install

But manipulating your PATH environment variable just saves you a lot of typing. You can also create aliases in your shell profile (~/.bashrc on linux, ~/.profile on Mac OS X) to make it easier to put a particular Python first on your PATH:

# in your .bashrc or .profile
alias py4prod="export PATH=/opt/Plone-3.0.4/Python-2.4.4/bin:$PATH"
alias py4dev="export PATH=/opt/Plone-3.1/Python-2.4.4/bin:$PATH"

Then on your shell just type:

$ py4prod
$ echo $PATH
$ /opt/Plone-3.0.4/Python-2.4.4/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin

 

Credits

This FAQ is reproduced from a forum message by Kevin Teague.  Thanks, Kevin, for all your great, detailed explaining! 

How do I enable Member Folders in Plone 3?

Plone 3 disables member folders by default in Plone 3. Furthermore, the link to the member folder in the personal bar has been removed. How do I restore this functionality?

This FAQ was verified against Plone 3.1.7.

For security reasons, member folders are disabled by default in Plone 3.

This FAQ describes how to re-enable this functionality in 19 easy steps.

To re-enable them, set the check box named Enable User Folders in the Security control panel (@@security-controlpanel), reachable from Site Setup.  Specifically,

  1. Log into your plone site as a site manager.
  2. Click Site Setup.
  3. Click Security.
  4. Ensure "Enable User Folders" is checked.

 

Thereafter, any users that log into the site will have member folders created automatically.  However, there will be no link to them from the Personal Bar (as was the case in Plone 2.x). To re-enable this link, you must add the link using the ZMI in portal_actions.  To do this, you will make a copy of the preferences link and customize it to create a My Folder link. Specifically,

  1. Log into your plone site as a site manager.
  2. Click Site Setup.
  3. Click Zope Management Interface.
  4. Click portal_actions.
  5. Click users.
  6. Put a check next to Preferences and click tho Copy button.
  7. Click the Paste button. This creates a new content item called "copy_of_preferences".
  8. Put a check next to copy_of_preferences and click the Rename button.
  9. Replace "copy_of_preferences" with "my_folder" and click OK.
  10. Put a check next to my_folder and click the Top button (this makes the My Folder link appear before other links in the personal bar).
  11. Click my_folder.
  12. Change the Title to "My Folder".
  13. Change the URL to "string:${portal_url}/Members/${member}".
  14. Check the "Visible" checkbox.
  15. Click Save.

 

Congratulations.  Your members should now see a My Folder link in the personal bar and be able to create content within their folder.

This FAQ applies to: Plone 3

Do I have to restart Zope periodically?

For a production website that needs to be available 24/7, are there any issues with leaving Zope (or a ZEO cluster) running indefinitely?

You don't have to restart Zope periodically, but it's considered best practice to do so, and depending on the size and activity of your site, you'll very likely eventually run into some problems if you don't.  The reason is that Zope runs as a python process, and under certain circumstances a python process can consume all of the available memory on the host system.  This isn't a 'bug' in python, or necessarily even the code in the script that python is running.  Rather, it's a consequence of the fact that python uses a reference-counting garbage collection scheme.  This scheme is how python manages memory usage; specifically it's how python knows when to return memory to the OS by deleting objects that are no longer being used.  However, under some circumstances, it isn't able to know that an object is no longer being used, or more correctly it knows that there are a group of objects that are referencing each other and there is no way to determine a safe order in which to delete them, so it has to just leave them be.  When that happens the objects aren't destroyed (and thus the memory they were occupying isn't freed) until the entire process terminates, allowing python to indiscriminately clean up everything.

Even that description is probably more than you wanted.  If you're really curious, read the python docs on the __del__ method, and the gc module.

The point is that a long-running Zope process can eventually accumulate a very large memory footprint, much larger than it's actually using for the activities that it's doing.  And the only way to reduce that footprint is to terminate the process and restart it, allowing python to free all of the extraneous memory and get back to a clean slate for the process.

How often should the process be restarted?

There is no hard and fast rule.  It depends (not surprisingly) on both the capacity of the system on which it's running (i.e. how much RAM it has), and on the nature of the activity and scale of traffic on the website that the Zope process is providing.  If this is a production website, you should already be thinking about how to monitor the system and keep tabs on the resources used and the average load and response behavior of Zope.  It should be straightforward to identify when/if the Zope process begins to bloat to the point of jeopardizing performance.

If you're not being proactive about it, you might even find out the hard way, when Zope starts throwing mysterious exceptions (MemoryError, ClientDisconnected, etc..).  Of course mysterious exceptions could be caused by all kinds of problems, but if you're left scratching your head because you can't identify the cause, it may simply be that Zope soaked up too much memory and started making a mess of things.

How do I restart the process?

Several administrative scripts are available with a Plone install.  You probably used one of them to start Zope.  And you can probably just run the same script and pass it 'restart' as an argument.  But here are a few specific examples:

For Zope running as a single instance:
./bin/instance restart
For Zope running as a ZEO cluster:
./bin/restartcluster.sh
For Zope running as a ZEO cluster (if you only want to restart the clients and not the zeoserver):
./bin/restartclients.sh

How do I get this to happen automatically?

On GNU/Linux and OSX: use cron.  Create an entry in your crontab that executes the step(s) you identified above as suitable for your install.

On Windows: sorry, I don't know.

Anything else I should know/do?

Note that you should schedule the restart to occur at a time that will have the lowest likelihood of interfering with users accessing your site/services.  If your site serves a single region, then sometime in the very early AM is probably a good choice.  If your site is international, and experiences sustained traffic at all times, then you probably want to be a bit more sophisticated in how you manage any potential downtime, and should consider using a load-balancer, which is beyond the scope of this discussion.

If you're using a ZEO cluster, which has multiple Zope client processes, it's a good idea to stagger the restarts of the clients, so that they're not all down simultaneously (even briefly).  Again, a load-balancer can assist here.

Supervisor has also been recommended as a way to help manage this (and many other) administrative tasks for a Zope deployment.

If you're using a ZEO cluster, typically the zeoserver process does not need to participate in a restart schedule.  It's been described as a "dumb python pickle reader/writer", and doesn't exhibit the same kind of long-running memory bloat that can be witnessed with the Zope client processes.   However, it's been noted that the zeoserver can incur large increases in memory usage during/after a 'pack' of large ZODB storages.  You should observe the behavior of your zeoserver processes during the course of any regular maintenance and if you think it warrants a restart then go ahead, it won't hurt.

Does this advice still apply to the latest and greatest versions of Python, Zope and Plone?

Maybe.  Maybe not.  Rumor is that the memory bloat often witnessed with long-running Plone instances had less to do with conventional garbage collection (and cyclic references) and more to do with a specific memory management problem in Python 2.4.* (which was used by Plone until v4).  This same rumor asserts that Python 2.6+ does not suffer the problem to the same degree.  (Thanks to Steve McMahon for the tip.)

So it's possible that in the future the need to restart Plone processes will be much less frequent.  The general advice about carefully monitoring the resources used by your site will always be applicable, and you can judge for yourself whether memory bloat is a problem, and if it is then the guidelines provided here will remain applicable.

This FAQ applies to: Plone 4, Plone 3

How do I put parts of a distributed ZEO-based Plone into read-only mode?

When migrating a large distributed ZEO installation from one set of servers to another, or simply perform a Plone upgrade, placing parts of the site into read-only mode as they are moved from one server to another is very useful.

This guide is like http://plone.org/documentation/faq/plone-read-only-mode, only for distributed ZEO based Plone sites. It is assumed that as with most large Plone sites you have broken up your data storage into multiple ZODB FS files as http://plone.org/documentation/kb/mount-portal_catalog-in-separate-zodb describes and that you have a standard buildout based ZEO Plone installation in /usr/local/Plone/zeocluster. It is also assumed that you have already done an initial rsync of the ZODB FS files in order to transfer the bulk of the data - this is safe so long as you repeat the rsync after making the FS files read-only.

Unfortunately it isn't as easy as simply writing 'read-only true' into the top stanza of zeo.conf! Zope clients will try to repeatedly renegotiate the connection if they want write access and ZEO won't let them which appears to you as your site hanging itself - I personally would call this a bug in Zope actually, as at the very least it should timeout or do anything other than silently hang the site. But no matter, and I should add that current versions of Plone (v3.3) seem to need to write data to the root ZODB on startup anyway - otherwise it refuses to start properly.

Hence what we need to do is to make each of the mounted ZODBs read-only, but NOT the root ZODB (usually Data.fs). And because of that constant retry bug in Zope, you need to do the following for not just the ZEO server but also each and every Zope client too in order to prevent the clients retrying. In short, it's fairly painful, but currently there is no alternative (oh for proper buildout support!).

To make the ZEO server read-only, do cd /usr/local/Plone/zeocluster then do nano parts/zeoserver/etc/zeo.conf. For each <filestorage> OTHER than for path / (the root ZODB) do as follows:

<filestorage deepereconomics.org>
  path /usr/local/Plone/zeocluster/var/filestorage/deepereconomics.org.fs
  read-only true
</filestorage>

Now for each client zope N, do nano parts/clientN/etc/zope.conf. For each <zeoclient> in its <zodb_db>, do:

<zodb_db deepereconomics.org>
  <zeoclient>
    server 127.0.0.1:8100
    storage deepereconomics.org
    name deepereconomics.org
    var /usr/local/Plone/zeocluster/var/client1
    read-only true
  </zeoclient>
  mount-point /deepereconomics.org
  container-class OFS.Folder.Folder
</zodb_db>

If you're like me then you have a python script which munges buildout.cfg to automatically append the slightly customised zodb_db stanzas as zope-conf-additional's for each of the client definitions, so if you do then adding in the read-only to all clients at once is actually not too bad. Personally I'd love if the default Plone buildout did all this stuff for you, or at worst it defined variables which meant that I could avoid a specialised customisation of the var variable per client, but no matter.

Finally put your site into maintenance mode and take down ALL client zopes and the ZEO server - I run a varnish reverse proxy cache on the front that will continue serving cached data even when I take down the entire Zope cluster at once. Because of that constant retry bug one can't separately modify ZEO from the client zopes, so you have no choice: you must ensure the whole lot is down at once before restarting everything.

If you're really paranoid, you can also make the filestorage directory ZODB FS files read-only before restart - this snapshots the ZODBs at that point, but interestingly it does not on its own prevent writes as Zope initially writes into a temporary file and then merges the changes later (this is done to aid concurrency, as writing to any object relational database is inherently exclusive of all other operations as a consequence of OODB design). If you set unix permissions to read-only then ZEO simply doesn't merge the changes which may be useful or not to you.

Personally I find it aids my personal sense of security during the subsequent rsync as you can be absolutely guaranteed that the .fs file is coherent. Obviously I don't transfer the .fs.index or .fs.lock files, so the subsequent rsync should be very fast and deliver a coherent transfer.

I hope that this is useful to people - I hadn't found it anywhere else.

 

Customizing Plone

How do you stop display of author information (aka. byline)?

How do you remove the byline — the line saying "modified by XYZ at…" — from events, documents, news, etc.?

  • Go to Site SetupSecurity and check Allow anyone to view "about" information.
  • Press Save.

In older versions (ie. Plone 2.5 or older):

From the ZMI → portal_propertiessite_properties → uncheck AllowAnonymousViewAbout. This stops byline from displaying to anonymous viewers.

How do I add my own member properties?

Plone's default member properties cover the basics, but integrators often need to add additional member data specific to their use case.

The simplest option is just to use the portal_memberdata tool and manage simple properties, as per this how-to. If all you need is to store a few more fields, that's fine.

If you need to represent members as objects with workflow (e.g. to approve a member before becoming a full member of the site), and very advanced member data (e.g. you need complex validation, or you need to store a lot of other objects attached to the member object) then you have two options:

For Plone 2.1, you can use CMFMember, which has been out there for a very long time, but it also rather big and scary. It works well, but because of the frameworks it had to work with, it's prone to sometimes give you unexpected results.

For Plone 2.5, you can use membrane (lowercase m, in keeping with Zope 3 naming conventions) which is a Zope3-powered solution that uses PAS/PlonePAS (the authentication architecture in Plone 2.5). This is very elegant, and much lighter weight than CMFMember. It does not slot into Plone's member management at all (this is not its purpose), but it does give you a framework to represent users, their properties, their group memberships etc. in a very flexible way. You can use Membrane (capital M), the original and more Zope2-ish version in Plone 2.1, though you probably need to install PAS and PlonePAS too. At the time of writing, membrane is still in active development, but the version in svn is quite stable and used by several developers.

... which brings us to remember: remember is an effort to build what CMFMember was - a full-on replacement for the standard member management functionality in Plone - on top of membrane. It will provide the same basic member properties, and the same UI for finding, editing, joining etc. By leveraging membrane, it will also be easier to extend for your own use cases. Hence, remember will make sense where you need the power of membrane, but you are only interested in tweaking Plone's default member management.

At the time of writing, remember is not yet released. However, its authors have expressed an interest in providing a migration path from CMFMember to remember eventually.

How do you know which one to use?

Consider an example of a typical organisation, where staff members are users, and they are organised in departments.

In membrane, it would be easy to create two content types representing these: Department and Staff Member. A Department could be made to represent a group, and a Staff Member could be made to represent a user. Beyond that, they could be full Archetypes (or non-Archetypes) content objects, with rich schemata describing departments and their members. A Department would then be a folder that would contain a department's Pages and Files, but also its Staff Members.

The site administrator would then add departments as necessary, and a group would spring into existence for each one. Each staff member inside any department would be a first-level user, with the ability to log in and use the site - all of this without resorting to the low-level/generic member management of Plone's control panel.

In this case, you don't need remember or CMFMember: you need membrane, and the user management story it offers may be more appropriate than the one offered out-of-the-box in Plone.

On the other hand, if you wanted to sign up users via a "join" link like Plone has by default, and manage them all via a control panel applet, but add some custom properties and behaviour, then either stock Plone, CMFMember or (in time) remember will be for you.

This FAQ applies to: Plone 2.5.x, Plone 2.1.x

My portal_tabs are not visually selected

I've defined my own portal_tabs in portal_actions, but when I click one, the tab remains visually unselected.

Plone compares the id of your action (with category 'portal_tabs' in 'portal_actions' in the ZMI) to the id of the folder it navigates to. The id's must be equal for the tab to be visually selected.

How do I add MyType as a default page for a folder?

A MyType content object exists in the folder, but it doesn't show up when I use the "select content as default view" action.

You have to add MyType to the list of default page types (default_page_types lines property) in the ZMI at:

http://your.plone.site/portal_properties/site_properties/manage_propertiesForm

Add the friendly name for MyType to the list. You have to check the "Title" property for the MyType in the portal_types tool (in the ZMI) to get its friendly name. Now you should be able to add your custom type as the default content for a folder using the display menu.

See also the FAQ for setting the default index document. and "How do I add to the list of default display choices for a folder?"



How do I remove Icons?

How do I remove content type icons? How do I remove icons from navigation? How do I hide navigation icons?

Hiding icons in the navigation is often one of the first things people do. It depends on your usage. There is one setting that allows members to see the icons and hide them from the public.

  1. Sign in as 'admin' or user with permissions to enter site setup.
  2. Click site setup.
  3. Click Themes
  4. Under "Show content type icons" choose preference.

This FAQ applies to: Plone 3

The default TITLE tag says "Plone site". How do I change that?

This sitewide setting for Plone pages can be modified if you are Site Administrator.

  1. Sign on as manager (i.e., site administrator).
  2. Choose Site Setup (on top right).
  3. Choose Site Settings.
  4.  In the Site Title field, input the name you want. Press Save.

 

Notice that the title HTML will look like this:

 

Welcome to Plone &mdash; Pendelton State University
The first part (before the mdash) refers to the Title of the specific Plone page you are viewing. The second part (Pendelton State University)

is the Site Title field which you can edit via the Site Settings control panel.

 

This FAQ applies to: Plone 2.5.x, Plone 2.1.x, Plone 3, Plone 2.0.x

Why doesn't the "my folder" link show up in the personal bar?

I've created a new Plone 3.1 or Plone 3.2 site and even though I have enabled Member folders in the ZMI, the "my folder" link isn't show up for logged in users. How can I fix this?

There's a bug in Plone 3.1 and 3.2 where the my folder link doesn't show up in the personal bar after the Members folder has been enabled. You can add it manually in the ZMI by performing the following steps:

  1. In the root of your Plone site, in the ZMI, navigate to: portal_actions and then click on user 
  2. Near the upper right part of the right pane, make sure that CMF Action is selected in the dropdown menu and then click on the Add button
  3. For the ID, enter: mystuff
  4. Click the Add button
  5. Now click on the mystuff link
  6. Fill in the following fields to update the CMF Action:
    1. Title: My Folder
    2. URL (Expression): string:${portal/portal_membership/getHomeUrl}
    3. Condition (Expression): python:(member is not None) and (portal.portal_membership.getHomeFolder() is not None)
    4. Permissions: View
    5. Visible: (click the check box)
  7. Click Save Changes

The my folder link will now show up the next users log in to the site.

For Plone 3.3

In order for the My Folder link to show up in the personal bar, you will need to enable Member Folders through Plone Control Panel / Security configlit, NOT through the ZMI. If you've already enabled it through the ZMI, simply go to the Plone Control Panel / Security configlit, toggle it OFF, save, then toggle it back ON and save. The next time users log in, they will see the "My Folder" link.

 

 

This FAQ applies to: Plone 3

Add-On Products

How do I integrate with LDAP / Active Directory / Open Directory?

PloneLDAP integrates LDAP fully into your Plone 3 site.

This FAQ applies to: Plone 2.5.x, Plone 3

Where can I find products that work with Plone?

In general, products that are designed for the Zope CMF either work with Plone, or could be made to work with Plone with little work. In general, most products that are tested with Plone can be found in the products section of this web site.

What is Archetypes?

What is Archetypes? (What is CMFTypes?)

Archetypes (formerly known as CMFTypes) is a tool for building new content types by defining a simple schema file. It is customizable and powerful, and is the recommended way to build most new content types. See the Archetypes Developer Manual for more information.

On Windows XP I get "No python installation found in the registry" when installing certain Products

Some Products need to know which Python to use and on Windows, will check the registry to determine that. When using the Windows installer for Plone 2.5 or newer, Python is not automatically added to the Windows registry. You can add the installer's version of Python to the registry through Plone menu from the Windows Start menu:

Start menu / Plone / Development / Set InstallPath

Alternatively (and this might be needed for Plone 2.1 and older Windows installers), you can install the same version of Python via a Windows installer which will add itself to the registry.

This FAQ applies to: Plone 2.5.x, Plone 2.1.x, Plone 3, Plone 2.0.x

How Do I Install Python Modules To The Unified Installer?

Plone's "Unified Installer" installation script compiles its own copy of Python, because many systems do not include an appropriate version. This can create a bit of confusion you want to install additional Python modules for this copy of Python. Here's how to sort it out.

Using buildout

Just add the name of the eggs you want to the eggs section of the [buildout] part in your buildout.cfg file and run bin/buildout. It's also good to specify a version number. Example, to add python-ldap:

[buildout]

...

eggs =
    Plone
    python-ldap==2.3.10

Working manually with the Python installation provided by the Unified Installer

The easiest way to work with a particular Python for a particular Plone installation is to put that Python first on your PATH:

$ export PATH=/opt/Plone-3.0.4/Python-2.4.4/bin:$PATH
$ which python
/opt/Plone-3.0.4/Python-2.4.4/bin/python

Note that this example is for Plone 3, which runs on Python 2.4. Plone 4 runs on Python 2.6 so, if you're using Plone 4, replace all references to Python 2.4 above and below to Python 2.6.

For python-ldap you should then be able to to:

$ python setup.py install

Note that this is basically the same as this:

$ /opt/Plone-3.0.4/Python-2.4.4/bin/python setup.py install

But manipulating your PATH environment variable just saves you a lot of typing. You can also create aliases in your shell profile (~/.bashrc on linux, ~/.profile on Mac OS X) to make it easier to put a particular Python first on your PATH:

# in your .bashrc or .profile
alias py4prod="export PATH=/opt/Plone-3.0.4/Python-2.4.4/bin:$PATH"
alias py4dev="export PATH=/opt/Plone-3.1/Python-2.4.4/bin:$PATH"

Then on your shell just type:

$ py4prod
$ echo $PATH
$ /opt/Plone-3.0.4/Python-2.4.4/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin

 

Credits

This FAQ is reproduced from a forum message by Kevin Teague.  Thanks, Kevin, for all your great, detailed explaining! 

Templates / Changing Visual Design

Plone 3 Theming Errata

Below is the list of ongoing errata from the Theming for Plone 3 book by Veda Williams. These errata are also being relayed to Packt Publishing so that they will hopefully be resolved in upcoming printings / ebooks. Any additional errata can be submitted to veda@groundwire.org and are appreciated.

Thanks to Scott Paley, Feneric, Jeff Pittman and Walt Martin for spotting these.

General comments:

Where I have said "mynewtheme", change that to "mytheme".

Chapter 2:

Page 39, Text Editors, TextMate

TextMate can be purchased for 39 Euros, or around $57 USD.

Chapter 3:

Page 55, Subversion for version control

The Macintosh equivalent of TortoiseSVN is SCPlugin, and can be found at http://scplugin.tigris.org.

Chapter 4:

There's an important errata in Chapter 4 where you create the Plone theme. It reads:

$ paster create -t plone3_theme

It should read:

$ paster create -t plone3_theme plonetheme.mytheme

You could optionally specify plonetheme.mytheme after the initial syntax here, too:

$ paster create -t plone3_theme

The real point here is that "My Theme" is not a valid package name, and buildout will not pick it up if there are spaces in the name. You need to create a package name that is one word. We use the plonetheme namespace here, too, out of convention.

Also, where it says:

Enter project name: My Theme

It should read:

Enter project name: plonetheme.mytheme

Chapter 4

Page 72, Putting your site into debug mode

In the path given, it should be portal_css, not portal/css.

Chapter 5

Page 80, Install Your Theme Product

Replace the semi-colon with a colon here: http://localhost:8080/mysite.

Page 80, Install Your Theme Product

Where it says to modify mytheme.css in skins/plonetheme_mynewtheme_styles, you should actually be modifying main.css in the browser/ folder.

Page 95, Install Your Theme Product

Where it mentions editing the mytheme.css file found in the skins/plonetheme_mytheme_styles file, you actually want to modify the main.css file located in the browser/ folder of your theme product instead. Make sure you have your site's portal_css in debug mode (outlined in the next section).

Page 96, General Guidelines During Development

"Uninstallation requires that a theme to have an uninstall profile written for it." Need to remove the word "to".

Page 99, Changing base_properties

Where it says: “The actual name of the base proptery sheet on the filesystem is base_properties.props, and it can be found in parts/plone/CMFPlone/skins/plone_styles.”
 
The path should be: src/plonetheme.mytheme/plonetheme/mytheme/skins/plonetheme_mytheme_styles 

Page 104, Common conventions for using stylesheets in Plone

The paragraph starting "when a new Plone" is duplicated. Ignore the first place where it appears.

Page 107, Starting with CSS in the ZMI

The path in your buildout that you drill down to should be: 

buildout-cache/eggs/Plone [some version number]/Products/CMFPlone/skins/plone_styles

Page 108, Creating a theme-specific stylesheet in your filesystem product

The path to the stylesheet should be: 

skins/plonetheme_mytheme_styles

Also, to clarify, the cssregistry.xml file is located in profiles/default/.

Page 109, Moving portal_actions configurations into a filesystem product

After the sentence that states that you should import your generic setup step for your theme product into your website, there should be a sentence reading: "You can import this step by clicking on the Import tab and by choosing your theme product's profile from the dropdown list at the top of the page."

Chapter 6

Page 121, Browser Pages

The code in this section does not work -- at all. I'm working on getting it fixed and will have revised code soon. My apologies. In lieu of reading this section, please take a look at the following links:

http://worldcookery.com/files/ploneconf05-five/step3.html
http://plone.org/documentation/tutorial/customization-for-developers/zope-3-browser-views

This FAQ applies to: Plone 3

Why do I see HTML tags verbatim in my output?

I've created/edited a PageTemplate, and I'm seeing HTML tags verbatim in the output. Why?

You need to use the expression "structure" before your TALES expression. By default (for good security reasons), HTML output is quoted by Zope Page Templates.

So, instead of

<p tal:content="my_var" />

Say:

<p tal:content="structure my_var" />

Why is my new viewlet showing up in other skins on other plone instances?

When creating a custom skin/theme a viewlet (registered in browser/configure.xml) is showing up in instances, that don't use the custom skin.

You probably don't have the layer=".interfaces.IThemeSpecific" line. Ensure that your entry in browser/configure.xml looks like this:

<browser:viewlet
        name="myskin.myspecialviewlet"
        manager="plone.app.layout.viewlets.interfaces.IPortalHeader"
        class=".viewlets.MySpecialViewlet"
        permission="zope2.View"
        layer=".interfaces.IThemeSpecific"
        />

You may need to restart Plone after the change is made.

This FAQ applies to: Plone 3

How do I stop acquisition?

How can an object be queried for an attribute in such a way as to prevent acquisition.

Sometimes, it's helpful to prevent acquisition from looking elsewhere for an attribute when it isn't found on the current object.  For example, consider the following:

We have a person object, with an attribute 'job' and a template/view that lists a persons jobs along with other attributes.  We have an instance of this object named 'Joe'.  His job is 'Dog Catcher'.  Joe also has a daughter 'Emily', so we add a person object contained in 'Joe' to represent his child.

Now, in viewing Emily, unless she has a job of her own, when we ask to see her job, acquisition will move upward and use the 'job' attribute from her father.  If she's following in her father's footsteps, that might not be such a bad thing, but what if she's only six and doesn't have a job yet?  We could make a new template for kids, but that's wasteful.  Instead, let's prevent acquisition from looking outside Emily for her job:

<div tal:condition="here/aq_explicit/job|nothing" 
     tal:content="here/job" id="job listing">[A person's job]</div>
That way, the div never appears if Emily has no job herself.  Problem solved.  Yay!

How do I read @@manage-viewlets if my site is heavily styled?

@@manage-viewlets is hard to read, because it's picking up styles from my theme product. How do I read this page?

Disable CSS on that page. This can be easily accomplished if you are using Web Developer Toolbar for Firefox. Note that we are working on changing this view so that it no longer picks up the portlet styles from a theme product.

This FAQ applies to: Plone 3

The default TITLE tag says "Plone site". How do I change that?

This sitewide setting for Plone pages can be modified if you are Site Administrator.

  1. Sign on as manager (i.e., site administrator).
  2. Choose Site Setup (on top right).
  3. Choose Site Settings.
  4.  In the Site Title field, input the name you want. Press Save.

 

Notice that the title HTML will look like this:

 

Welcome to Plone &mdash; Pendelton State University
The first part (before the mdash) refers to the Title of the specific Plone page you are viewing. The second part (Pendelton State University)

is the Site Title field which you can edit via the Site Settings control panel.

 

This FAQ applies to: Plone 2.5.x, Plone 2.1.x, Plone 3, Plone 2.0.x

Plone CSS

How do I read @@manage-viewlets if my site is heavily styled?

@@manage-viewlets is hard to read, because it's picking up styles from my theme product. How do I read this page?

Disable CSS on that page. This can be easily accomplished if you are using Web Developer Toolbar for Firefox. Note that we are working on changing this view so that it no longer picks up the portlet styles from a theme product.

This FAQ applies to: Plone 3

Creating New Content Types

How can I make customized content types?

How can I make customized content types?

There are several different ways to make customized content types, depending on the amount of specialization you want:

to have a content type that holds the same information as an existing type, but looks different
You don't have to create a new class of objects at all. Instead, you can create a new Portal Type on your existing types. Under portal_types, just copy and paste an existing type (for example, copy "News Item", paste it, and rename it "Press Release"). Now you can modify the existing skins, as needed.
to create a new content type
the easiest way to create an entirely new type is to use Archetypes, an add-on to Plone 2.0 and an integral part of Plone 2.1. This lets you define a simple schema file. It is much more flexible than the first two options if your new type needs to have many new attributes, behaviors, etc.; however, it will involve installing a new product, having filesystem access to your Plone server, and restarting the Plone server. For some pointers, see the documentation overview. In particular, you may want to check out the ArchGenXML CASE tool, which lets you create content types using UML diagrams. The ArchGenXML tutorial should get you started.
to have a content type that holds similar information to existing types
You can base your new type on an existing type, but add new properties onto it. To do this, under portal_types, choose a Scriptable Type Information' type. You'll need to read documentation on how to use Scriptable Type Information, but this will let you define a custom creation script that can add any new desired attributes. Then, you can modify the scripts. For more advanced use cases, you may want to extend an Archetypes content type. The RichDocument tutorial shows you how to extend Plone 2.1's default content types.
(deprecated) use a ZClass
ZClasses were through-the-web, easy-to-use tool for creating new content types. Unfortunately, they have enough limitations that many people recommend not using them at all. If you're interested in ZClasses, you can read about them in the Zope Book

This FAQ applies to: Plone 2.5.x, Plone 2.1.x, Plone 2.0.x

How can I make a pre-populated folder, one with pre-existing sub-folders and/or other content types, through-the-web?

How can I make a pre-populated folder, one with pre-existing sub-folders and/or other content types, through-the-web?

This involves creating a new scriptable type. Here is a howto that describes one method to create a folder already populated with content.

I repurpose a content type but when I'm on a edit_form and I click save nothing happens?

I repurpose a content type but when I'm on a edit_form and I click save nothing happens?

Detailed information is available in the Repurpose Issues How To.

What is Archetypes?

What is Archetypes? (What is CMFTypes?)

Archetypes (formerly known as CMFTypes) is a tool for building new content types by defining a simple schema file. It is customizable and powerful, and is the recommended way to build most new content types. See the Archetypes Developer Manual for more information.

Enable title-to-id generation

Have the id automatically generated from the title chosen for the object for your custom type

Archetypes 1.3.4+ combined with plone 2.1 provides a way to have the id automatically generated from the title chosen for the object, which is on by default for ATCT types. To get this in your  own types, set _at_rename_after_creation = True on your class.

This FAQ applies to: Plone 2.1.x

Display Date only in Calendar Widget

How do I configure CalendarWidget to get the date information without displaying time?

The calendar widget has an option called "show_hm" which should allow you  to choose whether you want hours/minutes or not.

According to some people on a different list, the argument 'show_hm'  should be working in the edit forms as long as you are using Plone 2.1.  For display, you'll have to use strftime().


Example:

      DateTimeField('startDate',
required=True,
searchable=True,
accessor='start',
default_method=DateTime,
languageIndependent=True,
widget = CalendarWidget(
description=("Enter the starting date and time, or click "
"the calendar icon and select it. "),
description_msgid = "help_event_start",
label="Event Starts",
show_hm = False,
label_msgid = "label_event_start",
i18n_domain = "plone")),


This FAQ applies to: Plone 2.1.x

How can I test which version of Plone I have running?

In a product it is often useful, or even required, to do different things depending on which version of Plone the product is installed under. These simple methods will allow you to find out what version you are running, and test against that information.

Use the 'portal_migration' tool.  It provides two methods that are particularly useful:

  • getInstanceVersion (returns a string with the instance version, like '2.5.4' or '3.0.2')

  • getInstanceVersionTuple (returns a tuple, like (2, 5, 4, 'final', 0)

With this information you can write a simple test or set a variable for your code like so:

from Products.CMFCore.utils import getToolByName
def isPlone3OrBetter(self):
    migrationTool = getToolByName(self, 'portal_migration')
    return migrationTool.getInstanceVersionTuple[0] >= 3

this can be used in an install script for a product to 'do the right thing' based on what version of plone is running.

Why doesn't my Archetypes custom content type show up in Add menu?

When creating new content types, many factors can silently fail due to human errors in the complex content type setup chain and security limitations. The effect is that you don't see your content type in Add drop down menu. Here are tips for debugging.

  1. Is your product broken due to Python import time errors? Check Zope Management Interface -> Cotrol panel -> Products. Turn on Zope debugging mode to trace import errors.
  2. Have you rerun the quick installer (GenericSetup) after creating/modifying the content type?
  3. Do you have a correct Add permission for the product? Check __init__.py ContentInit() call.
  4. Does it show up in the portal factory? Check ZMI -> portal_factory and factorytool.xml.
  5. Is it corretly registered as a portal type and implictly addable? Check ZMI -> portal_types. Check default/profiles/type/yourtype.xml
  6. Does it have correct product name defined? Check ZMI -> portal_types.
  7. Does it have a proper factory method? Check ZMI -> types_tool. Check Zope logs for _queryFactory and import errors.
  8. Does it register itself with Archetypes? Check ZMI -> archetypes_tool. Make sure that you have ContentInit properly run in your __init__.py. Make sure that all modules having Archetypes content types defined and registerType() call are imported in __init__py.

This FAQ applies to: Plone 4, Plone 3

Security

Can other people see what is in "my folder"?

Can other people see what is in "my folder"?

That depends. Site managers can see it, certainly. Whether other members can see it depends on the workflow policies set up by your local Plone administrator. In a stock Plone site, new content is automatically visible to other Members, unless you use the "State" tab to explicitly mark it private.

Why doesn't my Python code work from a Python Script?

I have added a Python Script with classes or imports, why won't they work?

2012 update: Zope 2 "Python Scripts" are outdated technology and you should no longer write any Plone code through Zope Management Interface using Python scripts. Instead, create an add-on and create Zope 3 browser views in it.

 

Python Scripts product provides support for restricted execution of Python scripts, exposing them as callable objects within the Zope environment.

These scripts are restricted for security reasons, and to stop you from invoking code that could make your server consume an infinite amount of CPU and/or memory (this is possible with the re module, for example).

If you want unrestricted Python code, it should live on the file system as a Zope Product or as an external method, not in Python scripts that are added through the web or in skins.

For extensive information about this, and for how to make additional modules available, please consult the following file in your Zope instance:

/lib/python/Products/PythonScripts/README.txt

Keep in mind that using allow_module() is not a solution for every use-case.  allow_module() is supposed to work with Python modules implemented in Python itself but no necessarily with Python module (extensions) implemented in C.

For PythonScript functionality without restrictions you might check out TrustedExecutables by Dieter Maurer (be careful since TrustedExecutables might introduce security problems since none of the Zope security checks apply).

When you are working with Zope 3 technology then you should implement your functionalities using Zope 3 browser views

Where are my iframe/script/embed tags?

Why does my content item not render any iframe, object, embed, or script tags?

These tags represent cross-site scripting vulnerabilities in a public site. They have been filtered in Plone starting from version 2.1. If your site has non-trusted contributors, make sure you are aware of the security implications if you want to enable embed/script/object tags.

  • In Plone 3.0, you can adjust this behaviour in the "HTML Filtering" control panel. This controls both the front-end and back-end filtering.
  • In Plone 2.5, you can go to portal_transforms in the ZMI and edit the properties for the transform known as safe_html. Tag filtering can even be completely disabled in safe_html.
  • In Plone 2.1.x, you can edit the VALID_TAGS and NASTY_TAGS lists in Products.CMFDefault.utils.py and restart Zope if you want to change this. But you should not do this for public sites.

If you are using WYSIWYG content editors like Kupu, there are further restrictions. You can learn more about how Plone also filters tags by reading the fine How-to about HTML filtering options.

Why did my permissions change?

I configured a permission on the Security tab of an object in the ZMI. Later this permission has changed. Why?

Plone manages certain permissions through the workflow mechanism. In this way, permissions are automatically set according to the current workflow state of a content item. For example, in the default Plone workflow anonymous users can view a content item in state ‘published’, but not in state ‘private’.

Permissions that are managed by a workflow may be changed by Plone when:

  • the object undergoes a state transition
  • an administrator performs “update security settings” in portal_workflows in the ZMI (which should be a safe operation that can be performed at all times)
  • states or security settings are manipulated programmatically, for example when you migrate to a newer Plone version
You should therefore set permissions that are managed by a workflow in the configuration of that workflow in portal_workflows, not on the Security tab directly.


How do I add a role?

In Plone 2.5 and using PAS, there is an additional step required to add a role. Here's how to make it work.

If you want to add a role to your plone site, you need to do two things:

  1. Add the role in the ZMI, under the Security Tab.
  2. Add the role in the portal_role_manager, which is available under acl_users.
If only step 1 is executed, you will not be able to assign the role to groups using the "Users and Groups Administration" in site setup - the checkboxes for each role will be disabled. There are probably other things that fail to work as well.

This FAQ applies to: Plone 2.5.x

Users and Groups

What is "my folder" for?

What is "my folder" for?

It's the default place where you add new content. Think of it like your "My Documents" folder in Windows.

Why doesn't the "my folder" link show up in the personal bar?

I've created a new Plone 3.1 or Plone 3.2 site and even though I have enabled Member folders in the ZMI, the "my folder" link isn't show up for logged in users. How can I fix this?

There's a bug in Plone 3.1 and 3.2 where the my folder link doesn't show up in the personal bar after the Members folder has been enabled. You can add it manually in the ZMI by performing the following steps:

  1. In the root of your Plone site, in the ZMI, navigate to: portal_actions and then click on user 
  2. Near the upper right part of the right pane, make sure that CMF Action is selected in the dropdown menu and then click on the Add button
  3. For the ID, enter: mystuff
  4. Click the Add button
  5. Now click on the mystuff link
  6. Fill in the following fields to update the CMF Action:
    1. Title: My Folder
    2. URL (Expression): string:${portal/portal_membership/getHomeUrl}
    3. Condition (Expression): python:(member is not None) and (portal.portal_membership.getHomeFolder() is not None)
    4. Permissions: View
    5. Visible: (click the check box)
  7. Click Save Changes

The my folder link will now show up the next users log in to the site.

For Plone 3.3

In order for the My Folder link to show up in the personal bar, you will need to enable Member Folders through Plone Control Panel / Security configlit, NOT through the ZMI. If you've already enabled it through the ZMI, simply go to the Plone Control Panel / Security configlit, toggle it OFF, save, then toggle it back ON and save. The next time users log in, they will see the "My Folder" link.

 

 

This FAQ applies to: Plone 3

Internationalization

How can I keep my interface translations separate and upgradable?

I need to keep my own translations of some parts of the Plone User interface. How can I keep these separate from the Plone translation files, so they don't get deleted when I upgrade?

Put your translations in a separate .po file with the domain plone in the header.

This way, you will have a mytranslations-xy.po with your own translations that will be added to the Plone translation name space on load, and you can update the normal plone-xy.po files without affecting your translations.

If you keep your files in a directory called i18n in your INSTANCE_HOME directory, they will always have priority over the ones shipping inside Products.

What is the holy grail to understand and solve encoding errors?

I get "UnicodeEncodeError: 'ascii' codec can't encode characters in position ..." or similar in my python code. What the hell did I do wrong?

If you get 'ascii' in your error message, you will most probably have tried to send a string with "special characters" to the console, or a log or something like that.

To understand encoding problems you can face within python code in your Plone instance (probably form handlers or something similar), you have to understand one central design pattern of python (that has come to python in version 2.0):

Python understands 2 kinds of strings:

  • unicode strings
and
  • byte strings

If you declare them literal that would be u'This is a unicode string' (though unneccessary in english...) and 'This is a normal (byte) string'

both are objects and both have methods to convert to each other: unicode(bytestring) gives you a unicode string out of a byte string and unicodestring.encode('encoding') gives you a byte string out of a unicode string.

Important to know are some conventions and fundamental principles:

  • python does not create unicode object strings by default (Note from the reviewer: but Zope 3 does)
  • unicode strings are not the same as utf-8 encoded byte string (most important to understand!)
  • python converts unicode strings to ascii by default on printing them and with "strict" policy (throw encoding errors on conversion problems)

As this is only a FAQ, that should be enough for you to read further on and find the correct tutorials and so on
like http://www.amk.ca/python/howto/unicode

good luck!

Workflow

Why is my workflow security settings not updated?

I've changed somthing in the portal_workflow but it looks like plone ignores my changes. What is wrong?

Find and press the "Update security settings" button on the portal_workflow page.

This FAQ applies to: Plone 4, Plone 3, Plone 2.5.x, Plone 2.1.x, Plone 2.0.x

Why did my permissions change?

I configured a permission on the Security tab of an object in the ZMI. Later this permission has changed. Why?

Plone manages certain permissions through the workflow mechanism. In this way, permissions are automatically set according to the current workflow state of a content item. For example, in the default Plone workflow anonymous users can view a content item in state ‘published’, but not in state ‘private’.

Permissions that are managed by a workflow may be changed by Plone when:

  • the object undergoes a state transition
  • an administrator performs “update security settings” in portal_workflows in the ZMI (which should be a safe operation that can be performed at all times)
  • states or security settings are manipulated programmatically, for example when you migrate to a newer Plone version
You should therefore set permissions that are managed by a workflow in the configuration of that workflow in portal_workflows, not on the Security tab directly.


How can I test which version of Plone I have running?

In a product it is often useful, or even required, to do different things depending on which version of Plone the product is installed under. These simple methods will allow you to find out what version you are running, and test against that information.

Use the 'portal_migration' tool.  It provides two methods that are particularly useful:

  • getInstanceVersion (returns a string with the instance version, like '2.5.4' or '3.0.2')

  • getInstanceVersionTuple (returns a tuple, like (2, 5, 4, 'final', 0)

With this information you can write a simple test or set a variable for your code like so:

from Products.CMFCore.utils import getToolByName
def isPlone3OrBetter(self):
    migrationTool = getToolByName(self, 'portal_migration')
    return migrationTool.getInstanceVersionTuple[0] >= 3

this can be used in an install script for a product to 'do the right thing' based on what version of plone is running.

Plone and Relational Databases

Can I store content in a relational database?

Can I store content in a relational database?

Yes, in several different ways, depending on your needs.

1) If you have lots and lots of data, especially in legacy formats, you can use ZSQLMethods, a way to have Zope call SQL statements and you can then script the results. The data in the relational DB isn't really "content"; it can't undergo workflow or such, but for many cases, this is fine or even preferable.

2) You can use Archetypes with SQLStorage. This lets you work with normal Plone content, and choose which attributes you want to keep in the relational database. It's easy to use, but requires that you create custom content types--you can't use the normal Plone News Item, for example, and keep the data in the relational database. There's a long HOWTO on this here: http://plone.org/documentation/manual/archetypes-developer-manual

3) You can use RelStorage, an add-on product for Zope that stores Plone data in a relational database. RelStorage is extremely performant and very scalable, but it doesn't store its data in a format that is readable by other non-Plone applications.

4) ContentMirror also offers an approach to serializing Plone content in a relational database.

Licensing & Legal Questions

What license is Plone governed by?

What license is Plone governed by?

The GNU General Public License (GPL) version 2. This is the same license used for the Linux operating system. See LICENSE.txt and LICENSE.GPL in the Plone distribution, or see http://www.gnu.org/licenses/gpl.html and http://www.gnu.org/licenses/gpl-faq.html for further information.

For more in-depth information, see the dedicated license FAQ.

What are the terms of use for the Plone trademark?

I want to use the word Plone in the name of my company/website/product/service. Can I do this?

The Plone Foundation has posted a list with Policy and Fair Use of the Plone Trademark. If you have any additional questions, ask the IP & Licensing Committee.

Contributing

How can I get involved in the Plone project?

How can I get involved in the Plone project?

There are many ways to get involved with Plone, if you have time, initiative and want to help make CMF Plone the best content management system in the open source world. There are several areas we need expertise in documentation, developer, testing and user interface. Send an email to the plone users mailing list saying you would like to help and the area you can help and someone will contact you.

How can I support the Plone project if I am not a developer?

How can I support the Plone project if I am not a developer?

There are many ways to support the project that do not involve delving in to the code.

One of the primary ways is to work on the documentation. It is extremely important with an open-source project like Plone that solid up-to-date documentation exists.

This documentation primarily exists in three forms, the main manual (plone book), various How-To's that delve deeper into specific topics, and the FAQ. All three of these forms and others are important as they address different ways of gathering information. You may reference or study the book, if you have a question you may go to the FAQ, and if you are looking to be walked through a technical challenge, you may find an appropriate How-To.

If you are interested in getting involved in the documentation project for Plone, send an email to the Plone-Docs mail list.

Can I contribute financially to the Plone project?

Can I contribute financially to the Plone project?

Yes (I'm sure). I will find out how. In the interim, email the Plone-Users mail list.

I am a newbie - how can I help out?

As a 'newbie' I think I offer a unique perspective on the usability and quality of the documentation and Plone itself. This information can be very valuable to the community. What is the best way for me to help?

The best thing is to look at plone.org/documentation and identify any "holes". You should probably start at http://plone.org/documentation/how-to/read-documentation. From there, keep a log of your explorations. When you hit a brick wall, go back a step and see if you've overlooked anything. If the documentation you require is not there or is too difficult to find, or if it's there but too difficult to understand, then post to the plone documentation mailing list (see plone.org/contact) with as much detail as you can with how you think the experience could be improved.

As you progress, you are welcome (and encouraged!) to write new tutorials, FAQs and how-tos in this documentation area (just join plone.org and log in). We will review these and publish as appropriate. Please do look at existing documentation before writing a new item, though, since we don't want duplication in our documentation.

How to suggest a feature for Plone

I have a great idea for how to make Plone better! How can I suggest a new feature?

The Plone community values your input! We have set up a feedback forum at http://plone.uservoice.com. We enthusiastically encourage you to submit ideas about how to improve Plone, and to vote on and discuss existing ideas. We can't promise that ideas will be implemented, but we will certainly use this tool to understand what Plone users want to see added and improved. 

To submit, discuss and vote on ideas for Plone, head on over to http://plone.uservoice.com

UserVoice is a new tool as of June, 2009.  Here are some frequently asked questions:

How does the UserVoice forum relate to the various Plone mailing lists?

We still actively encourage people to use the mailing lists and IRC (see http://plone.org/support) to ask for help or discuss Plone in general. The UserVoice forum is meant to supplement the mailing lists as a place where ideas can be captured and voted upon without being lost in the general chatter.

Please do not use the UserVoice forum to ask for help or start a general discussion about Plone. You'll have much more success (and a wider audience) on the plone-users mailing list!

How does the User Voice forum relate to the PLIP process?

PLIPs are Plone Improvement Proposals. We use this to track features and code bundles submitted for inclusion in future Plone versions. The UserVoice forum is intended to help generate ideas. If an idea is deemed good (i.e. it gets a large number of votes) and someone is willing to implement it and see it through the PLIP process, it may be turned into a PLIP and submitted for review by the appropriate Plone Framework Team, whose job it is to review and accept/reject PLIPs.

Don't worry about PLIPs if you only want to suggest an idea and you're not intending to go implement it. If you have an idea and you want to try to implement, but you're not sure how the PLIP process works, use the plone-dev mailing list to ask for help.

Why do I only have 10 votes?

The User Voice forum works on the principle of a vote economy. The idea is that by having a limited number of votes, people have to choose what they vote for more carefully, and so the most desirable ideas are more likely to be highlighted.

You can change your voting, and votes are freed up once an idea is accepted (e.g. turned into a PLIP) or rejected.

The 10 vote count is the default in UserVoice. We will be monitoring how effective this limit is and work with the User Voice team to adjust the vote count if necessary. However, the 10 vote limit is likely to stay in place for some time as we validate this approach.

I think I've found a bug in Plone. Where should I report it?

Plone bugs should be reported as a ticket. Please search the issue tracker to make sure nobody else has already reported this or it hasn't been already fixed in a new version.

Bugs for third party products should be reported in the repository they request. This is usually indicated on the pypi page for the product or on the product listing in the products section.

If the issue is related to plone.org (this website), please file the ticket under the component "Website".

If the problem is in the plone.org documentation, report it to the plone tracker, and select the Documentation component, since the documentation is considered part of the Plone product.

Security-related bugs should be reported via email to security(at)plone.org. Both security issues in Plone or its add-on products can be reported here, and we will contact the relevant maintainer if necessary.

Internationalization bugs (i18n) should be filed in the Plone issue tracker under the Internationalization component.

Translation bugs (l10n) should be filed in the dedicated translation issue tracker on plone.org.

    This FAQ applies to: Plone 4, Plone 3, Plone 2.5.x, Plone 2.1.x, Plone 2.0.x

    Documentation

    What are the best ways to get help with Plone?

    What are the best ways to get help with Plone?

    After reading the documentation, mailinglists and IRC are the best ways to get in contact with the plone-community. The plone-user list is the most appropriate place to ask questions, and the #plone channel on irc.freenode.net is always full of people.

    Please see the support page for details.

    How do I restart Zope?

    How do I restart Zope on my local machine, or on my server?

    Plone 3.x from the controlpanel

    1. Click 'site setup' (or go to yourSite/plone_control_panel)
    2. Click maintenance (or go to yourSite/@@maintenance-controlpanel
    3. Click 'Restart' (wait for it to finish the 'restart' as it may take a little while)

    NOTE: If you started your instance in 'fg' mode, you will not see the 'restart' button. To see the 'restart' button you must start your instance with the 'start' command.

    If you're using buildout, type:

    bin/instance start

    If you're using a traditional instance:

     bin/zopectl start

     

    Plone 2.x from the controlpanel

    1. Go to the Control Panel in the Zope Management Interface (ZMI):
    • On your local machine/computer, typically (you might have different port number):

      If you are signed in on your local, this link should take you to the zope restart.

      http://localhost:8080/Control_Panel/manage
    • On your server:
      http://yourServer.address.com/Control_Panel/manage

    2. Click 'Restart'

     

    How do I pack the ZODB?

    How do I pack the Zope Object Database? Also, why should I pack the zodb?

    This FAQ assumes you have manager role and proper permissions to work in the ZODB.

    • Packing the ZODB removes old copies of objects, so once it is done, you can no longer undo them.
    • There may be a little performance benefit.
    • There is a disk space benefit.

     

    Note: for automatic packing information please see Plone Developer Documentation page.

     

    Go Direct

    On your local machine, click

    http://localhost:8080/Control_Panel/Database/main/manage_main (you might have different port number)

    1. choose how many days of undo-data you wish to leave in the system in the box provided
    2. click pack

     

    On your Server

    go to yourSite/Control_Panel/Database/main/manage_main)

    1. choose how many days of undo-data you wish to leave in the system in the box provided
    2. click pack

     

    Plone 3.0.x from the controlpanel

    1. click 'site setup' (or go to yourSite/plone_control_panel)
    2. click maintenance (or go to yourSite/@@maintenance-controlpanel
    3. choose how many days of undo-data you wish to leave in the system in the box provided
    4. click 'Pack database now' (wait for it to finish the pack as it may take a little while)

     

    From The Top

    Starting from the Plone UI (user interface):

    1. sign in with your 'admin' role
    2. click 'site setup' (or go to yourSite/plone_control_panel)
    3. click 'Zope Management Interface' (or go to yourSite/manage_main)
    4. click on the '/' at the top left where it says 'Plone Site at'
    5. click 'Control_Panel' (or go to yourSite/Control_Panel/manage_main)
    6. click 'Database Management' (or go to yourSite/Control_Panel/Database/manage_main)
    7. click 'main' (or go to yourSite/Control_Panel/Database/main/manage_main)
    8. choose how many days of undo-data you wish to leave in the system in the box provided
    9. click 'pack' (wait for it to finish the pack as it may take a little while)

    How do I submit a FAQ?

    Before you can submit a question, you first need to become a member. After becoming a member, you will see the Add FAQ question on the top right portion of the FAQ list.

    This FAQ applies to: Plone 2.5.x, Plone 2.1.x, Plone 3, Plone 2.0.x

    How do I remove Icons?

    How do I remove content type icons? How do I remove icons from navigation? How do I hide navigation icons?

    Hiding icons in the navigation is often one of the first things people do. It depends on your usage. There is one setting that allows members to see the icons and hide them from the public.

    1. Sign in as 'admin' or user with permissions to enter site setup.
    2. Click site setup.
    3. Click Themes
    4. Under "Show content type icons" choose preference.

    This FAQ applies to: Plone 3

    Various

    Why do links become relative in the visual editor?

    Why are internal hyperlinks transformed to relative when I save my text in Kupu?

    Kupu converts absolute internal urls to relative to ensure consistent behaviour. Without the conversion links would be absolute when edited with Internet Explorer and relative when edited with Mozilla / Firefox.

    When the HTML content needs to be used outside of Plone, e.g. in an e-mail, relative links should function correctly when you add a <base> tag in your pages.

    Note that the links you see in Kupu's source view or "View source" of your browser may differ, since browsers may transform the content when you start editing in Kupu. Internet Explorer, for example, convert all links from relative to absolute.

    Kupu can be hacked (not recommended) to disable the transformation to relative links: edit the javascript so that KupuEditor.prototype.makeLinksRelative is a function which simply returns its first parameter unchanged.

    This FAQ applies to: Plone 2.1.x

    Why don't news items respect the effective and expiration date?

    The news portlet and News smart folder don't seem to use the effective date and expiration dates of a news item as criteria. You see news items that should become visible in the future, or expired in the past.

    The effective and expiration date are handled by the portal catalog, not by the news smart folder or news portlet. That's why you don't see criteria for these fields in the smart folder and in the portlet's template.

    The reason you see items from the future or the past is most likely that you're logged in as manager. Login as a regular user, or view your site anonymously (not logged in), refresh your page and you should see only news items with: effective date

    This FAQ applies to: Plone 2.1.x

    How can I change the name in the byline?

    I would like to be able to change an item's authorship (the name the item is attributed to for example 'by John Doe - last modified ....). Even though I have changed the ownership of my item, it still appears to be 'authored' by my user. How can I change the name in the byline?

    Under Plone 2.1.x use the Properties tab there is a Creators field. The first person listed in the Creators field will be attributed with authorship and will show up in the byline.  In a format similar to:

    by Douglas Adams — last modified May 2, 2006.

    note: Being listed in the Creators field has no effect on item permissions. Permissions are affected by ownership not authorship.

    This FAQ applies to: Plone 2.5.x, Plone 2.1.x

    How do I stop Mac OS X from creating .DS_Store files on WebDAV upload?

    How do I stop Mac OS X from creating .DS_Store files on WebDAV upload?

    Open a Terminal and execute:

    $ defaults write com.apple.desktopservices DSDontWriteNetworkStores true
    

    This will turn off writing these files to all network volumes.

    More information on this subject can be seen here:

    http://docs.info.apple.com/article.html?artnum=301711

    As per the linked document, preventing Mac OS X from creating .DS_Store files can have adverse effects.

    How can I test which version of Plone I have running?

    In a product it is often useful, or even required, to do different things depending on which version of Plone the product is installed under. These simple methods will allow you to find out what version you are running, and test against that information.

    Use the 'portal_migration' tool.  It provides two methods that are particularly useful:

    • getInstanceVersion (returns a string with the instance version, like '2.5.4' or '3.0.2')

    • getInstanceVersionTuple (returns a tuple, like (2, 5, 4, 'final', 0)

    With this information you can write a simple test or set a variable for your code like so:

    from Products.CMFCore.utils import getToolByName
    def isPlone3OrBetter(self):
        migrationTool = getToolByName(self, 'portal_migration')
        return migrationTool.getInstanceVersionTuple[0] >= 3
    
    

    this can be used in an install script for a product to 'do the right thing' based on what version of plone is running.

    How do I stop acquisition?

    How can an object be queried for an attribute in such a way as to prevent acquisition.

    Sometimes, it's helpful to prevent acquisition from looking elsewhere for an attribute when it isn't found on the current object.  For example, consider the following:

    We have a person object, with an attribute 'job' and a template/view that lists a persons jobs along with other attributes.  We have an instance of this object named 'Joe'.  His job is 'Dog Catcher'.  Joe also has a daughter 'Emily', so we add a person object contained in 'Joe' to represent his child.

    Now, in viewing Emily, unless she has a job of her own, when we ask to see her job, acquisition will move upward and use the 'job' attribute from her father.  If she's following in her father's footsteps, that might not be such a bad thing, but what if she's only six and doesn't have a job yet?  We could make a new template for kids, but that's wasteful.  Instead, let's prevent acquisition from looking outside Emily for her job:

    <div tal:condition="here/aq_explicit/job|nothing" 
         tal:content="here/job" id="job listing">[A person's job]</div>
    That way, the div never appears if Emily has no job herself.  Problem solved.  Yay!

    What does the server setup for the plone.org website look like?

    What kind of hardware is running plone.org, and what versions of the software do you run?

    Specifications

    The new plone.org server is a Dell Poweredge 2950 with the following specifications:

    • 2x Intel Xeon 5440 2.83Ghz Quad-core CPUs

    • 16GB RAM

    • 2x 250GB RAID-1 Array for OS

    • 4x 250GB RAID-10 Array for Zope (mounted on /srv)

    • 10 Megabit Internet connection

    • FreeBSD 7.4 OS

    Operating System
    plone.org is running FreeBSD 7.4 OS.
    Python
    Running Python 2.6.5
    Zope
    2.12.14
    Plone
    Running Plone 4.0.3
    Products
    Everything from the  PloneOrg buildout.

    The Plone.org buildout contains the following new files:

    • bsd.cfg – Similar to new.cfg.  Extends buildout.cfg and includes FreeBSD-specific options. Also creates 8 Zope instances for Plone.org.
    • templates/nginx-production.conf.in – Nginx.conf configuration template which only adds the plone.org vhosts to the system-wide configuration.

    Varnish

    There is a system-wide varnish running on port 80 with the default configuration file. Varnish caches all content and fetches content from Nginx. 

    Nginx

    Nginx binds to localhost and takes care of virtual hosting and URL rewriting.  The configuration is located at /usr/local/etc/nginx.  Virtual hosts can be symlinked in /usr/local/etc/nginx/vhosts.

    Pound

    Pound configuration is located at /usr/local/etc/pound.cfg.

    Supervisor

    There is a system-wide supervisor installation with the configuration file located at /etc/supervisord.conf.

     
    Disks
    It has a two 250GB disk RAID-1 array for the operating system and four 250GB disk RAID-10 array for Zope.
    Memory
    16 GB total.
    Traffic
    During the month of May 2007, we had approx. 20 million hits.
    Bandwidth
    Our monthly bandwidth usage is about 200 GB.
    Stats
    Interested in the traffic statistics? Check out http://stats.plone.org/
    System administration
    plone.org is administered by the Plone infrastructure team.The Plone admins can be reached on the Plone Admins list. For more information please see the Plone.org Sysadmin Administrator's documentation.
     

    About plone.org's new theme

    In March 2009, plone.org was upgraded with a shiny new visual theme.  It's drawing rave reviews, and generating lots of questions.

    Who designed the new plone.org theme?

    The original design was done by Iain Claridge of Netsight.  Alexander Limi and other Plone community members did lots of additional tweaking as the site went from Photoshop comp to production.

    Can I download the theme for use on my site?

    Short answer: no. 

    Long answer: While all of the code behind the theme is freely available, it's not currently packaged up as an easily installable standard Plone theme. 

    Why isn't new plone.org theme available standard Plone theme product?

    The new plone.org theme is (among other things), one of our first demanding high-volume tests of collective.xdv, a revolutionary new approach to Plone theming that will likely ship as part of Plone 4. It provides a vastly simpler approach to theming Plone (and other web apps!), but it's still "in the lab" and is not yet an officially-supported approach to theming.  All in good time!