Skip to content

fabiorizzo.com - PZP Rocks!!!

Sections
Personal tools
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.

Módulo Install.py

Instalando o produto.


O módulo Install.py se localiza dentro da pasta Extensions do nosso produto. Dentro deste módulo há um método externo chamado de install, que será chamado quando instalamos o produto em um portal Plone. Este é o método que possui o script de instalação do produto. É neste método externo que colocaremos rotinas tais como:

  • Instalar nossos tipos na portal_types tool
  • criação de vocabulário dinâmicos com o ATVocabularyManage;
  • Verificar e instalar, se for o caso, os produtos dos quais o nosso produto depende;

Outro método externo que existe neste módulo é o uninstall que é responsável por desistalar todas as configurações realizadas no install.

import os.path
import sys
from StringIO import StringIO
from sets import Set
from App.Common import package_home
from Products.CMFCore.utils import getToolByName
from Products.CMFCore.utils import manage_addTool
from Products.ExternalMethod.ExternalMethod import ExternalMethod
from zExceptions import NotFound, BadRequest

from Products.Archetypes.Extensions.utils import installTypes
from Products.Archetypes.Extensions.utils import install_subskin
from Products.Archetypes.config import TOOL_NAME as ARCHETYPETOOLNAME
from Products.Archetypes.atapi import listTypes
try:

#CMFDynamicViewFTI é um produto para visualizações dinâmicas no Plone.
#Este produto adiciona um nova classe FTI (informação de fabricação de tipo).
#A FTI contém duas novas propriedades: defualt_view e suppl_views.
#Com isto o usuário poderá visualizar um contéudo de formas diferentes.
    from Products.CMFDynamicViewFTI.migrate import migrateFTIs
except:
    HAS_DYNAMIC_VIEW_FTI = True
else:
    HAS_DYNAMIC_VIEW_FTI = False


from Products.LocadoraVeiculos.config import PROJECTNAME
from Products.LocadoraVeiculos.config import product_globals as GLOBALS

def install(self):
    """ Método externo para instalação da Locadora de Veículos """
    out = StringIO()
    print >> out, "Installation log of %s:" % PROJECTNAME

  # Se o 'config.py' possui uma lista de dependências, o código abaixo

# tenta instalá-los. DEPENDENCIES é importado de config.py.

    try:
        from Products.LocadoraVeiculos.config import DEPENDENCIES
    except:
        DEPENDENCIES = []
    portal = getToolByName(self,'portal_url').getPortalObject()
    quickinstaller = portal.portal_quickinstaller
    for dependency in DEPENDENCIES:
        print >> out, "Installing dependency %s:" % dependency
        quickinstaller.installProduct(dependency)
        get_transaction().commit(1)

classes = listTypes(PROJECTNAME)
    installTypes(self, out,
                 classes,
                 PROJECTNAME)
    install_subskin(self, out, GLOBALS)

# O método migrateFTIs converte um simples FTI para um

# DynamicViewFTI

    if HAS_DYNAMIC_VIEW_FTI:
        migrated = migrateFTIs(self, product=PROJECTNAME, fti_meta_type='Locadora')
        print >>out, "Switched to DynamicViewFTI: %s" % ', '.join(migrated)       


              
    # Criando um vocabulário em portal_vocabularies

     atvm = getToolByName(self, ATVOCABULARYTOOL)

     vocabs = {}

     vocabs['tipos_de_carro'] = (
            ('passeio', u'Passeio'),
            ('carga', u'Cargo'),
            ('transporte', u'Transporte'),
        )

     for vkey in vocabs.keys():
            # cria um vocabulário caso não exista:
            vocabname = vkey
            if not hasattr(atvm, vocabname):
                # print >>out, "adding vocabulary %s" % vocabname
                atvm.invokeFactory('SimpleVocabulary', vocabname)
            vocab = atvm[vocabname]
            for (ikey, value) in vocabs [vkey]:
                if not hasattr(vocab, ikey):
                    vocab.invokeFactory('SimpleVocabularyTerm', ikey)
                    vocab[ikey].setTitle(value)

# Tenta instalar o método de instalação do workflow

    # dentro de 'InstallWorkflows.py', método 'installWorkflows'
    try:
        installWorkflows = ExternalMethod('temp',
                                          'temp',
                                          PROJECTNAME+'.InstallWorkflows',
                                          'installWorkflows').__of__(self)
    except NotFound:
        installWorkflows = None

if installWorkflows:
        print >>out,'Workflow Install:'
        res = installWorkflows(self,out)
        print >>out,res or 'no output'
    else:
        print >>out,'no workflow install'

# abilita portal_factory para os tipos informado

    factory_tool = getToolByName(self,'portal_factory')
    factory_types=[
        "Locadora",
        "Carro",
        "Aluguel",
        "Cliente",
        "ClienteEspecial",
        ] + factory_tool.getFactoryTypes().keys()
    factory_tool.manage_setPortalFactoryTypes(listOfTypeIds=factory_types)

if install:
        print >>out,'Custom Install:'
        res = install(self)
        if res:
            print >>out,res
        else:
            print >>out,'no output'
    else:
        print >>out,'no custom install'
    return out.getvalue()

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: