Strumenti personali
Azioni sul documento

Creazione di un content type

Aggiungere content e schemata al progetto
ZopeSkel e Paster forniscono un sistema di comandi interattivi e template per velocizzare lo sviluppo di prodotti Plone. Vediamo come creare un content type custom per Plone3.
Pagina 4 di 7.

Aggiunta di un nuovo content type

Dopo avere creato lo scheletro del nuovo progetto, ci spostiamo nella cartella appena creata:

cd myplone3instance/src/ploneit.simpleproject

Da qui possiamo richiamare ulteriori comandi (paster local commands), disponibili nel contesto del template appena creato. In questo caso ci troviamo all'interno di un template archetype e possiamo aggiungere un content type:

paster addcontent contenttype
Enter contenttype_name (Content type name ) ['Example Type']: simplecontent 
Enter contenttype_description ['Description of the Example Type']: Ploneit simple content type
Enter folderish (True/False: Content type is Folderish ) [False]: 
Enter global_allow (True/False: Globally addable ) [True]: 
Enter allow_discussion (True/False: Allow discussion ) [False]: 

Generazione degli schemata

Passiamo alla creazione dei campi personalizzati con atschema:

paster addcontent atschema

Qui possiamo definire i nomi e le descrizioni dei campi, i tipi di field e di widget, il dominio i18n e altri parametri (es: default, required).

Enter welcome (
Welcome to the handy AT Schema maker, we hope you like it! 
Crtain things are implied: i.e. Field Type should be String, 
not StringField.  We do the work for you!) ['True']: 

Enter content_class_filename (
What is the module (file)name of your content class? (.py is implied)
) ['exampletype']: simplecontent

Enter field_type (
What kind of field should I make for you?
) ['String']:    

Enter field_name (
What would you like to name this field?
) ['field']: simple_field

Enter widget_type (
What kind of widget do you want to use?
) ['String']:    

Enter field_label (
What should be the label of this field (title)?
) ['New Field']: Simple Field

Enter field_desc (
What should be the description of this field (help text)?
) ['Field description']: A simple custom string field

Enter i18n_domain (
What is the product name/i18n domain?
) ['myProduct']: simpleproduct

Enter required (
Is this field required?
) ['False']: True

Enter default (
If you'd like a default type it here, otherwise leave it blank
) ['']: 

.. che all'interno di ploneit.simpleproject/ploneit/simpleproject/content/simplecontent.py apparirà come:

    atapi.StringField(
        name='simple_field',
        widget=atapi.StringWidget(
            label="Simple Field",
            label_msgid='simplecontent_label_simple_field',
            description="A simple custom string field",
            description_msgid='simplecontent_help_simple_field",
            i18n_domain='simplecontent',
        ),
        required="True",
    ),

Ripetere per ogni field/widget da inserire.

Comandi locali di paster

Paster viene definito un comando "a due livelli", dove il secondo livello (es, paster help, paster create, etc) è pluggable e dipende dall'egg e dall'entry point  in cui ci si trova.

Nel nostro caso abbiamo a disposizione anzitutto i comandi generici di paster, poi quelli specifici del template e utilizzabili a partire da determinate posizioni all'interno del progetto (local commands).

cd myplone3instance/src/ploneit.simpleproject
paster --help

ZopeSkel local commands:
 addcontent   Adds plone content types to your project
paster addcontent -l

Available templates:
 atschema:     A handy AT schema builder
 contenttype:  A content type skeleton
 portlet:      A Plone 3 portlet
 view:         A browser view skeleton
 zcmlmeta:     A ZCML meta directive skeleton