Construindo portais com Plone Módulo 3 Templates
Templates l Quando o Plone vai mostrar uma página, duas perguntas precisam ser respondidas: Ø O que será mostrado? Isto é, quais conteúdos serão buscados do banco de dados? Ø Como será mostrado? l Os templates permitem responder a essas duas perguntas. l São modelos de páginas. Quando aplicados a um ponto do site (um objeto), mostram o que se quer mostrar.
Zope Page Templates (ZPT) l É a linguagem de templates do Zope. l Gera páginas web dinâmicas (através de HTML). l Facilita colaboração entre programadores e designers (separação) l É HTML válido e interage naturalmente com qualquer editor HTML.
Zope Page Templates (ZPT) l PHP, ASP, JSP são linguagens que geram páginas dinâmicas, por que inventar outra? l Nenhuma dessas linguagens leva em consideração o designer web. l Facilita especialização das atribuições (designers em templates e programadores em python). l O fato de gerar HTML válido proporciona a possibilidade da utilização de editores WYSIWYG e desenvolvimento TTW.
Templates >> Exemplo l Criar um objeto do tipo Link chamado Yahoo. l Acessar o template base_view no browser: Ø http://.../yahoo/base_view Ø Isto é, template view está sendo aplicado em obj. l Fazer o mesmo com base_edit. l Acessar http://.../yahoo/base_view/manage. Ø Visualizar o código do template.
Zope Page Templates (ZPT) l É a linguagem de templates do Zope. l Permite inserir comandos e diretivas no código HTML das páginas para torná-las dinâmicas. l Se divide em duas partes: TAL e METAL.
Template Attribute Language (TAL) l Atributos especiais adicionados às tags HTML. l content: Substitui o conteúdo de um elemento. Ø <p tal:content="string:este site">titulo</p> Saída HTML: <p> Este Site </p>
Template Attribute Language (TAL) l replace: Substitui o elemento por completo. Ø <div tal:replace="string:este site">titulo</div> Saída HTML: Este site
Criação de templates pela ZMI l Para criar um template é preciso fazer o seguinte: Ø Abrir a ZMI. Ø Navegar até portal_skins custom. Ø Selecionar Page Template e clicar em Add. Ø Entrar com o ID do template e clicar em Add and Edit. Ø Usar a aba Test para testar.
Templates >> Exercício 1 l Consulte o enunciado do exercício no material.
Templates >> Exercício 2.1 l Consulte o enunciado do exercício no material. l Faça apenas o exercício 2.1
Template Attribute Language (TAL) l condition: Permite que uma condição seja testada a fim de poder exibir ou não o um elemento HTML. Ø <p tal:condition="expressao">teste</p> Saída HTML: Se expressao = True: <p> Teste </p> Se expressao = False: (Nada)
Template Attribute Language (TAL) l define: Define variáveis. Ø <p tal:define="titulo context/title_or_id"> <i tal:content="titulo">título</i> </p> l repeat: Itera em uma lista (loop). Ø <ol tal:repeat="obj objetos"> <li tal:content="obj/title">título</li> </ol>
Templates >> Exercícios 2.2 e 2.3 l Consulte o enunciado do exercício no material. l Faça os exercícios 2.2 e 2.3
Template Attribute Language (TAL) l attributes: Substitui atributos de um elemento. Ø <a href="#" tal:attributes="href context/absolute_url"> Clique aqui </a> Saída HTML: <a href= http://site.com.br/endereco/do/objeto/contexto > Clique aqui </a>
TAL Expressions (TALES) Expressões usadas nos comandos TAL. Exemplo, no comando define: <p tal:define="nome string:luiz > </p> <a href="#" tal:attributes="href context/absolute_url"></a>
TAL Expressions (TALES) l Os principais tipos de TALES são: Ø Path: um caminho até um objeto do site, ou o nome de uma variável: ü minha-pasta/meu-objeto ü Caracteriza-se pelo uso de /. ü <a href="#" tal:attributes="href context/ absolute_url"></a>
TAL Expressions (TALES) l String: um literal String: l string: palavra l <p tal:define="nome string:luiz > </p> l Not: a negação lógica de uma outra expressão: Ø not:expressao Ø <p tal:condition= not:variavel > </p> l Python: um trecho de código Python: Ø python: 1 + 2 Ø <p tal:content= python:1+1 > </p>
TAL Expressions (TALES) l Outras expressões recorrentes: Ø request/url Requisição URL corrente. Ø user/getusername Nome do usuário. Ø container/objectsids Ids do container atual.
TAL Expressions (TALES) l Expressões podem ser combinadas com o operador. Caso a primeira expressão seja falsa ou vazia, a segunda é utilizada: Ø title id Caso comum do uso de é o nothing. Ø <span tal:content= nome nothing ></span>
ZPT Variáveis Internas l Além do nothing temos algumas outras variáveis internas no ZPT: Ø context contexto, o objeto ao qual se aplica o template. Ø request representa a requisisição feita ao servidor. Ø user representa o usuário logado atualmente. Ø E outros menos importantes
Declarações múltiplas de TAL l Pode-se usar várias declarações TAL em uma mesma tag HTML, porém é preciso atentar para: Ø Somente uma declaração de cada tipo. Ø tal:replace e tal:content conflitam. Ø A ordem das declarações não importa, a ordem de execução dos TALES será sempre: q define, condition, repeat, replace/content, attributes.
Declarações em partes de TAL l Algumas tag TAL suportam declarações em bloco. l tal:define e tal:attributes pode ser declarados em várias partes separadas por ;. l Exemplo: Ø <div tal:define= url context/absolute_url; name user/getusername; id user/getid; palavra string: palavra
Structure l tal:replace e tal:content convertem a informação que recebem para texto plano. l É uma palavra reservada que apresenta o conteúdo de uma variável em HTML. l Solução para quando se quer exibir, na página, o conteúdo todo da variável incluindo qualquer tag que possa haver. l Exemplos adiante
Templates >> Exercício 2.4 l Consulte o enunciado do exercício no material.
Templates >> Exercício 2.5 l Consulte o enunciado do exercício no material.
Templates >> Exercício 3 l Consulte o enunciado do exercício no material. l Faça os exercícios 3.1, 3.2 e 3.3
Templates >> Exercício 4 l Consulte o enunciado do exercício no material.
Macro Expansion TAL (METAL) l Permite definir macros, isto é, fragmentos de código HTML e TAL que podem ser reutilizados.
METAL >> Macros l meutemplate.pt l <div metal:define-macro="minhamacro"> <b>bla</b> </div> l Outro template: l <div metal:use-macro= "context/meutemplate/macros/minhamacro"/>
METAL >> Slots l Dentro de uma macro podem ser definidos slots. l São buracos onde o usuário da macro pode inserir um código personalizado: <div metal:define-macro= mostra_nome > <b>meu nome é:</b> <b metal:define-slot= nome >Um nome</b> </div>
METAL >> Slots l Se chamarmos a macro assim: <div metal:use-macro = context/teste/macros/mostra_nome ></div> v Aparecerá: Meu nome é: Um nome
METAL >> Slots l Se chamarmos a macro assim: <div metal:use-macro = context/teste/macros/mostra_nome > <b metal:fill-slot= nome >João</b> </div> v Aparecerá: Meu nome é: João
METAL Slots >> Exercício 5 l Módulo 3 > Exercício 5
METAL Slots >> Exercício 6 l Para criar um novo template já com o layout do portal, basta usar a macro master. l Módulo 3 > Exercício 6
Perguntas?
Scripts Python no Plone
Scripts Python no Plone l l l Scripts Python podem ser criados e invocados separadamente ou por templates. Servem para fazer processamentos simples. - Coisas mais complexas ficam em Produtos e bibliotecas (veremos mais à frente). Como tudo no Plone, são criados como objetos: - Acessar a ZMI. - Adicionar um novo objeto do tipo Script (Python).
Python Scripts >> Exercício 1 Obs: Criar o Script (Python) meuscript5 # Lista de pessoas pessoas = [ 'Antonio Augusto', 'Flavio Andreas', 'Winstom Marsalis', 'Chico Amaral', 'Leo Brauer', ] return pessoas
Python Scripts >> Exercício 2 # Lista de pessoas pessoas = [ 'Antonio Augusto', 'Flavio Andreas', 'Winstom Marsalis', 'Chico Amaral', 'Leo Brauer', ] for pessoa in pessoas: print pessoa return printed
Python Scripts >> Exercício 3 # Lista de pessoas pessoas = [ 'Antonio Augusto', 'Flavio Andreas', 'Winstom Marsalis', 'Chico Amaral', 'Leo Brauer',] dados = { } import random for pessoa in pessoas: # Gera numeros aleatorios randomid = random.randint(1, 10000) randomidade = random.randint(18,50) # Atribui a idade aleatoria e o ID aleatorio para a pessoa da lista dados[pessoa] = { 'idade':randomidade, 'ID':randomID } for pessoa in dados.keys(): print pessoa + ' : ' + str(dados[pessoa]) return printed
Python Scripts >> Exercício 4 Life, the Universe, and Everything A) Reescreva os números da entrada (uma lista). Pare de processar após ler o número 42. Retorne o resultado em uma lista. Ex: entrada = [2,102, 42, 874, 900] -> saida = [2, 102, 42] Obs: usar a entrada acima. B) Fazer com que a lista entrada seja aleatória, gerando 10000 números entre 1 e 100 e colocando em uma lista.
Usando scripts em templates <html metal:use-macro= context/main_template/macros/master"> <div metal:fill-slot="main" tal:define="conteudo context/meu_script"> <p tal:content="conteudo" /> </div> </html>
Exercício 5 l Confira o enunciado do exercício no material
Exercício 6 l l l Podemos interagir com as chamadas portal tools através de Scripts Python. Abordar o ZODB e portal_catalog. Confira o enunciado do exercício no material
Perguntas?