Gerando XML do conteúdo do portal
1. Criando um script python de busca
Neste artigo vamos fazer um XML dos usuários cadastrados no portal. O script abaixo está todo comentado ele busca todos os usuários, anexa numa lista o id, nome e o e-mail e retorna a lista como resultado, confira:
#importa o getToolByName
from Products.CMFCore.utils import getToolByName
#cria um lista para guarda os resultados
lista = []
#acessa a tool portal_membership
portal_membership = getToolByName(context, 'portal_membership')
#lista os usuarios do metodo listMemberIds
for i in portal_membership.listMemberIds():
#definindo as variaveis
membro = portal_membership.getMemberById(i)
fullname = membro.getProperty('fullname', '')
email = membro.getProperty('email', '')
#verifica se o usuario cadastrou o nome
if not fullname:
fullname = membro
#guardando os resultados numa lista
lista.append((i,fullname,email))
#retornando a lista quando executar este script
return lista
2. Recuperando os dados do script e montando o XML
Edite o seu page_template com o seguinte código:
<?xml version="1.0" encoding="utf-8"?>Comentanto:
<document xmlns:tal="http://xml.zope.org/namespaces/tal"
tal:define="usuarios python:here.lista_users_xml()">
<tal:block repeat="usuario usuarios">
<member>
<id tal:content="python:usuario[0]"/>
<fullname tal:content="python:usuario[1]"/>
<email tal:content="python:usuario[2]"/>
</member>
</tal:block>
</document>
Defindo o cabeçalho do XML:
<?xml version="1.0" encoding="utf-8"?>
Definindo que vamos usar TALS, na linha abaixo estamos definindo a variável usuarios que receberá o retorno do script python:
<document xmlns:tal="http://xml.zope.org/namespaces/tal"
tal:define="usuarios python:here.lista_users_xml()">
Definindo a repeat dos resultados:
<tal:block repeat="usuario usuarios">
Recuperando os dados do loop, como foi gerada uma lista no script python, aonde cada item possui 3 elementos, é necessário entender de listas para entender a recuperação dos dados, como abaixo:
<member>
<id tal:content="python:usuario[0]"/>
<fullname tal:content="python:usuario[1]"/>
<email tal:content="python:usuario[2]"/>
</member>
Fechando o bloco do repeat
</tal:block>
Fechando o bloco dos dados
</document>
Olhe o resultado do exemplo aqui!
Plone
2.5.5