Creating content with genericsetupΒΆ
The usecase: I wanted to populate a folder with some 300 links and I wanted to do it using genericsetup. It is a custom ATFolder subclass with ATLink subclasses in there. The links can be searched using categories, using full-text search and by first letter of the title. That's why we're calling it an AzLinkFolder: a..z.
Basic content creation
I wanted to try out genericsetup, which has a handy way of adding content to your site. In your products, add a profiles/default/structure folder and place your content in there. If it is a folder, add the folder and in a file called .objects, tell what type you want it to be:
azlinks,AzLinkFolder
That's pretty simple. Add the same type of lines for other content you're creating. OK, now to the link folder contents. That are links which have an id, a title and a remote url that they're pointing to. Now that's a problem. With core genericsetup, you can add links OK. Add them to a .objects with link001,AzLink and so; add folders named link001 and so and put a file .properties in there with something like this in there:
[DEFAULT] description = title = Philips Research Europe
I tried putting externalUrl in there, but no avail. Alec Mitchell helped me by saying it wasn't currently possible and he gave me an alternative solution that did work.
Solution: steps I had to take
The core solution is to use so-called rfc822 marshalling. For that to work with genericsetup, you need to tag your contenttype with IDAVAware. So in my AzLinks.py:
....
from zope import interface
from Products.GenericSetup.interfaces import IDAVAware
....
class AzLink(....):
interface.implements(IDAVAware)
....
From that moment on, your contenttype doesn't listen to the normal .properties file format anymore. You need a file formatted like the following:
id: link200 title: Research International (corporate) on pww Content-Type: text/plain http://pww.research.philips.com/corporate/index.html
Note the content-type line and the empty line below it: the actual URL is apparently the main content of an ATLink. To discover how to format your files, just append manage_FTPget, so ..../azlinks/link300/manage_FTPget. That gives you all the info you need.
I had to create some 300 files like this (generated from a comma separated file, I'm not typing all that in by hand!). Inside the profiles/default/structure/azlinks/ folder where I placed them there was one more thing to do: add a .objects file (of course):
... link318,AzLink link319,AzLink link320,AzLink ...
That's it!