This Product adds a ClickableBanner ZClass, basically a Renderable with properties for URL, and a Banner Folder ZClass.
The BannerFolder object can contain Banners and DTML Methods. It will randomly choose and render one of them. If the chosen object has a "remaining_views" property, it will only be displayed if it is different from 0. It will also decrement "remaining_views" if >0 and increment "views", so you can know how many times it has been viewed.
The folder itself is Renderable too, so all you have to do to get a banner is <dtml-var my_banner_folder>. This is why the default ID for BannerFolders is "banner" (so that you type <dtml-var banner>).
Some parts of the Product are still ugly hacks and workarounds in this version, so beware.
For example, if it doesn't find a suitable subobject (it's empty, or all objects are Banners with 0 remaining_views) it will get into an infinite loop - so always keep at least one Banner with -1 remaining_views, or a DTML Method inside all your BannerFolders.
Depends on PythonMethod and Renderable Zclass.