1.8. tal:repeat: Executando Looping
O tal:repeat permite fazer o looping através dos objetos e é uma das declarações mais complicadas. Uma declaração contém o valor para ser atribuído para cada iteração dos resultados, separada por um espaço dos resultados que estão sendo iterados.
Exemplo 1:
<table>
<tr tal:repeat=”loop_name_row context/portal_catalog”>
<td tal:content=”loop_name_row/Title”>Title</td>
</tr>
</table>
Neste exemplo, a expressão here/portal_catalog retorna a lista de resultados. O repeat começa na tag da tabela loop_name_row, para cada loop_name_row na lista de resultados, uma nova linha na tabela será criada. Assim como tal:define, cada iteração dos resultados são atribuídos para uma variável local (neste caso, loop_name_row).
Exemplo 2:
Você pode acessar algumas variáveis úteis da declaração repeat, tal como o número da iteração atual. Você pode acessa-las pela variável repeat, que é acrescentada ao namespace. Por exemplo, para acessar o número atual, você usa o seguinte:
<table>
<tr tal:repeat=”row context/portal_catalog”>
<td tal:content=”repeat/row/number”>1</td>
<td tal:content=”row/Title”>Title</td>
</tr>
</table>
Exemplo 3:
Agora vamos acrescentar à nossa página uma lista de objetos que se encontram no mesmo diretório. Vamos criar uma tabela cujas linhas serão numeradas em uma coluna, além das colunas para id, metatype e title.
Acrescente esta linha na sua pagina ZPT:
<table border=”1″ width=”100%”>
<tr>
<th>#</th><th>Id</th><th>Meta-Type</th><th>Title</th>
</tr>
<tr tal:repeat=”item container/objectValues”>
<td tal:content=”repeat/item/number”>#</td>
<td tal:content=”item/id”>Id</td>
<td tal:content=”item/meta_type”>Meta-Type</td>
<td tal:content=”item/title”>Title</td>
</tr>
</table>
O atributo tal:repeat aplicada sobre as linhas significa: repita esta linha para cada objeto do container. O atributo repeat atribui os objetos da lista, um à um, à variável item, e criada uma cópia da linha para cada objeto utilizando esta variável. O valor item/id em cada linha é o atributo id do objeto para a linha corrente.
O nome item da variável não é especial; poder-se-ia utilizar qualquer nome desde começasse por uma letra e que contenha apenas letras, números ou “_”. A variável existe apenas no tag no qual encontra-se o atributo tal:repeat, no caso acima o tag <tr>; Se deseja utiliza-la o fora do tag, obterá um erro.
Cada linha no exemplo é numerada, o que implica o conhecimento do número corrente. Poderia também querer identificar se uma linha específica é a primeira ou a última ou outras informações similares. Em cada cópia da linha, a variável item representa um objeto da lista. Este objeto não está consciente do laço, sabe nada a respeito do loop, por conseguinte não existe atributo específico do objeto que permita extrair informações sobre o laço. A variável interna repeat foi criada exatamente para isso. Se põe o nome da variável de conteúdo (item no caso), após a variável repeat, pode aceder à contagem do laço a partir de zero (index), partir de 1 (number), partir de “A” (Letter), e de diferentes outras maneiras.
Por conseguinte, a expressão repeat/item/number é igual à 1 na primeira linha, 2 na segunda, etc. Dado que se pode inserir a expressão tal:repeat no interior de outra expressão tal:repeat, vários laços podem estar ativos por vez. Por essa razão deve-se usar repeat/item/number ao invés de repeat/number, ou seja, simplesmente para obter informações do tal:repeat correto, aquele que criou a variável item.
Segue uma relação das variáveis disponíveis no repeat:
- index: Número de iterações, a partir de zero.
- number: Número de iterações, a partir de um.
- even: É true (verdadeiro) para iteração de números pares (por exemplo, 0, 2, 4, …).
- odd: é true para uma iteração de números ímpares (por exemplo, 1, 3, 5, …).
- start: É true para a primeira iteração.
- end: É true para a última iteração.
- length: É o total do números de iterações.
- letter: Número de iteração com escrita em minúscula (por exemplo, a–z, aa–az, ba–bz, …, za–zz, aaa–aaz, e assim por diante), a partir de um.
- Letter: É a versão maiúscula de letter.
- roman: Número numeral Romano em minúscula (i, ii, iii, iv, v, e assim por diante), a partir de um.

[...] 1.8. tal:repeat: Executando Looping [...]
Índice – Zope Page Templates « Fernando Jr's Blog disse isso em 27/07/2010 às 08:37 |
[...] 1.8. tal:repeat: Executando Looping [...]
2. Aplicação dos princípios « Fernando Jr's Blog disse isso em 27/07/2010 às 08:52 |
oi, eu usei o repeat e não usei estas variaveis disponiveis no repeat, eu fiz assim : e funciona
O uso dessas variáveis são opcionais (para fins específicos). Por exemplo, se você quisesse listar apenas objetos que possuam índice par, você utilizaria as variáveis ‘even’ e ‘index’.
ah ta, entendi
obrigada, seu artigo é ótimo me ajudou nos estudos
abraços