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 módulo Carro.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 módulo Carro.py

Aqui veremos como utilizar o ATVocabularyManager.
A classe carro também é subclasse da classe BaseContent. Ele proticamente estende a classe BaseContent com novos campos.

Neste módulo quero destacar a utilização do ATVocabularyManager.

Quando criamos um campo podemos definir o seu domínio utilizando vocabulários. Um exemplo disto pode ser observado no schema da classe carro. O campo cor só poderá receber os valores vermelho, amarelo e azul.
Observe que o campo cor é do tipo string e seu widget foi alterado para SelectionWidget. Este widget renderiza uma lista de opções com base no que está definido em vocabulary. Este recurso é muito legal, mas quando nos deparamos com vocabulários dinâmicos temos alguns problemas de manutenção.

ATVocabularyManager é uma portal tool para o gerenciamento de vocabulários de forma dinâmica. É um produto baseado em Archetypes para ser usado dentro dos campos. 
Para usar o vocabulário gerenciado basta adicionar o termo vocabulary = NamedVocabulary("myvocabulary") para os campos de seu schema, importar NamerVocabulary do produto e criar seu vocabulário na portal_vocabularies tool (disponível através da Configuração do Plone).
Você pode criar o vocabulário quando o produto é instalado no site. Veremos como fazer isto mais adiante.

O schema da classe carro é o seguinte:
#Importando NamedVocabulary
from Products.ATVocabularyManager.namedvocabulary \
import NamedVocabulary

schema = Schema((
    IntegerField(
        name='ano',
        widget=IntegerWidget(
            label='Ano',
            label_msgid='LocadoraVeiculos_label_ano',
            i18n_domain='LocadoraVeiculos',
        ),
        required=1
    ),

    IntegerField(
        name='codigo',
        widget=IntegerWidget(
            label='Codigo',
            label_msgid='LocadoraVeiculos_label_codigo',
            i18n_domain='LocadoraVeiculos',
        ),
        required=1
    ),

    StringField(
        name='modelo',
        widget=StringWidget(
            label='Modelo',
            label_msgid='LocadoraVeiculos_label_modelo',
            i18n_domain='LocadoraVeiculos',
        ),
        required=1
    ),

    IntegerField(
        name='quilometragem',
        widget=IntegerWidget(
            label='Quilometragem',
            label_msgid='LocadoraVeiculos_label_quilometragem',
            i18n_domain='LocadoraVeiculos',
        )
    ),

    StringField(
        name='tipo',
        widget=SelectionWidget(
            label='Tipo',
            label_msgid='LocadoraVeiculos_label_tipo',
            i18n_domain='LocadoraVeiculos',
        ),
        enforceVocabulary=1,
        vocabulary=NamedVocabulary("""tipos_de_carros""")
    ),

    FloatField(
        name='valorDiaria',
        widget=DecimalWidget(
            label='Valordiaria',
            label_msgid='LocadoraVeiculos_label_valorDiaria',
            i18n_domain='LocadoraVeiculos',
        )
    ),

    BooleanField(
        name='disponibilidade',
        default="True",
        widget=BooleanWidget(
            visible={'edit':'hidden', 'view':'visible'},
            label='Disponibilidade',
            label_msgid='LocadoraVeiculos_label_disponibilidade',
            i18n_domain='LocadoraVeiculos',
        )
    ),

    StringField(
        name='cor',
        widget=SelectionWidget(
            label='Cor',
            label_msgid='LocadoraVeiculos_label_cor',
            i18n_domain='LocadoraVeiculos',
        ),
        enforceVocabulary=1,
        vocabulary=('Red','Blue','Yellow')
    ),

),
)
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: