[Zope] Customize the ZMI

J Cameron Cooper jccooper@jcameroncooper.com
Tue, 04 Mar 2003 15:21:17 -0600


> For the general public we are using CMF. For myself and one or two 
> other developers some work within the ZMI will be required. I would 
> like to be able to make some enhancements for the way that we work and 
> code. Is there any documentation on what dtml files control which part 
> of the ZMI and where those files reside on the filesystem? 

It's easy to figure out for yourself: look at the url some page is 
under, and what type of object it is being called on. The end of the URL 
is a method of the Zope object (possibly acquired, probably not in the 
ZMI.)  Look in the zope source for that type of object for that method. 
Many of the built-in products live in lib/python/OFS. That method will 
probably be an instance of a DTML method or something similar, and that 
will tell you where the source for that object is (usually under a dtml 
subdirectory.)

Say you want to find the frameset of the ZMI. This is 'manage', as you 
can see in your browser. This is called on the root, which is a Folder. 
Find the folder class, which is in lib/python/OFS/Folder.py module.

But this has no 'manage' method, so it must be in a super-class. Check 
ObjectManager, in ObjectManager.py. We find there a 'manage_main' which 
says it is in 'dml/main' and also a 'manage_index_main', but no 'manage' 
just yet. At this point, you could guess and take a look at 
lib/python/OFS/dtml/main.dtml (the suffix is appened before lookup) to 
see if this is it (it isn't). We'll have to look some more.

So where is 'manage'? Perhaps one of the other superclasses of 
ObjectManager? Take a look through App.Management.Navigation (in 
lib/python/App/Management.py) and go to the Navigation class. There it 
is: 'manage' is a DTMLFile in 'dtml/manage', meaning 
'lib/python/App/Management/dtml/manage.dtml'. The same class also 
defines an awful lot of the rest of the ZMI.

The shortcut is to find some probably-unique text and do a search of 
file contents in your zope install. A simple

grep -r frameset *

will also get you the same file, and a lot faster. But you won't 
understand why half so well.

          --jcc