Salvando o mundo com properties no Plone
Você já se deparou com situações inusitadas onde o cliente precisa de um campinho extra em algum tipo específico do Plone? você utiliza o campo "location" mas o usuário precisa de mais um campo? relaxe seus problemas acabaram!!!
O que iremos fazer?
Como eu vejo as properties de um objeto?

- boolean - Que armazena valores True ou False, exemplo de campo: Sexo
- date - Data, armazena um tipo DateTime, que facilita o uso de datas.
- float - Armazena números mais complexos e quebrados
- int - Armazena números simples e inteiros
- lines - Forma uma lista, sendo um valor por linha
- long - deve ser parecido com o float, porém mais rosbusto, não sei ao certo
- string - Tipo mais usado, armazena textos simples
- text - Armazena textos maiores
- tokens - Nunca utilizei
- selection - Nunca utilizei mas deve gerar uma lista de seleção para um campo do tipo select
- multiple selection - Nunca utilizei mas deve gerar uma lista de seleção para um campo do tipo mult-select

Mãos a obra!
Primeiro passo, vamos criar um script python que acessa e regata a property que eu quero, podemos chama-lo de py_get_property:
## Script (Python) "py_get_property" ##bind container=container ##bind context=context ##bind namespace= ##bind script=script ##bind subpath=traverse_subpath ##parameters=prop, ctx=False ##title=Retorna a propriedade "passada no parametro prop" ## if not ctx: ctx = context if ctx.hasProperty(prop): return ctx.getProperty(prop) else: return False |

<html> <head> <title tal:content="template/title">The title</title> <meta http-equiv="content-type" content="text/html;charset=utf-8"> </head> <body> <h2 tal:content="context/Title"></h2> <h5 tal:define="telefone python:context.py_get_property('telefone', ctx=context)" tal:condition="telefone" tal:content="telefone"></h5> </body> </html>

Mãos a obra 2!
## Script (Python) "py_get_telefone" ##bind container=container ##bind context=context ##bind namespace= ##bind script=script ##bind subpath=traverse_subpath ##parameters= ##title= ## return context.py_get_property('telefone', ctx=context)

Potal Catalog






## Script (Python) "py_busca_telefone" ##bind container=container ##bind context=context ##bind namespace= ##bind script=script ##bind subpath=traverse_subpath ##parameters= ##title= ## items = context.portal_catalog(telefone='61-9999-5555') for item in items: print 'Title: ' + item.Title telefone = context.portal_catalog.getIndexDataForRID(item.getRID())['telefone'] if telefone: print 'Telefone: ' + telefone return printed
Agora, queremos todos que não possuem telefone:
## Script (Python) "py_busca_telefone" ##bind container=container ##bind context=context ##bind namespace= ##bind script=script ##bind subpath=traverse_subpath ##parameters= ##title= ## items = context.portal_catalog(telefone=False) for item in items: print 'Title: ' + item.Title telefone = context.portal_catalog.getIndexDataForRID(item.getRID())['telefone'] if telefone: print 'Telefone: ' + telefone return printed
Legal não? Espero poder te ajudado!!! :) até a próxima!