Blog
Como instalar o Plone 4 para testes no seu computador
Essa semana foi bastante movimentada para toda a comunidade do Plone com o lançamento do Plone 4. Depois de ler sobre o lançamento, muita gente ficou com vontade de experimentar o Plone 4 e ver como as coisas funcionam nessa nova versão.
Para ajudar um pouco aos novos entusiastas e aos que não tem muita familiaridade com os procedimentos tradicionais de instalação, vou escrever aqui um rápido tutorial de como instalar o Plone no seu computador de uma maneira bem fácil, usando o instalador. Fique tranquilo, você não vai precisar de nenhum conhecimento de redes ou programação.
Baixando o arquivo e iniciando a instalação
O primeiro passo, como era de se imaginar, consiste em acessar o site do Plone para baixar a nova versão. Isso pode ser feito diretamente desta página: http://plone.org/products/plone.
Escolha o arquivo de instalação para o seu sistema operacional e faça o download. Nesse tutorial vamos usar como exemplo a instalação para windows utilizando o windows 7.
O arquivo para windows tem 32MB e deve demorar alguns minutos para baixar. Assim que terminar, basta executar o arquivo para iniciar o processo.
Ao executar o arquivo, você deve receber uma mensagem perguntando se você realmente deseja executar o arquivo.

Clique no botão "Executar" para permitir a instalação. Em alguns casos, de acordo coma configuração de seu computador, você pode ver uma segunda janela perguntando se você autoriza o programa Plone.exe a relaizar modificações em seu computador. Dê a permissão para continuar.
A próxima tela que você vai ver é a tela do inicio da instalação propriamente dita:

Como dá pra imaginar, basta clicar em "Next" para prosseguir no processo e iniciar o wizard, que vai te guiar na instalação. Os passos são bem simples e intuitivos, mas mesmo assim vamos a eles:
1. local de instalação

Escolha o local onde ficarão os arquivos do Plone. Caso não tenha uma boa razão, mantenha a pasta sugerida e clique mais uma vez em "Next".
2. Definição da senha de administrador

Nesse passo você precisa definir a senha do administrador do seu site Plone. É com ela que você poderá fazer login no site, por isso guarde bem essa senha. Como este é apenas um site para teste, utilize um nome de usuário e senha fácil de lembrar. No meu exemplo vou utilizar o usuário admin e a senha admin.
3. Iniciar a instalação

Nesta tela tudo o que você tem a fazer é se certificar que escolheu as opções corretas. Caso queira fazer alguma alteração, basta clicar no botão "Back". Caso esteja tudo certo, basta clicar no botão "Install".
4. Instalando
Agora você não precisa fazer mais nada. Nos próximos minutos o instalador vai descompactar todos os arquivos em seus devidos lugares e ajustar todos as configurações. Depois de alguns minutos, você verá a seguinte tela:

Caso queira que o Plone seja executado toda vez que iniciar o seu computador, marque a primeira opção. Mas isto não é necessário, pois você poderá iniciar o Plone sempre que quiser utilizando um atalho que foi criado no menu iniciar.
Deixe a segunda opção marcada para iniciar a tela de controle do Plone e clique no botão "Finish".
Pronto, agora o Plone está devidamente instalado em seu computador.
Iniciando o Plone
Agora que o Plone está instalado, veja como deixa-lo disponível para o uso.
1. Iniciando o servidor

Para seu site ficar disponível, o primeiro você precisa iniciar a sua instancia. Faça isso clicando no botão "Start Instance".
2. Criando seu site

Agora que o servidor está ativo, clique no botão "Create/View Plone Site...". Dessa maneira você será redirecionado para o endereço http://localhost:8080/ em seu navegador padrão. A tela exibida será a seguinte:

