Ferramentas Pessoais
Você está aqui: Página Inicial Members Leonardo Miranda Gerando XML do conteúdo do portal

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

O próximo passo é criar um page_template na ZMI do seu plone site ou no seu produto, o nome sugerido para esse exemplo é xml_users. Após cria o page_template, clique na aba Properties e mude o content_type para text/xml; charset=utf-8 e salve. Agora o seu page_template já está em formato XML. Vamos recuperar os dados do script e trata-los.

Edite o seu page_template  com o seguinte código:

<?xml version="1.0" encoding="utf-8"?>
<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>
Comentanto:

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!