Opa Gustavo,

> Estou montando um script para adicionar conteúdo (migrando um site xoops
> para plone). No canal #plone recebi a sugestão de usar o método
> invokeFactory. Estou testando ele no ploneshell e parece funcionar bem.
> Um exemplo do uso seria:
> 
> pasta.invokeFactory("News item", id="noticia1", title="Titulo Noticia", 
> text="texto")
> 
> O problema é que eu não queria passar o "id" para este método. Quando
> adicionamos conteúdo via web o plone automaticamente gera um id baseado
> no titulo. Como fazer isso? Esta função exige que eu forneça um id.

a Tânia já deu uma sugestão, aqui vai mais uma.

Basta chamar o método 'processForm' no objeto criado, que ele se encarrega
de nomear o objeto conforme o título passado. Como bônus, ele ainda chama
o hook de criação de objetos e a mágica para desmarcar a flag de criação.
 
> Outra questão. Existe outra forma de adicionar conteúdo via script?

Existe. Usando o invokeFactory, você está sujeito às restrições impostas
pelo container (o local onde você está adicionando os objetos). Em algumas
situações é conveniente adicionar coisas onde depois usuários normais não
poderão mais fazer isso. Para tal, existe o _createObjectByType, e você
usaria da seguinte maneira (untested):

from Products.CMFPlone.utils import _createObjectByType
obj = _createObjectByType('News Item', pasta, 'noticia1', title="Titulo 
Noticia", text="texto")
obj.processForm()

HTH,
 
-- 

Dorneles Treméa
X3ng Web Technology


Para enviar uma mensagem: zope-pt@yahoogrupos.com.br
Para desistir envie uma mensagem em branco para: [EMAIL PROTECTED] 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/zope-pt/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 


Responder a