Grok Community Documentation version 1.2

Customizing your MyDolmen site

Author:Vincent Fretin
Contributors:Aroldo Souza-Leite
Version:unknown

You will customize your Dolmen application in the following parts of this tutorial.

Creating your own Dolmen site

In src/mydolmen/app.py module (remove all existing code), implement a Dolmen site by inheriting from the Dolmen class:

from dolmen.app.site import Dolmen

class MySite(Dolmen):
    title = u"My project site"

But MySite will have a default factory and so will appear in the Add menu. To disable the auto creation of the factory, change it like this:

from dolmen.app.site import Dolmen
from dolmen import content

class MySite(Dolmen):
    content.nofactory()
    title = u"My project site"

For now, you only have the admin:admin account.

You can add a PAU to your application:

from dolmen.app.site import Dolmen
from dolmen import content
from dolmen.app.authentication import initialize_pau
from zope.authentication.interfaces import IAuthentication
from zope.pluggableauth import PluggableAuthentication as PAU
import grok

class MySite(Dolmen):
    content.nofactory()
    title = u"My project site"
    grok.local_utility(PAU, IAuthentication, setup=initialize_pau, public=True, name_in_container="users")

And you need menhir.contenttype.user to create a user directory and create users.

Add to configure.zcml:

<include package="dolmen.app.authentication" />
<include package="menhir.contenttype.user" />

Add to setup.py:

'zope.authentication',
'zope.pluggableauth',
'dolmen.app.authentication',
'menhir.contenttype.user',

You have to recreate your application. You can now create a user directory (users) and create some users.

For the user, you can download the original image, with the namespace traverser download and the field name portrait:

http://localhost:8080/demo/users/vincentfretin/++download++portrait

Anywhere in the portal, you can access to an avatar, a square image:

http://localhost:8080/demo/++avatar++vincentfretin

It’s useful to develop a commenting system, like menhir.simple.comments.

Adding content types

We’ll add an Image content type.

Add to setup.py:

menhir.contenttype.image

Add to configure.zcml:

<include package="menhir.contenttype.image" />

Run the buildout. Restart the site. You can now add images.

Creating content types

Creating a folder and a content:

from dolmen.file import ImageField
from dolmen.blob import BlobProperty
from zope import schema
from zope.container.constraints import contains
from zope.interface import Interface

class IArtBook(Interface):
    contains(".IPicture")

class ArtBook(content.Container):
    grok.implements(IArtBook)
    content.name(u"My documents")
    content.require("dolmen.content.Add")

class IPicture(content.IBaseContent):
    description = schema.Text(title=u"Description")
    image = ImageField(title=u"Image")

class Picture(content.Content):
    content.schema(IPicture)
    content.name(u'My document')
    content.require("dolmen.content.Add")
    image = BlobProperty(IPicture['image'])

We inherit from content.IBaseContent which contains the title. We define explicitly a BlobProperty for the image here. The content.schema directive will do the grok.implements too.

ArtBook container can contain only Picture objects. Picture can be added everywhere.

Add to configure.zcml:

<include package="dolmen.blob" />

and in your setup.py:

dolmen.blob
dolmen.file
zope.container
zope.interface
zope.schema

For the image, you have access to thumbnails like this:

Changing the view of a content type

To change the view for a content type:

from dolmen.app.layout import models

class PictureView(models.Index):
    grok.context(IPicture)

    def render(self):
        return "hello"

Include the type Image only in a IArtBook folder

Example:

from menhir.contenttype.image import IImage, Image
from zope.container.constraints import contains, containers
from zope.interface import Interface, classImplements


class IArtBook(content.IBaseContent):
    contains(".IPicture", IImage)

class IImageConstraints(Interface):
    containers(IArtBook)

classImplements(Image, IImageConstraints)

Include slimbox preview for an image

Code:

from megrok.resource import component_includes
from menhir.contenttype.user import UserView
from menhir.contenttype.image import ImagePopup
component_includes(UserView, ImagePopup)

It is already done in the menhir.skin.snappy theme, but not in the menhir.skin.lightblue theme.

Other functionalities

If buildout says that a package was not found, it’s probably the package doesn’t have a release yet. You normally add it to auto-checkout in sources.cfg to fix that.

There are some packages you can add to your buildout to add functionalities to your application. Simply add the package to setup.py and configure.zcml:

Functionalities:

  • dolmen.app.breadcrumbs: breadcrumbs
  • dolmen.app.search: search box
  • dolmen.app.viewselector: add a view menu
  • menhir.simple.livesearch: add a livesearch to the searchbox
  • menhir.simple.navtree

Functionalities in development, may be buggy:

  • dolmen.app.clipboard: add cut, copy, paste functionalities
  • dolmen.app.metadatas: metadata tab on simple content type to edit dublin core metadata.

Content types:

  • menhir.contenttype.document
  • menhir.contenttype.file
  • menhir.contenttype.folder
  • menhir.contenttype.rstdocument
  • menhir.contenttype.image
  • menhir.contenttype.photoalbum

And other packages used in snappy demo:

  • menhir.simple.tag
  • snappy.*

You have the full list at http://gitweb.dolmen-project.org/?o=project