ZCML File
configure.zcml

<configure
    xmlns="http://namespaces.zope.org/zope"
    xmlns:browser="http://namespaces.zope.org/browser"
    i18n_domain="zope"
    >
<interface
    interface=".interfaces.IDTMLPage"
    type="zope.app.content.interfaces.IContentType"
    />
<class
    class=".dtmlpage.DTMLPage"
    >
<factory
    id="zope.app.DTMLPage"
    title="DTML Page"
    description="A simple, content-based DTML page"
    />
<require
    permission="zope.View"
    attributes="__call__"
    />
<require
    permission="zope.ManageContent"
    set_attributes="source"
    interface=".interfaces.IDTMLPage"
    />
<require
    permission="zope.View"
    interface=".interfaces.IRenderDTMLPage"
    />
</class>
<adapter
    factory=".dtmlpage.DTMLFactory"
    provides="zope.filerepresentation.interfaces.IFileFactory"
    for="zope.app.folder.interfaces.IFolder"
    permission="zope.ManageContent"
    name=".dtml"
    />
<browser:page
    class=".browser.DTMLPageEval"
    for=".interfaces.IDTMLPage"
    permission="zope.View"
    name="index.html"
    attribute="index"
    />
<browser:editform
    name="edit.html"
    schema=".interfaces.IDTMLPage"
    permission="zope.ManageContent"
    label="Edit a DTML page"
    menu="zmi_views"
    />
<browser:icon
    name="zmi_icon"
    for=".interfaces.IDTMLPage"
    file="dtml.gif"
    />
<browser:addform
    name="zope.app.dtmlpage.DTMLPage"
    schema=".interfaces.IDTMLPage"
    permission="zope.ManageContent"
    label="Add a DTML Page"
    content_factory=".dtmlpage.DTMLPage"
    />
<browser:addMenuItem
    title="DTML Page"
    description="A simple, content-based DTML page"
    permission="zope.ManageContent"
    class=".dtmlpage.DTMLPage"
    view="zope.app.dtmlpage.DTMLPage"
    />
<configure
    package="zope.app.preview"
    >
<browser:page
    for="zope.app.dtmlpage.interfaces.IDTMLPage"
    permission="zope.ManageContent"
    name="preview.html"
    template="preview.pt"
    menu="zmi_views"
    title="Preview"
    />
</configure>
</configure>