Agora para criar seu site basta clicar no botão "Criar um novo site Plone...".
Neste momento você vai precisar dos dados definidos nos passos anteriores. Informe seu nome de usuário, senha e clique no botão "Fazer Login".
3. Dados do seu site
Estamos quase lá. Agora você só vai precisar definir os dados básicos de seu site. Na página seguinte informe o identificador do seu site, que é o nome que será utilizado como endereço do seu site. Por exemplo, se escolher Plone, o endereço local do seu site será http://localhost:8080/Plone.
Informe também o título, o idioma e clique no botão "Criar site Plone".
Divirta-se
Pronto, isso é tudo. Seu site foi criado, e você será redirecionado automaticamente para a página inicial, onde poderá testar o Plone e se divertir com os novos recursos. Você pode, por exemplo, editar o texto da página inicial ou adicionar novos itens ao portal.
Se ainda não sabe muito bem o que pode fazer, aguarde nossos próximos posts com algumas dicas legais para fazer no seu site Plone.
Deco funcionando pra valer
Enquanto todos ainda estão conhecendo as novidades do Plone 4, que foi lançado no dia primeiro de setembro, a equipe de UI do Plone já trabalha duro pensando no futuro.
Na última semana foi realizado na Holanda um sprint para colocar o Deco finalmente para funcionar. Além de corrigir uma série de bugs eles construiram o que pode ser considerado o primeiro site feito utilizando Deco: http://www.decobrewery.com/site/
Mais do que o resultado final, o interessante é assistir o vídeo a seguir com alguns detalhes de funcionamento do Deco:
Para mais vídeos e detalhes, leia o post completo sobre o sprint no blog da fourdigits.
Python Brasil 6 em Curitiba
A Python Brasil 6, que será realizada em Curitiba no mês de outubro, promete ser uma das melhores (se não a melhor) edição do evento já realizada. A organização divulgou que alcançou o novo recorde no envio de trabalhos. Mais de 70 trabalhos foram cadastrados e depois de aprovados entrarão para a grade de palestras e treinamentos, junto com alguns palestrantes internacionais .
A grade oficial será divulgada no dia 6 de setembro. Mas não perca tempo, garanta já sua vaga, faça agora sua inscrição.
Mais detalhes: http://www.pythonbrasil.org.br
Plone 4 quase pronto, com a tradução português 100%
Neste último domingo fizemos o commit da tradução das últimas linhas do Plone 4 que ainda não estavam em português. Isso significa que já no primeiro release do Plone 4 (RC1) teremos sua interface totalmente traduzida para o Português brasileiro.
A versão release candidate 1 será lançada nos próximos dias, e vem aí com muitas novidades e grandes recursos que você pode ver com mais detalhes em um post que fizemos anteriormente.
Então fica a dica para quem pretende fazer testes do Plone 4: não esqueça também de avaliar a tradução. E caso tenha alguma coreção ou sugestão, fique a vontade para mandar para nós. Toda a comunidade Plone no Brasil agradece antecipadamente.
Vaga de Estágio em Web Design
Simples Consultoria, empresa de desenvolvimento de soluções de tecnologia da informação busca um profissional para preencher perfil de estagiário.
Excelente oportunidade para aprender muito sobre CSS e Plone:
Conhecimentos desejados:
- Noções de XHTML
- Noções de CSS
- Noções de Photoshop
- Disposição para aprender
Atributos da vaga:
- Carga horária diária: 6h
- Tipo de contrato: Estágio
- Inicio imediato
- Local: Perdizes, São Paulo
- Bolsa de R$ 510,00
- Vale Transporte
- Vale Refeição
Interessados devem enviar o currículo por e-mail para vagas@simplesconsultoria.com.br, mencionando no assunto: Estágio
.
Habilitar suporte a Flash no Kupu
Não, Kupu não é um palavrão. Kupu é o nome do editor visual padrão do Plone na versão 3. E uma das solicitações de customização mais comum que recebemos de nossos clientes é a possibilidade de inserir aqrquivos flash nas páginas do site de maneira fácil utilizando o Kupu.
Então veja a seguir como resolver essa questão com dois enfoques diferentes:
1. FLASH EXTERNO
O Kupu, editor visual do Plone, filtra algumas tags por padrão, entre elas algumas tags utilizadas para a inclusão de arquivos flash. Para permitir que um arquivo Flash seja exibido em páginas normais será preciso alterar algumas configurações na filtragem de HTML.
Para fazer isso siga os seguintes passos:
- Vá até Configurações do site / Filtragem de HTML;
- Remova as tags “embed” e “object” do grupo Tags ofensivas;
- Remova a tag “param” do grupo Tags Removidas;
- Em tags personalizadas, adicione a tag “embed” e clique em Salvar;
- Vá para a página Configurações do site / Editor visual / Barra de Ferramentas;
- Marque a opção “embed-tab” e clique em Salvar.
Agora você poderá adicionar uma tag de flash, como por exemplo vídeos do Youtube diretamente do editor de texto do Plone. Para adicionar faça o seguinte:
- Em uma área de texto, clique na opção “inserir link externo”;
- Na sequencia, clique na aba “Embutir objeto Externo” e cole o seu código HTML.
2. HABILITANDO FLASH COMO CONTEÚDO
Para utilizar arquis swf que estão no site, é necessário instalar o produto adicional ATFlashMovie. Este produto cria um novo tipo de objeto específico para adicionar arquivos swf.
Após a instalação, basta alterar a seguinte configuração:
- Vá até Configurações do site / Editor visual / Tipos de recurso;
- Adicione o objeto FlashMovie ao grupo “mediaobject”.
- Na área “URL de ações” adicione o tipo FlashMovie com as seguintes opções:
- pré-visualização: string:${object_url}/download
- normal image: string:${object_url}/download
- type: Flash
Depois dessa alteração os arquivos swf adicionados ao site poderão ser adicionados ao site da mesma maneira que se adiciona uma imagem.
Plone 4 : novidades para o usuário final
Durante o World Plone Day 2010, organizamos aqui na Simples Consultoria um evento no qual tive a oportunidade de contar um pouco sobre quais serão as novidades do Plone 4. Este artigo que segue é uma transcrição aproximada do que foi dito na ocasião. O foco da apresentação foram as mudanças de maior impacto ao usuário final, ou seja, o que realmente muda para o usuário nesta nova versão do Plone.
Inicialmente é legal destacar que foram selecionados e implementados 40 “PLIPs” (“Plone Improvement Proposal"), que são sugestões de melhora propostas pela própria comunidade. Isso faz do Plone 4 a versão que recebeu o maior número de melhorias de toda a história do Plone.
Muitas destas mudanças são internas, de modo que o próprio Eric Steele confessou durante o Plone Symposium South America que se sentia um tanto frustrado, porque embora tenha existido muito e muito trabalho pesado ele não tinha muito o que mostrar quando um usuário comum perguntava o que ia mudar para ele. A verdade é que houveram poucas mudanças para estes usuários, mas estas mudanças foram bastante significativas. Veremos algumas delas agora:
Novo Tema
Do ponto de vista do usuário está é provavelmente a mudança mais aparente. Após vários anos usando o mesmo layout padrão o Plone finalmente muda de cara. O design padrão tornou-se minimalista, de uma simplicidade quase franciscana. O novo tema é muito mais simples e por isso mesmo muito mais fácil de editar. O pai da criança, Alexander Limi, também durante o Plone Symposium, descreveu-o como "propositalmente vazio". A idéia por trás disso é ter um layout bom o bastante para ser usado assim que o Plone foi instalado, mas também flexivel o bastante para ser alterado sem dificuldade. Uma tela onde os designers podem trabalhar sem perder as vantagens de usabilidade e facilidade de uso do Plone. Em termos de codificação e css na pratica temos uma base muito mais fácil de personalizar e os designer terão muito menos necessidade de bug fixes e workarounds.
Outro ponto importante no novo tema é a adoção oficial do jQuery como linguagem padrão para rodar do lado do Cliente. O KSS continua disponível, mas apenas de maneira opcional. Além das vatagens técnicas do JQuery, isso colocará os desenvolvedores de Plone em contato com uma comunidade muito maior, e consequentemente muito mais criativa e produtiva.
Adoção do TinyMCE como Editor Padrão
Embora diversos outros editores estejam disponíveis por meio de produtos instaláveis, por anos o Kupu foi eleito como o editor html padrão do Plone. Basicamente ele ganhou gosto da comunidade por sua simplicidade e pelo HTML bem formatado que produzia. Entretanto os usuários parecem preferir a maior liberdade que o TinyMCE promete dar, com todos os seus recursos de formatação. O TnyMCE também tem a vantagem de já ser o editor padrão de outros CMS's comerciais e livres, colocando o Plone na favorável companhia de seus desenvolvedores e com um público bem grande já acostumado com sua interface.
Registro de usuário
Uma parte do Plone que frequentemente os usuários finais pediam para ser modificada é o formulário de registro. Isso é possivel agora no Plone 4, embora ainda aconteça de maneira timida. Dentro de Configurações do Site, nas configurações de Grupos e usuários ganhamos uma nova aba onde essas modificçaões podem ser feitas.
Busca Aprimoradas
A busca sempre foi um ponto forte do Plone frente aos concorrentes. Desafio qualquer pessoa a mostrare um CMS que tenha um sistema de busca tão perfeito e eficiente. Essa vantagem foi ainda mais explorada agora no Plone 4. A busca continua simples e eficaz como sempre, mas foram incluídas novas opções na busca avançada. O desafio era duplo: simplificar a interface das várias opções avançadas que já existem e além disso incluir novos recursos. A solução foi permitir que estes recursos sejam retirados ou fornecidos pelo administrador do site em Configurações de Busca, além de um tratamento inteligente das opções menos utilizadas, via jQuery.
Gerenciamento de imagens
O Plone fornece aos usuários formatações automáticas para cada imagem colocada no site. São os famosos, image_preview, image_thumn. image_mini, etc.. Há agora no Plone 4 uma nova opção nas configurações do site que permite ao próprio usuário final modificar os tamanhos padrão para as imagens do Plone. Não apenas isso, mas ele pode também criar tamanhos novos de imagens sem ter que saber um linha de código e nem sequer entrar na ZMI.
Gerenciamento de Portlets aprimorado
Do Plone 2 para o Plone 3 o gerenciamento de Portlet deu um salto de qualidade incrível, sendo provavelmente a novidade mais querida pelos usuários finais. Agora é possível também configurar quais portlets são visiveis ou não sem a necessidade de retirá-los para depois ter que coloca-los no lugar novamente. Isso porque cada portlet ganhou uma função de Ocultar/Mostrar que regula de modo rápido e fácil quando um portlet deve ou não ser exibido.
Coleções Aprimoradas
A interface das Coleções (antigas Pastas Espertas) está recebendo um tratamento especial no Plone 4. Em vez de ter que salvar várias vezes cada um dos critérios e ter que ficar pulando entre as abas de visão e edição, agora o usuário consegue criar suas próprias coleções com uma interfase imensamente mais amigável. Isso resultará em uma produtividade muito maior nas edições na medida que vai poupar o tempo do usuário.
Velocidade
Aquelas "mudanças internas" que comentei no inicio deste artigo tem haver com este tópico final. Um grande esforço foi feito para melhorar a performance do Plone e levar sua velocidade a niveis não apenas satisfatórios, mas admiráveis. A adoção do Python 2.6 é parte desta mudança em busca de uma melhor rapidez. Some-se a isso o suporte a BLOBs, que permite guardar arquivos grandes no filesystem, a adoção das "Pastas Gigantes" como solução padrão para o tipo pastas e muitos outros aprimoramentos e começaremos a entender como o Plone 4 conseguiu superar em performance o Plone 3, que por sua vez já estava mais rápido que outros sistemas menos robustos como o Joomla, Drupal e o Wordpress.
Conclusão
Todas estas melhorias vem unier-se a todas as outras vantagens já conhecidas do Plone desde suas primeiras versões. O lançamento do Plone 4 está previsto ainda para o primeiro semestre este ano. Quem quiser ver de perto a evolução destas e de muitas outras melhorias pode acompanhar pelos próprios relatórios disponíveis no site de desenvolvimento do projeto: http://dev.plone.org/plone/milestone/4.0 Seja como for podemos estar certos que a equipe de desenvolvedores estará empenhada em cria ruma solução para gerenciamento de conteúdo cada vez melhor, sempre focada nas necessidades dos usuário final.
Lançado produto de tema para World Plone Day 2010
Já virou tradição. Todos os anos, como parte da organização do World Plone Day, a Simples Consultoria lança um tema novo para a comunidade com um layout especialmente criado para esta data especial, que já esta em sua terceira edição.
Para quem ainda não sabe, o World Plone Day é um dia marcado por uma série de eventos, palestras e treinamentos organizados ao redor do mundo pelos usuários, desenvolvedores e empresas pertencentes a comunidade Plone. É uma grande oportunidade que temos para divulgar esta maravilhosa ferramenta de gestão de conteúdo e celebrar em conjunto nossa forte comunidade internacional.
Desde a primeira edição a Simples Consultoria lança produtos de tema que são então usados por muitas pessoas. Os temas desenvolvidos nos anos passados receberam ampla aceitação da comunidade, e foi usado em muitos países e em diversos idiomas, incluindo romêno, alemão e grego. Neste ano o desafio foi criar um tema que pudesse ser instalado tanto no Plone 3 quando no Plone 4.
O resultado pode ser baixado na página do pypi ou diretamente no site oficial do Plone
Plone para IPhone e outros aparelhos móveis
Atualmente é moda criar versões especiais dos grandes sites para aparelhos móveis. A tendência já chegou em praticamente todos os grandes portais de notícias.: G1, R7, é só juntar uma letra com um número e você pode ter certeza que será levado, ao acessar a página, para uma versão especialmente feita para ser vista no seu celular.
O Plone, desde seu nascimento, sempre teve esta preocupação com portabilidade. O próprio fato de ser escrito segundo os padrões da W3C já garante a universalidade do seu código fonte. Entretanto eu devo confessar que sempre olhei com desconfiança essa história de criar layouts diferentes para mídias diferentes. Hoje confesso que talvez isso seja um pouco de trauma de quem passou pela guerra dos browsers nos anos 90 e tinha escrever várias versões para uma mesma formatação. Mas este post do blog é para dar meu braço a torcer.
A verdade é que, embora o conteúdo deva ser sempre o mesmo, pelo menos hoje dia, a lógica de um aparelho móvel é completamente diferente de um acesso via computador. A tela é obviamente menor e não há espaço para qualquer extravagância, o teclado na maioria das vezes não é tão prático, e em geral a pessoa está com uma das mãos ocupadas.
Foi trabalhando num projeto aqui na Simples Consultoria que me dei conta desta necessidade. Está meio na cara quando todos os peixes grandes fazem alguma coisa, mas só vendo o resultado final que fiquei realmente convencido. Criamos um tema próprio para acesso via celular para a Rede Brasil Atual, nosso cliente. A novidade já está no ar. Quem quiser experimentar basta acessar http://redebrasilatual.com.br/.
Pelo celular é claro.
World Plone Day vem aí
A edição 2010 do World Plone Day está chegando. E como já virou tradição, a Equipe da Simples Consultoria vai realizar o evento aqui em São Paulo no dia 28 de abril.
Nos anos anteriores já tivemos palestras, sprints e até a construção de um site inteiro em um único dia. O formato deste ano ainda não foi decidido, mas já temos diversas idéias para fazer um World Plone Day melhor do que nunca.
Você tem alguma idéia? Deixe aí nos comentários o que você gostaria de ver no World Plone Day 2010.
Anote a data na sua agenda e fique atento ao nosso Blog para saber das novidades.
Sprint de Plone 4 na Campus Party
A equipe da Simples Consultoria vai realizar um Sprint de Plone nessa quinta-feira (28/01/10) dentro da Campus Party. O objetivo deste encontro é garantir que todos os produtos adicionais mantidos pela Simples Consultoria estejam prontos para o Plone 4.
Quem estiver disposto a participar basta procurar nossa equipe na área dedicada ao Software Livre.
Para localização mais precisa na hora do evento, acompanhe a Simples Consultoria no Twitter.
E quem ainda não conhece o Plone é só aparecer para ser apresentado ao mais completo CMS Open Source do mercado.
Mais informações sobre a Campus Party: http://www.campus-party.com.br
CMFContentPanels: Novas posições sem dor nas colunas
O CMFContentPanels é um produto bastante usado em site em Plone para a montagem e gerenciamento de páginas iniciais, especialmente em portais de notícia ou com bastante conteúdo. Algumas vezes surge a necessidade de uma disposição um pouco diferente dos destaques. Este breve tutorial mostrará como usar um recurso não muito conhecido do CMFContentPanels que permite a exibir uma linha com 1 coluna e logo abaixo outra linha com duas colunas, tal como mostrado na figura a seguir:

Basicamente o que vamos fazer é criar um painel de conteúdo dentro do outro. Para isso, siga os passos abaixo:
1 - Crie um Painel de Conteúdo novo.

2 - Neste Painel de Conteúdo inclua uma nova página, clicando no ícone semelhante a uma folha de papel no canto superior direito.
Com isso você terá um novo painel com o qual trabalhar:

3 - No primeiro painel (Page 1), delete uma coluna. Para isso, basta clicar no ícone vermelho no topo da coluna.
Com isso você já tera uma linha com 1 coluna e uma segunda linha com 2 colunas.

3 - Adicione os destaques em cada uma delas, e o resultado será algo próximo a imagem a seguir.
Novo Produto - Hot Sites
A possibilidade de criar hot sites, é uma solicitação cada vez mais frequente entre nossos clientes.
Para atendermos essa crescente demanda criarmos um produto que já está em uso em 2 clientes.
Simplificando o problema
Além disso, permitimos além de uma página que ele use todo o gerenciamento de conteúdo do Plone, pastas e conteúdos, portlets, e tudo mais.
Solução Simples
Para chegarmos a solução usamos os seguintes itens.
- Usar o subtyper, pois não queríamos um novo tipo só para isso
- Para sumir com a aparência padrão do Plone:
- Nova skin, que é trocada via regra de acesso (access rule)
- Ocultar os viewlets do topo e rodapé
- Ocultar os portlets por padrão, pode-se habilitar os portlets desejados posteriormente
- Para simplificar para o usuário, já colocamos um conteúdo modelo como visão padrão do hot site, que é escolhido pelo próprio usuário, pode ser um Flash, um Content Panel ou até mesmo uma Página.
- Ainda pensando na facilidade de uso, atribuímos, por padrão, o workflow de um estado localmente no hot site, ou seja, criou o conteúdo já está no ar.
Content Rules: regras de conteúdo no Plone
Content Rules, em português, Regras de Conteúdo é um poderoso recurso de gestão de conteúdo disponível a partir do Plone 3. Trata-se de uma maneira inteligente de tratar o conteúdo de seu site por meio de gatilhos e ações que automaticamente fazem coisas sempre que um conteúdo é criado, deletado ou modificado.
Nada melhor do que um exemplo para esclarecer. É comum depois que um site esteja pronto e entregue ao cliente que a arquitetura da informação planejada seja gradualmente desrespeitada pelos usuários na correria do dia a dia. Depois de alguns meses temos a raiz do site cheia de arquivos de difícil identificação, sem falar de conteúdos duplicados espalhados por toda parte. Pois bem, o Content Rule permite um controle maior da organização sem delegar ao usuário final novas responsabilidades. Podemos facilmente escrever uma regra de modo que toda vez que uma notícia for publicada em qualquer lugar do site ela seja movida para a pasta de notícias. Da mesma forma você pode definir que todo o evento criado seja imediatamente copiado para a pasta 'Agenda' de seu site ou ainda sempre que uma imagem for adicionada no portal ela seja copiada para o seu banco de imagens local. Na prática é como se o site tivesse uma faxineira para organizar a bagunça que é feita como conseqüência da rotina de trabalho e desatenção dos usuários finais.
Por padrão o Plone pode aplicar as regras de conteúdo para os seguintes eventos:
- Quando um objeto é Adicionado
- Quando um objeto é modificado
- Quando um objeto é removido
- Quando o estado do workflow do objeto é alterado.
A estes gatilhos podemos especificar condições como a seguir:
- Aplicar a regra para um tipo de conteúdo específico (noticia, evento. imagem, etc...)
- Aplicar a regra para uma extensão de arquivo em especial (*.doc, *.pdf, *.wmv, etc...)
- Aplicar a regra para um estado de workflow em particular (privado, esboço, publicado, etc..)
- Aplicar a regra para grupos específicos de usuário (administradores, usuários autenticados, etc..)
- Aplicar a regra para usuários que tenham um papel em particular (contribuidores, revisores, membros, etc..)
Por fim, satisfeitas as condições que especificamos podemos aplicar as seguintes ações:
- Exibir uma mensagem de registro do sistema
- Notificar usuário
- Copiar para pasta
- Mover para pasta
- Deletar objeto
- Alterar estado de workflow
- Mandar um e-mail
Importante ressaltar que tudo isso é feito na interface do próprio Plone, sem a necessidade de escrever códigos complicados ou mesmo de realizar alterações na ZMI ou no filesystem. Vejamos a seguir um exemplo simples de como criar um Conte Rule para organizar as noticias num plonesite.
Criando a sua Regra de Conteúdo
Neste exemplo mostraremos como criar uma regra de conteúdo para que todo item do tipo notícia seja movido para a pasta de Notícias de nosso site. Isso é feito em quatro fáceis etapas:
- Adicionar uma nova regra
- Configurar as condições
- Configurar a ação desejada
- Aplicar a regra as pastas do site
1. Adicionar uma nova regra
Logue-se em seu plonesite e vá ate as “Configurações do site” e sem seguida clique em “Regras de Conteúdo”. Você verá uma página como a representada abaixo. Clique no botão “Adicionar Regra de Conteúdo.”

Você entrará agora
na página de inclusão da nova regra. Vamos entrar os dados para
nossa regra de notícias como na ilustração a seguir:

Na janela “Adicionar condição”, escolha a opção “Content type” e clique em adicionar. Na página seguinte, escolha o item “Notícias” e salve, como demonstrado na ilustração.

2. Configurar as condições
Clique
em Organizador de Notícias. Iremos agora configurar as condições e
as ações de nossa regra. Você deverá estar vendo a seguinte
página:

Na janela “Adicionar condição”, escolha a opção “Content type” e clique em adicionar. Na página seguinte, escolha o item “Notícias” e salve, como demonstrado na ilustração.

3. Configurar a ação desejada
De volta a página de configuração da nossa regra de conteúdo em Adicionar ação, escolha agora a opção “Move to folder” e clique em “adicionar”

Seleciona a pasta, “Noticias” e salve as alterações:

4 Aplicar a regra as pastas do site
Nossa regra de conteúdo esta criada. Precisamos
agora apenas aplicá-la ao site. No nosso exemplo aplicaremos esta
regra na raiz, de modo que seja herdada por todas as subpastas, mas
poderíamos também aplicar regras apenas a subpastas específicas.
Para isso vá até a
raiz de seu site e clique na aba “Regras”. Selecione então nosso
“Organizador de Notícias” e clique em Adicionar:
Selecione
gora nossa regra na lista que vai aparecer e então clique em
“aplicar a subpastas”
Nosso “Organizador de Notícias” está pronto e funcinal. Faça um teste agora criando uma notícia em qualquer pasta do site. Se você seguiu corretamente os passos verá que estes itens sempre serão movidos para a página de notícias do site.
Criando novos eventos e ações
Vimos com
criar uma regra simples, mas o poder do Content Rule é bem maior do
que um mero organizador de conteúdo. É um recurso fácil de
aprender que está sendo estendido pela comunidade de desenvolvedores
para ficar ainda mais poderoso. Já é possivel por exemplo encontrar
produtos como o collective.contentrules.webservices que permite a
publicação de anúncios no Twitter e em outros sites semelhantes.
Veremos agora como cria ruma nova condição que verifica as Palavras Chaves de um conteúdo. Embora esse exemplo mostre como criar um novo tipo de conteúdo, o processo de criar uma nova ação é muito similar. Sempre que as diferenças entre estes dois processos ocorrerem elas serão especificadas.
Criando um pacote
Em primeiro lugar é preciso criar um novo pacote
onde colocaremos nossa nova condição. Usaremos um pacote egg e
instalaremos ele em nosso buildout.
No diretório src; de seu
produto:
$ cd src
$ paster create -t plone collective.keywordcondition
Selected and implied templates:
ZopeSkel#basic_namespace A project with a namespace package
ZopeSkel#plone A Plone project
Variables:
egg: collective.keywordcondition
package: collectivekeywordcondition
project: collective.keywordcondition
Enter namespace_package (Namespace package (like plone)) ['plone']: collective
Enter package (The package contained namespace package (like example)) ['example']: keywordcondition
Enter zope2product (Are you creating a Zope 2 Product?) [False]: False
...
Enter zip_safe (True/False: if the package can be distributed as a .zip file) [False]: False
Atenção a pergunta sobre o namespace e name de
seu pacote (package), no nosso exeplo correspondendo ao egg name
collective.keywordcondition. Atenção também ao zope2products
status que no caso deve ser Falso, pois não precisaremos do Generic
Setup ou outro comportamento do Zope2. por fim, zip-safe deve ser
falso também, como em todos os pacotes do Zope.
Em seguida
instale como um egg em seu buildout de modo que o Zope reconheça seu
pacote. faça isso editando o arquivo buildout.cfg:
[buildout]
...
eggs =
...
collective.keywordcondition
developer =
...
src/collective.keywordcondition
...
[instance]
...
zcml =
...
collective.keywordcondition
Rode novamente seu buildout.
Adicionando uma condição
Uma condição do Content Rule consiste em:
1
- Uma interface que descreve os aspectos configuraveis da condição
2
- Um objeto permanente usado para armazenar as configurações da
condição
3 - Um adaptador usado para executar a condição
quando a regra é executada
4 - Um view e um view de edição que
permite que o usuário configure as condições.
Tudo isso
será colocado em um arquivo que chamaremos no nosso exemplo de
keyword.py dentro do pacote collective.keyword
Em primeiro
ligar vamos importar alguns elementos importantes:
from persistent import Persistent
from OFS.SimpleItem import SimpleItem
from zope.interface import implements, Interface
from zope.component import adapts
from zope.formlib import form
from zope import schema
from zope.app.component.hooks import getSite
from zope.component.interfaces import IObjectEvent
from plone.contentrules.rule.interfaces import IExecutable, IRuleElementData
from plone.app.contentrules.browser.formhelper import AddForm, EditForm
from Acquisition import aq_inner
from collective.keywordcondition import MessageFactory as _
Perceba que usamos o MessageFactory para fins de tradução. Ele é definido em __initi__.py no nosso pacote collective.keywordcondition:
from zope.i18nmessageid import MessageFactory
MessageFactory = MessageFactory('collective.keywordcondition')
Agora, definimos a interface usado zope.schema, que descreve os aspectos configuráveis de nosso condição. No nosso caso, uma lista de palavras chave. O título, descrição e outros metadados serão usados por zope.formlib nos formulários de edição e adição. Veja o pacote zope.schema para mais informações sobre como cada campo é usado.
class IKeywordCondition(Interface):
"""Interface for the configurable aspects of a keyword condition.
This is also used to create add and edit forms, below.
"""
keywords = schema.Tuple(title=_(u"Keywords"),
description=_(u"The keywords to check for."),
required=True,
value_type=schema.TextLine(title=_(u"Keyword")))
Agora, criaremos a implementação de armazenamento da condição:
class KeywordCondition(SimpleItem):
"""The actual persistent implementation of the keyword condition element.
Note that we must mix in SimpleItem to keep Zope 2 security happy.
"""
implements(IKeywordCondition, IRuleElementData)
keywords = []
element = "collective.keywordcondition.Keyword"
@property
def summary(self):
return _(u"Keywords contains: ${names}", mapping=dict(names=", ".join(self.keywords)))
As variáveis da palavra chave, definem o valor padrão do campo na interface IKeywordCondition já mencionada. O elemento especificada apenas um nome para esse elemento da regra (condições e ações costumam ser chamados de elementos da regra (element rule). Por convenção este nome possui o nome do pacote separado por um ponto de modo a garantir que seja único. O nome do elemento será referenciado novamente mais tarde no arquivo configure.zcml
O objeto de armazenagem deve também
implementar uma propriedade summmary. Ela é usada para no Painel de
Controle termos um resumo do que a condição faz.
O Executor
Depois de definir a condição de
armazenamento, definimos o executor:
class KeywordConditionExecutor(object):
"""The executor for this condition.
This is registered as an adapter in configure.zcml
"""
implements(IExecutable)
adapts(Interface, IKeywordCondition, IObjectEvent)
def __init__(self, context, element, event):
self.context = context
self.element = element
self.event = event
def __call__(self):
context = aq_inner(self.event.object)
keywords = frozenset()
try:
keywords = frozenset(context.Subject())
except (AttributeError, TypeError,):
# The object doesn't have a Subject method
return False
return (len(keywords.intersection(self.element.keywords)) > 0)
É simples adaptar o tipo de objeto de conteúdo por contexto (nesse caso, não nos interessa que tipo de objeto será usado, assim especificamos Interface, que é a interface mais genérica de todas), o tipo de condição (nossa interface recém definido IKeywordCondition) e o tipo de evento ( no nosso caso IObjectevent, uma interface genérica que descreve eventos sobre objetos.
ATENÇÃO: É possível sobrescrever implementações do executor para diferentes contextos ou eventos através do registro de novos adaptadores.
O executor tem ainda um método importante, o __call__9) que é chamado durante a execução da regra, Ele deve retornar verdadeiro ou falso. Em caso de True, a execução continua, par a a próxima condição ou ação, caso contrário o processo é abortado.
Se você está criando um action seu adaptador é quem farpa o verdadeiro trabalho da ação. Ele também deve retornar true ou false para indicar se o processo pode continuar.
Perceba como o executor é escrito de uma maneira defensiva, afinal as regras podem ser invocada para uma variedade de eventos e circunstancias.
Formulários
Finalmente devemos definir os formulários de
inclusão e edição que usaremos para criar ou modificar nossa nova
condição. Usaremos a biblioteca zope,formlib e nossa interface
IkeywordCondition da seguinte maneira:
class KeywordAddForm(AddForm):
"""An add form for portal type conditions.
"""
form_fields = form.FormFields(IKeywordCondition)
label = _(u"Add Keyword Condition")
description = _(u"A keyword condition makes the rule apply only to content with certain keywords.")
form_name = _(u"Configure element")
def create(self, data):
c = KeywordCondition()
form.applyChanges(c, self.form_fields, data)
return c
class KeywordEditForm(EditForm):
"""An edit form for portal type conditions
"""
form_fields = form.FormFields(IKeywordCondition)
label = _(u"Edit Keyword Condition")
description = _(u"A keyword condition makes the rule apply only to content with certain keywords.")
form_name = _(u"Configure element")
As classes AddForm e EditForm prestam suporte
ao plone.app.contenrules com os boões e validadores padrão.
Configurando o componente
Com o código no lugar devemos agora registrar
nosso componente no configure.zcml
<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:browser="http://namespaces.zope.org/browser"
xmlns:plone="http://namespaces.plone.org/plone"
xmlns:five="http://namespaces.zope.org/five"
i18n_domain="collective.keywordcondition">
<include package="plone.contentrules" />
<include package="plone.contentrules" file="meta.zcml" />
<!-- the keyword condition -->
<adapter factory=".keyword.KeywordConditionExecutor" />
<browser:page
for="plone.app.contentrules.browser.interfaces.IRuleConditionAdding"
name="collective.keywordcondition.Keyword"
class=".keyword.KeywordAddForm"
permission="cmf.ManagePortal"
/>
<browser:page
for="collective.keywordcondition.keyword.IKeywordCondition"
name="edit"
class=".keyword.KeywordEditForm"
permission="cmf.ManagePortal"
/>
<plone:ruleCondition
name="collective.keywordcondition.Keyword"
title="Keyword"
description="Apply only when the current content object has one of the given keywords"
for="*"
event="zope.component.interfaces.IObjectEvent"
addview="collective.keywordcondition.Keyword"
editview="edit"
/>
</configure>
Aqui em primeiro lugar importamos os elementos
de configuração necessários de plone.app.contentrules e
registramos nosso adaptador, e os views de inclusão e edição. O
nome do view de inclusão deve corresponder ao nome do elemento
(collective.keywordcondition.Keyword no nosso caso) conforme
fora definido na classe. O nome da edição deve ser sempre
edit
Finalmente registraremos o tipo de condição:
Atenção:
Quando criando uma ação use a diretiva <plone:ruleAction />.
Ela usa os mesmos atributos de <plone:ruleCondition/>
Novamente,
o nome deve corresponder ao definido na classe. O título e descrição
são usamos na interface do usuário.
Os atributos for e
event são usados para controlar quando o elemento está disponível.
Nesse caso, ele é disponível em todos os contextos de eventos e
objeto.
Muitos dos eventos registrados no Content Rules são
herdados de IObjectEvent. A interface simplesmente garante que haverá
um atributo de objeto no evento que contem o objeto para qual o
evento foi colocado. Se você quer restringir a condição para um
evento ou tipo mais específico você pode definir uma interface
diferente aqui. Isso geralmente só é necessário se você precisa
de informações adicionais para executar a condição.
Atenção: Deve haver pelo menos um adaptador aplicável ao evento na qual a condição ou ação for registrada.
Recuperando arquivos deletados no Plone
Deletou um arquivo ou uma pasta que não devia? Nem tudo está perdido. O Plone permite que o administrador veja o histórico de todas as ações feitas por seus usuários e dependendo do caso permite ainda a recuperação de conteúdos deletados.
Essa característica do sistema permite que você desfaça alterações feitas tanto nas configurações como no conteúdo de seus objetos. É uma tarefa relativamente simples, mas que pode eventualmente salvar o seu dia. Veja como fazer isso:
Primeiramente digite no final de sua url /undo_form
Fazendo isso você entrará na tela de Desfazer Ações. Note que esta é uma tela contextual, se você digital /undo_form logo depois da raiz do seu portal terá acesso a todas as últimas ações, se entrar numa área específica verá as ações apenas daquela pasta para dentro.
De qualquer forma você chegará a uma página semelhante a esta:

Agora é necessário encontrar a página que foi deletada. Ela poderá ser identificada no campo "Ação Realizada", que dará tanto o caminho até a pasta, seu título e a ação "Deleted", como no modelo abaixo:
Depois de ter encontrado a ação que apagou seu arquivo, você poderá desfazê-lo. Para isso selecione-o com o checkbox a esquerda da tabela e então clique no botão 'Desfazer' no final da página.
Não vai haver nenhuma página de resultados, depois de desfeita você deve voltar para a pasta em questão e o conteúdo recuperado já deverá estar lá lhe esperando.
É importante ressaltar que mesmo que uma ação seja exibida na tabela, isso não é certeza de que você poderá desfazê-la. Isso acontece porque algumas transações posteriores podem modificar a pasta em questão ou usar o mesmo id anterior. Por isso, lembre-se que esse é um recurso de emergência e nunca substituirá o cuidado que o usuário deve ter com seus arquivos.
Criando seu próprio repositório do Pypi
É incrível como ainda me impressiona o fato de eventos como o Plone Symposium South America, realizado em São Paulo, pode nos render ainda mais aprendizado, fora as amizades e trocas de experiências é claro ;)
A Arte do design para Plone
Essa semana tive a honra de ser um dos palestrantes do Plone Symposium South America, realizado em São Paulo, junto a grandes nomes da comunidade brasileira de Plone e de diversos palestrantes internacionais, como Alexander Limi e Eric Steele.
Em cerca de vinte minutos pude mostrar um pouco da experiência da Simples nos últimos anos e mostrar algumas lições que aprendemos em mais de 500 projetos realizados com Plone.
Para quem não teve a oportunidade de acompanhar, veja a seguir a a apresentação:
Plone Symposium South America: o Sprint
Está acontecendo neste exato momento o sprint do Plone Symposium South America. É curioso e muito gratificante ver pessoas de vários países trabalhando juntos para um objetivo em comum. Considerando que hoje é dia de Ação de Graças, a conversa do almoço com @cleberjsantos acabou nos lembrando de uma antiga narrativa bíblica que acho que pode fazer um paralelo interessante ao que está acontecendo hoje.
Para quem não sabe, a certa altura do livro de Gênesis, os habitantes da Babilônia decidem trabalhar juntos para construir uma torre tão alta e majestosa que levaria a humanidade a conquistar os céus. Um projeto ambicioso para a época diga-se de passagem. Por motivos que me escapam o Deus bíblico achou essa empreitada pretensiosa demais, e resolveu confundir um pouco as coisas. Subitamente, cada um dos trabalhadores começou a falar uma língua diferente, a confusão se instalou e o projeto não pode ser levado a diante. Essa é a origem bíblica dos vários idiomas humanos.
Acontece que o que foi um problema para os babilônicos da história não está sendo um problema aqui hoje. Estamos um pouco mais organizados depois de alguns milênios. Enquanto escrevo este post tenho ao meu redor pessoas de vários países diferentes e pelo menos três idiomas sendo usados. Mas isso não desanima ninguém, pelo contrário torna o ambiente ainda mais interessante.
O enfoque da 'Cayapa' é a internacionalização. Nosso objetivo é resolver alguns bugs e especificamente melhorar ainda mais a interface para os idiomas português e espanhol. É sempre bom lembrar que este sempre foi um ponto forte do Plone, contando hoje com mais de 40 idiomas suportados, incluindo diversos dialetos.
Vale ainda um especial agradecimento a presença de @limi, @esteele, @robertoallende e @macagua que vieram de seus países para nos dar essa força. Pessoas especiais que estão ajudando a fazer o mundo um lugar menor e ao mesmo tempo mais grandioso.
- Confira algumas fotos do Plone Symposium South America
Instalando o Plone 4 core-dev
Não dá para negar, o Plone vem evoluindo a cada dia desde seu lançamento, a quantidade de *commits* de códigos, correções, traduções, produtos, documentações e pessoas voltadas a melhoria do Plone em todas as áreas tem crescido muito.
Plone Autenticando com LDAP / Active Directory (AD)
Vamos aprender a configurar o Plone para autenticar os usuários com a base do AD do seu Windows Server, muito utilizado em intranets.
Nesse post vou apenas tratar a configuração do Plone com o AD, mas a mesma analogia serve para o LDAP com OpenLDAP, não vou abordar a configuração do AD nem do OpenLDAP, vamos assumir que os usuários já funcionam nesses ambientes, estamos apenas incluindo a intranet.
Configurando o Plone para autenticar com LDAP.
O Active Directory é uma base LDAP, mas com uma boa camada de interfaces gráficas por cima.
A maior dificuldade para configurar o AD no Plone é ter acesso aos "caminhos" dos objetos do AD na notação LDAP, pois é dessa forma que devemos configurar no Plone.
Para facilitar a nossa vida existe um aplicativo que nos fornece os dados na notação LDAP.
Obtendo os dados LDAP no seu Windows Server
No servidor AD baixe o ADSI.
Esse é um plugin para o MMC, aquele aplicativo onde configuramos o AD e vários outras coisas no Windows.
Extraia os 2 arquivos desse .zip para a pasta C:\Windows\system32 ou a pasta system32 do seu sistema que pode estar em outro caminho.
Execute o arquivo adsiedit.msc, para isso ou clique 2 vezes ou vá em Iniciar -> "Executar..." e digite: adsiedit.msc, o system32 está no PATH, portanto pode-se executá-lo diretamente
Deixe esse aplicativo aberto, pois vamos buscar alguns dados nele, abaixo está a explicação de como pegar os dados.
Agora vamos ao Plone, acesse a ZMI (URL de exemplo: http://servidor:8080/Plone/manage)
Em acl_users (dentro do Plone Site) instalar o ActiveDirectory Multi Plugin.

Configuração: Na tela que aparece ao criar ou em /Plone/acl_users/UsuarioIntranet/acl_users aba Configure
LDAP Server
O IP do seu servidor AD (LDAP), configura-se na criação ou em /Plone/acl_users/UsuarioIntranet/acl_users na aba LDAP Servers
10.75.76.2
Title
Um título qualquer para identificar esse conteúdo
Login Name Attribute
Windows Login Name (sAMAccountName)
User ID Attribute
Canonical Name (cn)
RDN Attribute
Canonical Name (cn)
Users Base DN
Caminho LDAP para o diretório onde ficam os usuário no seu AD (ou LDAP)
Lá no adsiedit, clique com o botão direito na pasta de usuários e clique em Propriedades e procure pelo atributo distinguishedName e copie-o para esse campo.
CN=Users,DC=simplesnet,DC=simplesconsultoria,DC=com,DC=br

Scope
SUBTREE
Group storage
Groups not stored on LDAP server
Group mapping (Applies to LDAP group storage only)
Automatically map LDAP groups to Zope roles
Groups Base DN
Caminho LDAP para o diretório onde ficam os grupos no seu AD (ou LDAP), nesse exemplo os grupos ficam junto com os usuários
Lá no adsiedit, clique com o botão direito na pasta de grupos e clique em Propriedades e procure pelo atributo distinguishedName e copie-o para esse campo.
CN=Users,DC=simplesnet,DC=simplesconsultoria,DC=com,DC=br
Scope
SUBTREE
Manager DN
Caminho LDAP do usuário que usaremos para acessar o AD (LDAP), pode ser um usuário comum, porém terá que ser como somente leitura
Lá no adsiedit, clique com o botão direito no usuário que fará a conexão ao AD e clique em Propriedades e procure pelo atributo distinguishedName e copie-o para esse campo.
CN=Luciano Pacheco,CN=Users,DC=simplesnet,DC=simplesconsultoria,DC=com,DC=br
Password
Senha do usuário informado no Manager DN (essa senha será usado no acesso ao LDAP)
Manager DN Usage
Always
Read-only
Verdadeiro se o usuário informado em Manager DN não for administrador no AD (LDAP)
User object classes
Utilize o padrão
top,person
Additional user search filter
Deixe Vazio
User password encryption
SSHA
Default User Roles
Qual é o papel padrão dos usuário do AD (LDAP). Por padrão usamos Member
Member
Testando
Depois de configurado acesse /Plone/acl_users/UsuarioIntranet/acl_users aba Users
Faça uma busca por um usuário que você saiba que exista no AD (LDAP), use admin que deve aparecer o Administrator ou Administrador. ;-)
Se achar o usuário já está praticamente funcionando. :-) Um viva para nós!
Mais uns detalhezinhos
Acesse /Plone/acl_users/UsuarioIntranet na aba Properties e configure:
groupid_attr para sAMAccountName
Mapeando propriedades do usuário para o AD
Acesse /Plone/acl_users/UsuarioIntranet/acl_users na aba LDAP Schema.
Já existem algumas propriedades padrão configuradas.
Vamos adicionar o e-mail como exemplo.
Na parte inferior da tela você pode adicionar novas propriedades.
LDAP Attribute Name
Nome do atributo do usuário lá no AD, verifique os atributos disponíveis através do adsiedit
Exemplo: mail
Friendly Name
Nome amigável para o usuário
Multi-valued
Nunca usei, mas deve ser algo como uma lista
Binary
Nunca usei, não sei qual seria o caso de uso
Map to Name (optional)
Nome que será utilizado dentro do Plone
Exemplo: email

