Ferramentas Pessoais
Você está aqui: Página Inicial Artigos Melhorando a interface com o usuário utilizando as properties

Melhorando a interface com o usuário utilizando as properties

As properties do Plone são muito úteis como vimos no artigo anterior "Salvando o mundo com properties no Plone" , mas elas não são tão interativas com o nosso cliente, se mantermos elas sem uma interface melhorada, neste artigo, vamos aprender a elaborar uma boa interface para nosso usuário.

O que vamos fazer? O que iremos fazer?

Vamos criar uma nova interface (template) para o usuário adicionar as informações nas properties sem saber que elas existem e estão atreladas ao objeto.
 

applications-engineering.png Mãos a obra!

Primeiramente criaremos um script python mágico que faz tudo:
  • cria uma property
  • insere dados na property
  • atualiza dados na property
  • deleta a property
 
O script se chamará py_change_property:
## Script (Python) "py_change_property"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=propertyid="id_da_property", type="string", value="test", delete=False, view_name='style_view', traverse=False, redirect=True
##title=Cria uma nova propriedade no contexto do objecteto
##
if traverse:
    object = context.restrictedTraverse(traverse)
else:
    object = context

# Cria uma property d zero
if not object.hasProperty(propertyid):
    object.manage_addProperty(id=propertyid, value=value, type=type)
    if redirect:
        context.plone_utils.addPortalMessage(u'Propriedade %s criada.'%(propertyid))

else:
    if delete != 'yes':
        # Atualiza a propriedade
        request = object.REQUEST
        # Mantem as outras propriedades
        for item in object.propertyIds():
            request.set(item, object.getProperty(item))  
        # propriedade do parametro  
        request.set(propertyid, value)
        object.manage_editProperties(request)
        if redirect:
            context.plone_utils.addPortalMessage(u'Propriedade %s atualizada.'%(propertyid))


# Caso deseja deletar a property
if delete == 'yes':
    object.manage_delProperties(ids=[propertyid])
    if redirect:
        context.plone_utils.addPortalMessage(u'Propriedade %s excluida.'%(propertyid))

# Reindexa o objecto
object.reindexObject()

if redirect:
    # Redireciona de volta para o template de origme com uma mensagem
    object.REQUEST.RESPONSE.redirect(view_name)

Agora vamos criar um template, para facilitar a inserção do campo de telefone pelo usuário, vamos chamar esse template de property_telefone_view.

<metal:macro use-macro="context/main_template/macros/master">
<metal:slot fill-slot="main">

    <form tal:attributes="action string:${context/absolute_url}/py_change_property" method="post"
          tal:define="propertyname string:telefone;
                      propertytype string:string">

        <input type="hidden" name="propertyid" tal:attributes="value propertyname"/>
        <input type="hidden" name="type" tal:attributes="value propertytype"/>
        <input type="hidden" name="view_name" tal:attributes="value string:${context/absolute_url}/${template/id}" />
        <input type="hidden" name="traverse" tal:attributes="value python:'/'.join(context.getPhysicalPath())" />
 
        <div>
            <label>Adicione o campo de <span tal:replace="propertyname"/>:</label>
            <input class="span2" type="text" name="value" tal:attributes="value python:str(context.py_get_property(propertyname) or '').replace('False','')" />
        </div>

        <label tal:condition="python:context.py_get_property(propertyname)">
            <input type="checkbox" name="delete" value="yes" style="margin-top:0px;margin-right:2px;" />
            <span >Marque esta opção e clique em Salvar para <b>excluir o campo de <span tal:replace="propertyname"/></b></span>
        </label>

        <input type="submit" style="margin-top:10px;" name="btn_save" value="Salvar" class="btn"/>

    </form>

</metal:slot>
</metal:macro>

 

Já temos o template e o script que faz os manteres, agora precisamos facilitar o acesso do nosso cliente a este novo template, entre na ZMI e acesso a área "portal_types".


Portal_types

 

Escolha o tipo de conteúdo que deseja, atrelar o novo template, no meu caso eu escolhi o tipo Página.

Tipo Pagina

Clique na aba Actions e insira uma nova "Action".

Action to Objetc

Pronto! agora acesse alguma página, e poderá cadastrar um telefone de maniera mais elegante!

Action no Artigo

 

Ao clicar na aba telefone, o usuário entra no template de manutenção do campo "telefone".

 

Manutenção Telefone

 

Espero que tenham gostado, até a próxima.



Ações do documento
Março 2019 »
Março
SeTeQuQuSeSaDo
123
45678910
11121314151617
18192021222324
25262728293031

Python Logo

       Zope Logo

 

      Novo Logo do Plone