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 Cliente.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 Cliente.py

Cliente.py


A classe cliente, por ser um tipo simples, é subclasse da classe BaseContent. Com isto ela herda todas as definições desta classe.

Primeiro precisamos definir nosso schema. Nós copiamos o schema da classe BaseContent que é a BaseSchema. Fazer uma cópia é importante, pois sem isto, se nós alterarmos o schema, estaremos modificando o schema de todos os tipos que utilizam o mesmo schema.  Depois do schema definido iremos criar a classe cliente com os seus método próprios.

O Plone 2.1+, por default, oculta o id(nome curto) dos tipos. Para que o id seja gerado com base no título a única coisa que devemos fazer é definir a propriedade _at_rename_after_creation como True.


#Importa class responsável por conter informações de segurança
#Um objeto ClassSecurityInfo deve ser instanciado dentro de cada
#classe que irá interagir com o framework de segurança do Zope.

from AccessControl import ClassSecurityInfo

#Importa todas as definições pública do archetypes
#Exemplo: BaseContent, BaseFolder, BaseSchema, registerType
from Products.Archetypes.atapi import *

#Importa todas as configurações do produto
from Products.LocadoraVeiculos.config import *

# Importa validadores
from Products.LocadoraVeiculos.validators import *

#Definindo schema

schema = Schema((
    StringField(
        name='title',
        widget=StringWidget(
            label="Nome",
            label_msgid='LocadoraVeiculos_label_title',
            i18n_domain='LocadoraVeiculos',
        ),
        use_portal_factory="True"
    ),

    StringField(
        name='CPF',
        widget=StringWidget(
            label='Cpf',
            label_msgid='LocadoraVeiculos_label_CPF',
            i18n_domain='LocadoraVeiculos',
      ),
        required=True,
        validators=('isCPF',)
    ),

    StringField(
        name='contato',
        widget=StringWidget(
          label='Contato',
            label_msgid='LocadoraVeiculos_label_contato',
            i18n_domain='LocadoraVeiculos',
        )    ),

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

# Definição do schema da class clients
# BaseSchema é um schema padrão definido pelo archetypes
# que possui os campos id e #title
# O motivo pelo qual fazemos uma cópia do BaseSchema
# é para que nos permita alterar a cópia sem alterar,
# por exemplo, mudar o label do campo title para nome #
# sem alterar para todos os tipos do portal.
# Cliente_schema[‘title’].widget.label = ‘Nome do cliente’

Cliente_schema = BaseSchema.copy() + schema.copy()

class Cliente(BaseContent):
    #intância da ClassSecurityInfo responsável por guardar
#informações de segurança da classe
    security = ClassSecurityInfo()

    #Define quais interfaces a classe cliente implementa
    __implements__ = (getattr(BaseContent,'__implements__',()),)

    # Este nome aparece na caixa de adicionar itens
    archetype_name = 'cliente'

    meta_type = portal_type = 'Cliente'

    # Define se o tipo será listado na caixa de adicionar tipos
    # Um cliente só poderar se instanciado dentro de uma
# instância da classe locadora

    global_allow = 0

    # Define se o usuário pode ou não adicionar comentário ao
# cliente

    allow_discussion = False

    # PageTemplate que será chamado logo após a criação do
# cliente  

immediate_view = 'base_view'

    # Descrição da classe cliente
    typeDescription = "cliente"

    # Id da descrição da classe que é usado para tradução (i18n)
    typeDescMsgId = 'description_edit_cliente'

# Exemplo de méto público. Pode ser acessado por todos.
    security.declarePublic(‘metodoPublico’)   
    def metodoPubico(self):
        pass

# Exemplo de método privado. Pode ser acessado somente pela
# classe

    security.declarePrivate(‘metodoPrivado’)   
    def metodoPrivado(self):
        pass

# Exemplo de método protegido. Pode ser acessado por qualquer
# um que possua a permissão View

    security.declareProtected(‘View’,’metodoProtegido’)   
    def metodoProtegido(self):
        pass

    # Este atributo,  for verdadeiro, faz com que o Zope gere o
    # id(nome  curso do cliente a partir do título(nome)

    _at_rename_after_creation = True

    schema = Cliente_schema


# registerType é um método especial global que registra e aplica
# as declarações de segurança para a classe, recuperando as
# informações do objeto ClassSecurityInfo contido
# pela classe cliente.
# Registrar o tipo com Archetypes


registerType(Cliente,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: