Skip to content

fabiorizzo.com - PZP Rocks!!!

Sections
Personal tools
You are here: Home Cursos Online Tutorial - Criando um produto para Plone usando Archetypes Analisando o módulo Locadora.py
Document Actions

Tutorial - Criando um produto para Plone usando Archetypes

Este tutorial irá lhe ensinar como criar novos tipos de conteúdo para o Plone seguindo o exemplo de uma locadora de veículos.

Analisando o módulo Locadora.py

Locadora.py


A classe locadora nada mais é do que uma subclasse da classe BaseFolder. É um tipo folderish que armazenará objetos do tipo cliente, clienteespecial, aluguel e carro.

A partir do Plone 2.1 podemos definir diferentes views para um tipo. O termo utilizado é Dynamic views.  Para isto precisamos informar quais são as diferentes views (suppl_views e default_view) que estarão disponíveis quando o tipo for instalado. Dynamic views permite o usuário selecionar diferentes layouts  para cada tipo. Para permitir este dinamismo foi definido uma classe chamada CMFDynamicViewFTI, que é uma extensão do CMF FTI(Facotory Type Information). Se olharmos na portal_types veremos vários tipos com ícones azuis e outros com ícones amarelos. Os amarelos utilizam CMFDynamicFTI.

Outro conceito novo que aparece no Plone 2.1 é o  aliases. Aliases trabalha junto com as actions. No Plone 2.0, customizar a action view significava criar uma  pagetemplate de visualização para um determinado tipo. Métodos aliases e actions permitem um padronização das URLs. Métodos aliases mapeiam um action para uma pagetemplate. Enfim, podemos editar objetos de diferentes tipos utilizando URLs padronizadas: path/object/edit.


from AccessControl import ClassSecurityInfo
from Products.Archetypes.atapi import *
from Products.LocadoraVeiculos.config import *
from Products.LocadoraVeiculos.validators import *

schema = Schema((
    StringField(
        name='CNPJ',
        widget=StringWidget(
            label='Cnpj',
            label_msgid='LocadoraVeiculos_label_CNPJ',
            i18n_domain='LocadoraVeiculos',
        ),
        validators=('isCNPJ',)
    ),

    TextField(
        name='endereco',
        widget=TextAreaWidget(
            rows="4",
            cols="50",
            label="Endereço",
            label_msgid='LocadoraVeiculos_label_endereco',
            i18n_domain='LocadoraVeiculos',
        )
    ),
),
)

Locadora_schema = BaseFolderSchema.copy() +  schema.copy()

class Locadora(BaseFolder):
    security = ClassSecurityInfo()
    __implements__ = (getattr(BaseFolder,'__implements__',()),)

    archetype_name = 'locadora de veí­culos'

    meta_type = portal_type = 'Locadora'

    # Por ser um tipo de pasta, a classe locadora
# pode contem outros objetos.
    # A diferença que é que há um filtro de tipos que ela
# pode conter
    allowed_content_types = ['Carro', 'Cliente', 'Aluguel', \
'ClienteEspecial']
    filter_content_types = 1

    # Esta propriedade informa que a classe locadora irá aparecer
# na caixa de adcionação de itens

    global_allow = 1

    immediate_view = 'locadora_view'

    #Dynamic Views
    default_view = 'locadora_view'
    suppl_views = ('resumo_locadora_view',’outra_pagetemplate_view’)

    typeDescription = "Locadora de Veículos"
    typeDescMsgId = 'description_edit_locadora'

    # Além das abas comuns de um folder, queremos que apareçam mais
    # outras duas abas: Carros e Clientes.
    # Para fazer isto devemos criar uma propriedade action conforme
    # código abaixo.
    actions =  (
       {'action': "string:${object_url}/carros_view",
        'category': "object",
        'id': 'carros_view',
        'name': 'Carros',
        'permissions': ("View",),
        'condition': 'python:1'
       },
       {'action': "string:${object_url}/clientes_view",
        'category': "object",
        'id': 'clientes_view',
        'name': 'Clientes',
        'permissions': ("View",),
        'condition': 'python:1'
       },
    )

    _at_rename_after_creation = True

    schema = Locadora_schema

    aliases = {          
'(Default)'  : '(dynamic view)',
           'view'       : 'locadora_view',
           'index.html' : '(dynamic view)',
           'edit'       : 'atct_edit',
           'sharing'    : 'folder_localrole_form',
           'gethtml'    : '',
           'mkdir'      : ''
    }


registerType(Locadora,PROJECTNAME)
by Alessandro de Souza Mendes last modified 03/05/2006 14:47




 
 

Powered by Plone CMS, the Open Source Content Management System

This site conforms to the following standards: