Skip to main content

Dropdown menus for global navigation in Plone

Project description



You will get the dropdown menus for those items in global navigation that have the subitems. Submenus are built based on the same policy as the Site Map, so it will show the same tree as you would get in the Site Map or navigation portlet being in appropriate section.

How it works

Dropdown menus are build based on the same policy as the Site Map, so it will show the same tree as you would get in the Site Map or navigation portlet being in appropriate section. This means - no private objects for anonymouses; no objects, excluded from the navigation - exactly the same behavior you would expect from Site Map or navigation portlet.

How to get it

  • either get the python package from this page and do manual work

  • or just add webcouturier.dropdownmenu to your buildout and that’s it. buildout will get it for you from PyPi.

If you are not familiar with managing python packages, please read Packages, products and eggs page of the excellent tutorial by Martin Aspeli.


Simply activate Dropdown menus profile in Site Setup/Add-ons.


  • While disabling clicking the links with children, I want the links in the global navigation bar to be clickable nevertheless.

    What you need is to customize the browser/dropdown.js file like the following:

    jQuery(function ($) {
        $('#portal-globalnav ul .noClick').click(function (e) {

    Note that we have added ul in the jQuery selector. This will stop clickability of the links in the dropdowns only, but not the section’s link in the global navigation bar itself.


Thanks to Wichert Akkerman (Simplon) for the help with original version of the package.


Twitter · Google+


Global python environment

easy_install webcouturier.dropdownmenu

Find out how to install setuptools (and EasyInstall) here:


  • Add webcouturier.dropdownmenu to the list of eggs to install, e.g.

    eggs =
  • Tell the plone.recipe.zope2instance recipe to install a ZCML slug

    recipe = plone.recipe.zope2instance
    zcml =
  • Re-run buildout, e.g. with:

    $ ./bin/buildout

You can skip the ZCML slug if you are going to explicitly include the package from another package’s configure.zcml file.

Your package’s dependency

If you want to automatically install webcouturier.dropdownmenu when installing your own package, do the following.

  • Add webcouturier.dropdownmenu as a dependency for your package. Add the dependency to your package’s’s install_requires array

      install_requires = [

This will automatically download the latest version of the package.

  • In your package’s profiles/default/metadata.xml, within <dependencies></dependencies> block add

  • Re-build your buildout and re-start the instance. Now, you should get webcouturier.dropdownmenu package installed the same very moment you are installing your own package.


(name of developer listed in brackets)

webcouturier.dropdownmenu 2.2 (August 17, 2011)

webcouturier.dropdownmenu 2.1 (2010-09-23)

  • Add z3c.autoinclude entry point so ZCML is loaded automatically in Plone. [davisagli]

  • Fix icons for compatibility with Plone 4. [matthal]

  • Added support for i18n [macagua]

  • Added Spanish translation [macagua]

webcouturier.dropdownmenu 2.0

  • Updated README.txt with the whole bunch of information that users need about the package. [spliter]

  • Icon for the package’s configlet link. [spliter]

  • Added configlet for managing dropdown settings rom Plone Control panel. [spliter]

  • Added caching feature for output xhtml. [spliter]

  • Fixed an IE Javascript error when dropdown.js was loaded on templates without a #portal-globalnav. [davisagli]

webcouturier.dropdownmenu 1.1.5

  • Made the package work in both Plone 3.0.x and Plone 3.1 [spliter]

  • Got rid of buggy default skin’s resetting in package’s profile [spliter]

  • Look for ‘path’ in the global tabs data, if it’s available then it’s used to get the object instead of trying to reconstruct it from the url which fails in many cases. [fschulze]

  • Got rid of hardcoded version of plone.browserlayer. It’s up to users now to decide what version of plone.browserlayer to use. [spliter]

webcouturier.dropdownmenu 1.1.4

  • Fixed the bug when you have could get the error in case your navigation root differs from site root. In this case you could get “‘NoneType’ object has no attribute ‘endswith’” error [spliter]

webcouturier.dropdownmenu 1.1.3

  • Switched the package from using browser resource for the main stylesheet. It’s now in skins/ to follow main theme’s colors better [spliter]

  • Added a workaround for objects that contain spaces in their ID’s [spliter]

  • Fixed the problem with images in the site’s root [spliter]

  • Only override the depth for navtree queries for the dropdown menus. The override for the path was a nop for the common case but would break for sites with a different navigation root. [wichert]

  • Call constructor for base class in our DropdownMenuViewlet class. This removes some boilerplate code and makes sure everything is initialised properly. [wichert]

webcouturier.dropdownmenu 1.1

  • Dropdownmenu uses it’s own builder now (instead of sharing the same one with site map). Implemented new property dropdownDepth to contain depth property for dropdown menu separately from sitemapDepth. [spliter]

  • Fixed the problem with installation in Plone 3.0.2 because of relations with webstats.js file [spliter]

webcouturier.dropdownmenu 1.0

  • Initial release. Tested in all modern browsers, incl. Safari, IE6, IE7 and so on. [spliter]

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution (48.6 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page